My Pygame Game Engine
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