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 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 __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)
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)
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()
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))
import sys from PyQt5 import QtWidgets from ui import Dialog app = QtWidgets.QApplication(sys.argv) win = Dialog.Dialog() win.show() sys.exit(app.exec())
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()