Пример #1
0
    def __init__(self, window, world, renderer, factory):
        self.window = window
        self.renderer = renderer
        self.world = world
        self.factory = factory

        self.rsystem = factory.create_sprite_render_system(window)

        self.menu_bg = RESOURCES.get_path("wolfe-09-muybridge.jpg")
        self.menu_cursor = RESOURCES.get_path("menu_cursor.png")

        self.running = True
        self.position = 460, 340
        self.cursor_start_position = 370, 330
        self.cursor_position = 0
        self.cursor_sprite_size = 32

        self.background_sprite = self.factory.from_image(self.menu_bg)
        self.cursor_sprite = self.factory.from_image(self.menu_cursor)

        self.horse_names = HorseNames()
        self.horse_list = self.horse_names.get_horse_list()

        self.player_choise = PlayerChoice()

        self.text = {0: self.horse_list[0],
                     1: self.horse_list[1],
                     2: self.horse_list[2],
                     3: self.horse_list[3],
                     4: self.horse_list[4]
                     }

        self.dialog = Dialog(self.factory,
                             font_size=32,
                             fg_color=Colors.WHITE,
                             bg_color=Colors.BLACK,
                             font_name="BebasKai.ttf",
                             text=self.text,
                             position=self.position,
                             renderer=self.renderer)

        self.sprites = [self.background_sprite]

        dialog_decoration_sprites = self.dialog.get_decoration_sprites()
        self.sprites.append(dialog_decoration_sprites)
        text_sprites = self.dialog.get_text_sprites()

        for line in text_sprites:
            self.sprites.append(line)

        self.sprites.append(self.cursor_sprite)
Пример #2
0
    def dialog_update(self):

        self.dialog_timer.update()

        if self.dialog_timer.check():
            self.dialog_timer.reset()
            self.close_dialog_timer.activate()
            self.msg = dice(len(self.dialogs) - 1)
            self.dialog_box = Dialog(self.window, Colors.WHITHE, 16, (10, 400),
                                     Colors.BLACK)

        self.close_dialog_timer.update()

        if self.close_dialog_timer.check():
            self.close_dialog_timer.reset()
            self.dialog_timer.activate()
            self.dialog_box = None
Пример #3
0
    def __init__(self, window, world, renderer, factory):
        self.window = window
        self.renderer = renderer
        self.world = world
        self.factory = factory

        self.rsystem = factory.create_sprite_render_system(window)

        self.menu_bg = RESOURCES.get_path("menu_bg.png")
        self.menu_cursor = RESOURCES.get_path("menu_cursor.png")

        self.running = True
        self.position = 460, 340
        self.cursor_start_position = 370, 330
        self.cursor_position = 0
        self.cursor_sprite_size = 32

        self.background_sprite = self.factory.from_image(self.menu_bg)
        self.cursor_sprite = self.factory.from_image(self.menu_cursor)

        self.text = {0: "START", 1: "OPTIONS", 2: "EXIT"}

        self.dialog = Dialog(self.factory,
                             font_size=32,
                             fg_color=Colors.WHITE,
                             bg_color=Colors.BLACK,
                             font_name="04B_20__.TTF",
                             text=self.text,
                             position=self.position,
                             renderer=self.renderer)

        self.sprites = [self.background_sprite]

        dialog_decoration_sprites = self.dialog.get_decoration_sprites()
        self.sprites.append(dialog_decoration_sprites)
        text_sprites = self.dialog.get_text_sprites()

        for line in text_sprites:
            self.sprites.append(line)

        self.sprites.append(self.cursor_sprite)
Пример #4
0
    def __init__(self, window):
        self.window = window
        self.renderer = window.renderer
        self.sdl_renderer = window.renderer.renderer

        self.menu_bg = RESOURCES.get_path("menu_bg.png")
        self.menu_cursor = RESOURCES.get_path("menu_cursor.png")

        self.factory = sdl2.ext.SpriteFactory(sdl2.ext.TEXTURE,
                                              renderer=self.renderer)

        self.running = True

        self.cursor_position = [0, 0]
        self.cursor_sprite_size = 64

        self.menu_bg_sprite = self.factory.from_image(self.menu_bg)
        self.menu_cursor_sprite = self.factory.from_image(self.menu_cursor)

        self.menu_text = {0: "DEBUG ROOM", 1: "OPTIONS", 2: "EXIT"}
        self.menu_dialog = Dialog(self.window, Colors.WHITHE, 32, (300, 200),
                                  Colors.BLACK)
Пример #5
0
class Lobby:
    def __init__(self, window, world, renderer, factory):
        self.window = window
        self.renderer = renderer
        self.world = world
        self.factory = factory

        self.rsystem = factory.create_sprite_render_system(window)

        self.menu_bg = RESOURCES.get_path("wolfe-09-muybridge.jpg")
        self.menu_cursor = RESOURCES.get_path("menu_cursor.png")

        self.running = True
        self.position = 460, 340
        self.cursor_start_position = 370, 330
        self.cursor_position = 0
        self.cursor_sprite_size = 32

        self.background_sprite = self.factory.from_image(self.menu_bg)
        self.cursor_sprite = self.factory.from_image(self.menu_cursor)

        self.horse_names = HorseNames()
        self.horse_list = self.horse_names.get_horse_list()

        self.player_choise = PlayerChoice()

        self.text = {0: self.horse_list[0],
                     1: self.horse_list[1],
                     2: self.horse_list[2],
                     3: self.horse_list[3],
                     4: self.horse_list[4]
                     }

        self.dialog = Dialog(self.factory,
                             font_size=32,
                             fg_color=Colors.WHITE,
                             bg_color=Colors.BLACK,
                             font_name="BebasKai.ttf",
                             text=self.text,
                             position=self.position,
                             renderer=self.renderer)

        self.sprites = [self.background_sprite]

        dialog_decoration_sprites = self.dialog.get_decoration_sprites()
        self.sprites.append(dialog_decoration_sprites)
        text_sprites = self.dialog.get_text_sprites()

        for line in text_sprites:
            self.sprites.append(line)

        self.sprites.append(self.cursor_sprite)

    def __del__(self):
        SDL_Quit()

    def update(self, elapsed_time):
        self.cursor_sprite.position = self.cursor_start_position[0], \
                                      self.cursor_start_position[1] + self.cursor_position * self.cursor_sprite_size

    def run(self):
        menu_input = Input()

        last_update_time = SDL_GetTicks()  # units.MS

        while self.running:
            start_time = SDL_GetTicks()  # units.MS

            menu_input.begin_new_frame()
            menu_events = get_events()

            for event in menu_events:
                if event.type == SDL_KEYDOWN:
                    menu_input.key_down_event(event)

                elif event.type == SDL_KEYUP:
                    menu_input.key_up_event(event)

                elif event.type == SDL_QUIT:
                    self.running = False
                    break

            # Exit
            if menu_input.was_key_pressed(SDLK_ESCAPE):
                self.running = False

            # Move the cursor
            elif menu_input.was_key_pressed(SDLK_UP):
                if self.cursor_position != 0:
                    self.cursor_position -= 1
            elif menu_input.was_key_pressed(SDLK_DOWN):
                if self.cursor_position != 4:
                    self.cursor_position += 1

            # Select option
            elif menu_input.was_key_pressed(SDLK_RETURN):
                self.running = False
                if self.cursor_position == 0:
                    self.launch_game()

            current_time = SDL_GetTicks()  # units.MS
            elapsed_time = current_time - last_update_time  # units.MS

            self.update(min(elapsed_time, MAX_FRAME_TIME))

            last_update_time = current_time

            self.renderer.process(self.world, self.sprites)

            # This loop lasts 1/60th of a second, or 1000/60th ms
            ms_per_frame = 1000 // FPS  # units.MS
            elapsed_time = SDL_GetTicks() - start_time  # units.MS
            if elapsed_time < ms_per_frame:
                SDL_Delay(ms_per_frame - elapsed_time)

    def launch_game(self):
        game = Game(self.world, self.window, self.renderer, self.factory)
        game.run()

        self.running = True
        self.run()
Пример #6
0
class NPC:
    def __init__(self, window, data):

        self.dialog_timer = Timer(10000, activated=True)
        self.close_dialog_timer = Timer(10000)

        self.db = DataBase()

        self.window = window
        self.renderer = window.renderer

        self.name = data["name"]
        self.level = data["level"]
        self.quest = data["quest"]
        self.sprite_size = 128
        self.position = [0, 0]
        self.movement = [0, 0]

        self.moving = False

        self.npc_sprites = [
            RESOURCES.get_path("{0}_standing.png".format(self.name)),
            RESOURCES.get_path("{0}_walking.png".format(self.name))
        ]

        self.factory = sdl2.ext.SpriteFactory(sdl2.ext.TEXTURE,
                                              renderer=self.renderer)

        self.sprite_sheets = {}

        self.facing = Facing.LEFT_DOWN
        self.last_facing = self.facing

        self.motion_type = MotionType.STANDING
        self.last_motion_type = self.motion_type

        self.frame_index = 0
        self.walk_frames = 60

        self.init_sprite_sheet()

        self.dialogs = self.db.get_npc_dialog(self.name)
        self.dialog_box = None
        self.msg = None

    def init_sprite_sheet(self):
        for motion_type in range(MotionType.COUNT):
            self.load_image(self.npc_sprites[motion_type], motion_type)

    def load_image(self, file_path, motion_type):
        sprite_sheets = self.sprite_sheets.get(file_path)
        if not sprite_sheets:
            sprite_surface = self.factory.from_image(file_path)
            self.sprite_sheets[motion_type] = sprite_surface

    def update(self, position, elapsed_time):

        self.position = position

        self.frame_index += 1

        if self.frame_index == (self.sprite_sheets[self.motion_type].size[0] /
                                self.sprite_size):
            self.frame_index = 0

        if not self.moving:
            move = dice(200)
            if move[0] == 200:
                self.moving = True
                self.walk_frames = 60
                facing = dice(Facing.COUNT - 1)
                self.facing = facing[0]

        if self.moving:
            if self.walk_frames:
                self.motion_type = MotionType.WALKING

                if self.facing == 0:
                    # print("LEFT_DOWN")
                    self.movement[0] -= 2
                    self.movement[1] += 1
                    self.facing = Facing.LEFT_DOWN
                elif self.facing == 1:
                    # print("DOWN")
                    self.movement[1] += 1
                    self.facing = Facing.DOWN
                elif self.facing == 2:
                    # print("RIGHT_DOWN")
                    self.movement[0] += 2
                    self.movement[1] += 1
                    self.facing = Facing.RIGHT_DOWN
                elif self.facing == 3:
                    # print("RIGHT")
                    self.movement[0] += 2
                    self.facing = Facing.RIGHT
                elif self.facing == 4:
                    # print("RIGHT_UP")
                    self.movement[0] += 2
                    self.movement[1] -= 1
                    self.facing = Facing.RIGHT_UP
                elif self.facing == 5:
                    # print("UP")
                    self.movement[1] -= 1
                    self.facing = Facing.UP
                elif self.facing == 6:
                    # print("LEFT_UP")
                    self.movement[0] -= 2
                    self.movement[1] -= 1
                    self.facing = Facing.LEFT_UP
                elif self.facing == 7:
                    # print("LEFT")
                    self.movement[0] -= 2
                    self.facing = Facing.LEFT

                self.walk_frames -= 1
            else:
                self.moving = False
                self.motion_type = MotionType.STANDING

        self.dialog_update()

    def draw(self):

        renderer = self.renderer.renderer
        motion_type = self.motion_type
        facing = self.facing
        frame_index = self.frame_index
        position = self.position
        movement = self.movement

        sprite = self.sprite_sheets[motion_type]
        sprite_size = self.sprite_size

        x = int(((WindowSize.WIDTH / 2) + position[0] + movement[0]) -
                (sprite_size / 2))
        y = int(((WindowSize.HEIGHT / 2) + position[1] + movement[1]) -
                (sprite_size / 2))

        src_rect = SDL_Rect()

        src_rect.x = frame_index * sprite_size
        src_rect.y = facing * sprite_size
        src_rect.w = sprite_size
        src_rect.h = sprite_size

        dest_rect = SDL_Rect()

        dest_rect.x = x
        dest_rect.y = y
        dest_rect.w = sprite_size
        dest_rect.h = sprite_size

        render.SDL_RenderCopy(renderer, sprite.texture, src_rect, dest_rect)

        self.dialog_draw((x, y))

    def dialog_update(self):

        self.dialog_timer.update()

        if self.dialog_timer.check():
            self.dialog_timer.reset()
            self.close_dialog_timer.activate()
            self.msg = dice(len(self.dialogs) - 1)
            self.dialog_box = Dialog(self.window, Colors.WHITHE, 16, (10, 400),
                                     Colors.BLACK)

        self.close_dialog_timer.update()

        if self.close_dialog_timer.check():
            self.close_dialog_timer.reset()
            self.dialog_timer.activate()
            self.dialog_box = None

    def dialog_draw(self, position):

        if self.dialog_box:

            x, y = position

            name = self.dialogs[self.msg[0]]['npc']
            text = self.dialogs[self.msg[0]]['text']
            message = {0: "{0}:".format(name)}

            max_chars = 24
            i = 1
            for j in range(0, len(text), max_chars):
                message[i] = text[j:j + max_chars]
                i += 1

            self.dialog_box.draw(message, (x, y - 100))
Пример #7
0
import sys
from PyQt5 import QtWidgets

from ui import Dialog

app = QtWidgets.QApplication(sys.argv)
win = Dialog.Dialog()
win.show()
sys.exit(app.exec())
Пример #8
0
class Menu:
    def __init__(self, window):
        self.window = window
        self.renderer = window.renderer
        self.sdl_renderer = window.renderer.renderer

        self.menu_bg = RESOURCES.get_path("menu_bg.png")
        self.menu_cursor = RESOURCES.get_path("menu_cursor.png")

        self.factory = sdl2.ext.SpriteFactory(sdl2.ext.TEXTURE,
                                              renderer=self.renderer)

        self.running = True

        self.cursor_position = [0, 0]
        self.cursor_sprite_size = 64

        self.menu_bg_sprite = self.factory.from_image(self.menu_bg)
        self.menu_cursor_sprite = self.factory.from_image(self.menu_cursor)

        self.menu_text = {0: "DEBUG ROOM", 1: "OPTIONS", 2: "EXIT"}
        self.menu_dialog = Dialog(self.window, Colors.WHITHE, 32, (300, 200),
                                  Colors.BLACK)

    def update(self, elapsed_time):
        pass

    def run(self):

        menu_input = Input()

        last_update_time = SDL_GetTicks()  # units.MS

        while self.running:
            start_time = SDL_GetTicks()  # units.MS

            menu_input.begin_new_frame()
            menu_events = sdl2.ext.get_events()

            for event in menu_events:
                if event.type == SDL_KEYDOWN:
                    menu_input.key_down_event(event)

                elif event.type == SDL_KEYUP:
                    menu_input.key_up_event(event)

                elif event.type == SDL_QUIT:
                    self.running = False
                    break

            # Exit
            if menu_input.was_key_pressed(SDLK_ESCAPE):
                self.running = False

            # Move the cursor
            elif menu_input.was_key_pressed(SDLK_UP):
                if self.cursor_position[1] != 0:
                    self.cursor_position[1] -= 1
            elif menu_input.was_key_pressed(SDLK_DOWN):
                if self.cursor_position[1] != 2:
                    self.cursor_position[1] += 1

            # Select option
            elif menu_input.was_key_pressed(SDLK_RETURN):
                self.running = False
                if self.cursor_position[1] == 0:
                    self.launch_debug()

            current_time = SDL_GetTicks()  # units.MS
            elapsed_time = current_time - last_update_time  # units.MS

            self.update(min(elapsed_time, MAX_FRAME_TIME))

            last_update_time = current_time

            self.draw()
            self.window.refresh()

            # This loop lasts 1/60th of a second, or 1000/60th ms
            ms_per_frame = 1000 // FPS  # units.MS
            elapsed_time = SDL_GetTicks() - start_time  # units.MS
            if elapsed_time < ms_per_frame:
                SDL_Delay(ms_per_frame - elapsed_time)

    def draw(self):

        renderer = self.sdl_renderer

        menu_text = self.menu_text

        cursor_position = self.cursor_position
        cursor_size = self.cursor_sprite_size

        menu_bg = self.menu_bg_sprite
        menu_cursor = self.menu_cursor_sprite

        bg_dest_rect = SDL_Rect()

        bg_dest_rect.x = 0
        bg_dest_rect.y = 0
        bg_dest_rect.w = WindowSize.WIDTH
        bg_dest_rect.h = WindowSize.HEIGHT

        cursor_dest_rect = SDL_Rect()

        cursor_dest_rect.x = int((WindowSize.WIDTH / 2 - 200) -
                                 (cursor_size / 2))
        cursor_dest_rect.y = int((WindowSize.HEIGHT / 2 - 72) -
                                 (cursor_size / 2)) + (cursor_position[1] * 32)
        cursor_dest_rect.w = cursor_size
        cursor_dest_rect.h = cursor_size

        self.renderer.clear()

        render.SDL_RenderCopy(renderer, menu_bg.texture, None, bg_dest_rect)

        self.menu_dialog.draw(menu_text)

        render.SDL_RenderCopy(renderer, menu_cursor.texture, None,
                              cursor_dest_rect)

        self.renderer.present()

    def launch_debug(self):
        game = Game(self.window)
        game.run()

        self.running = True
        self.run()