My Pygame Game Engine
at main 3.8 kB view raw
1## Imports 2 3# Non Local Modules 4 5import pygame, os, json, pyautogui, sys, time 6 7# Local Modules 8 9from .modules.input import Input 10from .modules.language import Language_Handler 11from .modules.colors import Color_Handler 12from .modules.sound import Sound_Handler 13from .modules.image import image 14from .modules.math_utils import math_utils 15from .modules.renderer import renderer 16from .modules.fonts import font_handler 17from .modules.debug import Debug 18 19# Screens 20 21from .screens.engine_main_screen import engine_main_screen 22from .screens.game_screen import game_screen 23from .screens.level_editor import level_editor_screen 24 25## Game Manager Class 26 27class Game_Manager: 28 29 def stop(self): 30 self.running = False 31 32 def change_title(self, title): 33 self.title = title 34 pygame.display.set_caption(title) 35 36 def __init__(self): 37 ## Set asset pack (Needs to be done before modules) 38 39 self.current_assetpack = "main" 40 41 ## Initialize all modules 42 43 self.input = Input() 44 self.language_handler = Language_Handler(self) 45 self.color_handler = Color_Handler(self) 46 self.sound_handler = Sound_Handler(self) 47 self.image = image(self) 48 self.math = math_utils() 49 self.renderer = renderer(self) 50 self.font_handler = font_handler(self) 51 self.debug = Debug(self) 52 53 ## Time 54 55 self.delta_time = 1 56 self.game_speed = 1 57 self.clock = pygame.time.Clock() 58 59 ## General Info and Data 60 61 self.running = True 62 self.title = "Game" 63 64 with open(os.path.join("src", "properties.json"), "r") as file: 65 self.properties = json.load(file) 66 67 self.change_title(self.properties["id"]) 68 icon = pygame.image.load(os.path.join("src", "resources", self.current_assetpack, "assets", "icon.png")) 69 pygame.display.set_icon(icon) 70 71 ## Start debug 72 73 self.previous_time = time.time() 74 75 ## Set input state 76 77 self.input.set_input_state('general') 78 79 ## Set to default settings 80 81 def initialize(self): 82 self.change_title(self.properties["id"]) 83 self.input.input_state = "general" 84 85 self.renderer.load_screen(engine_main_screen(self), "engine_main") 86 self.renderer.load_screen(game_screen(self), "game_screen") 87 #self.renderer.load_screen(level_editor_screen(self), "level_editor") 88 self.renderer.switch_screen("game_screen") 89 90 ## Main Update Method 91 92 def update(self): 93 ## Calculate Delta Time 94 95 now = time.time() 96 self.delta_time = now - self.previous_time 97 self.previous_time = now 98 99 ## Input 100 101 self.input.any_key_pressed = False 102 for i, item in enumerate(self.input.pressed_keys): 103 self.input.pressed_keys[i] = False 104 105 ## Events 106 107 keys = pygame.key.get_pressed() 108 for event in pygame.event.get(): 109 110 # Stop if quit called 111 112 if event.type == pygame.QUIT: 113 self.stop() 114 115 # Input 116 117 if event.type == pygame.KEYDOWN: 118 self.input.any_key_pressed = True 119 for i, key in enumerate(self.input.record_keys): 120 key_signature = 0 121 exec("key_signature = pygame.K_" + key) 122 self.input.pressed_keys[i] = keys[key_signature] 123 124 ## Screens 125 126 self.renderer.update() 127 128 self.debug.update() 129 130 ## Trail update method 131 132 def end_update(self): 133 self.input.check_keys() 134 self.input.mouse_button_last_frame = self.input.is_mouse_button_pressed() 135 136 ## Main Renderer Method 137 138 def render(self): 139 self.renderer.render() 140 141 ## Trail renderer method 142 143 def end_render(self): 144 pass