def __init__(self): """Base class initializer. Initialize base class and manager classes. Manager classes and their methods form the Driftwood Scripting API. Attributes: config: ConfigManager instance. log: LogManager instance. database: DatabaseManager instance. filetype: Shortcut to filetype module. tick: TickManager instance. path: PathManager instance. cache: CacheManager instance. resource: ResourceManager instance. input: InputManager instance. window: WindowManager instance. entity: EntityManager instance. area: AreaManager instance. script: ScriptManager instance. keycode: Contains the SDL keycodes. running: Whether the mainloop should continue running. Set False to shut down the engine. """ self.config = ConfigManager(self) self.log = LogManager(self) self.database = DatabaseManager(self) self.tick = TickManager(self) self.path = PathManager(self) self.cache = CacheManager(self) self.resource = ResourceManager(self) self.input = InputManager(self) self.window = WindowManager(self) self.entity = EntityManager(self) self.area = AreaManager(self) self.script = ScriptManager(self) # SDL Keycodes. self.keycode = keycode self.running = False
class Driftwood: """The top-level base class This class contains the top level manager class instances and the mainloop. The instance of this class is passed to scripts as an API reference. """ def __init__(self): """Base class initializer. Initialize base class and manager classes. Manager classes and their methods form the Driftwood Scripting API. Attributes: config: ConfigManager instance. log: LogManager instance. database: DatabaseManager instance. filetype: Shortcut to filetype module. tick: TickManager instance. path: PathManager instance. cache: CacheManager instance. resource: ResourceManager instance. input: InputManager instance. window: WindowManager instance. entity: EntityManager instance. area: AreaManager instance. script: ScriptManager instance. keycode: Contains the SDL keycodes. running: Whether the mainloop should continue running. Set False to shut down the engine. """ self.config = ConfigManager(self) self.log = LogManager(self) self.database = DatabaseManager(self) self.tick = TickManager(self) self.path = PathManager(self) self.cache = CacheManager(self) self.resource = ResourceManager(self) self.input = InputManager(self) self.window = WindowManager(self) self.entity = EntityManager(self) self.area = AreaManager(self) self.script = ScriptManager(self) # SDL Keycodes. self.keycode = keycode self.running = False def run(self): """Perform startup procedures and enter the mainloop. """ # Only run if not already running. if not self.running: self.running = True # Execute the init function of the init script if present. if not self.path["init.py"]: self.log.msg("WARNING", "Driftwood", "init.py missing, nothing will happen") else: self.script.call("init.py", "init") # Escape key pauses the engine. self.input.register(self.keycode.SDLK_ESCAPE, self.__handle_pause) # This is the mainloop. while self.running: # Process SDL events. sdlevents = sdl2ext.get_events() for event in sdlevents: if event.type == SDL_QUIT: # Stop running. self.running = False elif event.type == SDL_KEYDOWN: # Pass a keydown to the Input Manager. self.input._key_down(event.key.keysym.sym) elif event.type == SDL_KEYUP: # Pass a keyup to the Input Manager. self.input._key_up(event.key.keysym.sym) elif event.type == SDL_WINDOWEVENT and event.window.event == SDL_WINDOWEVENT_EXPOSED: self.window.refresh() # Process tick callbacks. self.tick.tick() print("Shutting down...") return 0 def __handle_pause(self, keyevent): if keyevent == InputManager.ONDOWN: # Shift+Escape shuts down the engine. if self.input.pressed(self.keycode.SDLK_LSHIFT) or self.input.pressed(self.keycode.SDLK_RSHIFT): self.running = False else: self.tick.toggle_pause()