| __pycache__/ |
| from game.application import Application | |||||
| import game.gbe | |||||
| def start(): | |||||
| t = game.gbe.Time() | |||||
| t.reset() | |||||
| d = game.gbe.Display() | |||||
| d.init() | |||||
| while t.aliveSeconds < 5.0: | |||||
| print(t.aliveSeconds) | |||||
| d.close() |
| import time | |||||
| import pygame | |||||
| from pygame.locals import * | |||||
| class Application: | |||||
| def __init__(self, width=640, height=480): | |||||
| self._running = False | |||||
| self._init = False | |||||
| self._resolution = width, height | |||||
| self.lastFrameTime = 0 | |||||
| def init(self): | |||||
| pygame.init() | |||||
| self._display_surface = pygame.display.set_mode(self._resolution, pygame.HWSURFACE | pygame.DOUBLEBUF) | |||||
| self._init = True | |||||
| def on_event(self, event): | |||||
| if event.type == pygame.QUIT: | |||||
| self._running = False | |||||
| def on_cleanup(self): | |||||
| pygame.quit() | |||||
| def execute(self): | |||||
| # We want to automatically exit if app is already running or if app hasn't yet been init. | |||||
| if self._running or not self._init: | |||||
| return False | |||||
| self._running = True | |||||
| while self._running: | |||||
| # Calculate delta time since last frame. | |||||
| currentTime = time.time() | |||||
| dt = 0 | |||||
| if self.lastFrameTime != 0: | |||||
| dt = currentTime - self.lastFrameTime | |||||
| self.lastFrameTime = currentTime | |||||
| for event in pygame.event.get(): | |||||
| self.on_event(event) | |||||
| self.on_cleanup() |
| from .core import Time | |||||
| from .core import Display |
| ''' | |||||
| Filename core.py | |||||
| Author: Bryan "ObsidianBlk" Miller | |||||
| Date Created: 8/1/2018 | |||||
| Python Version: 3.7 | |||||
| ''' | |||||
| import time | |||||
| import pygame | |||||
| class Time: | |||||
| def __init__(self): | |||||
| self._dticks = 0 | |||||
| self._ldelta = 0 | |||||
| self._lastTick = 0 | |||||
| @property | |||||
| def delta(self): | |||||
| tick = int(round(time.time() * 1000)) | |||||
| dt = 0 | |||||
| if self._lastTick > 0: | |||||
| dt = tick - self._lastTick | |||||
| self._lastTick = tick | |||||
| self._ldelta = dt | |||||
| self._dticks += dt | |||||
| return dt | |||||
| @property | |||||
| def last_delta(self): | |||||
| return self._ldelta | |||||
| @property | |||||
| def aliveTicks(self): | |||||
| tick = int(round(time.time() * 1000)) | |||||
| dt = 0 | |||||
| if self._lastTick > 0: | |||||
| dt = tick - self._lastTick | |||||
| return self._dticks + dt | |||||
| @property | |||||
| def aliveSeconds(self): | |||||
| return self.aliveTicks / 1000.0 | |||||
| def reset(self): | |||||
| self.dticks = 0 | |||||
| self._lastTick = int(round(time.time() * 1000)) | |||||
| class Display: | |||||
| def __init__(self, width=640, height=480): | |||||
| self._init = False | |||||
| self._resolution = width, height | |||||
| @property | |||||
| def surface(self): | |||||
| return self._display_surface | |||||
| @property | |||||
| def width(self): | |||||
| return self._resolution[0] | |||||
| @property | |||||
| def height(self): | |||||
| return self._resolution[1] | |||||
| def init(self): | |||||
| if self._init == False: | |||||
| self._init = True | |||||
| pygame.init() | |||||
| self._display_surface = pygame.display.set_mode(self._resolution, pygame.HWSURFACE | pygame.DOUBLEBUF) | |||||
| def close(self): | |||||
| pygame.quit() | |||||
| import weakref | |||||
| import pygame | |||||
| def _getWeakRef(fn): | |||||
| if not hasattr(fn, "__func__"): | |||||
| return None | |||||
| if hasattr(fn, "__self__"): | |||||
| return weakref.WeakMethod(fn) | |||||
| return weakref.ref(fn) | |||||
| class EventError(Exception): | |||||
| pass | |||||
| class _Events: | |||||
| def __init__(self): | |||||
| self._signals = {} | |||||
| def _ClearUnreferenced(self): | |||||
| def isempty(r): | |||||
| return r() is not None | |||||
| for signal, sigs in self._signals: | |||||
| self._signals[signal] = filter(isempty, sigs) | |||||
| def listen(self, signal, fn): | |||||
| ref = _getWeakRef(fn) | |||||
| if ref is None or ref() is None: | |||||
| raise EventError("Expected a function callback.") | |||||
| if not signal in self._signals: | |||||
| self._signals[signal] = [] | |||||
| if not ref in self._signals[signal]: | |||||
| self._signal[signal].append(ref) | |||||
| def unlisten(self, signal, fn): | |||||
| ref = _getWeakRef(fn) | |||||
| if res is None or ref() is None: | |||||
| return # Not a function. Nothing to do. | |||||
| if signal in self._signals: | |||||
| if ref in self._signals[signal]: | |||||
| self._signals[signal].remove(ref) | |||||
| def unlisten_all(self, signal): | |||||
| if signal in self._signals: | |||||
| del self._signals[signal] | |||||
| def emit(self, signal, data): | |||||
| if signal in self._signals: | |||||
| for r in self._signals[signal]: | |||||
| fn = r() | |||||
| if fn is not None: | |||||
| fn(signal, data) | |||||
| self._ClearUnreferenced() | |||||
| # Create the actual Events instance :) | |||||
| Events = _Events() | |||||
| def pollEmitter(): | |||||
| for event in pygame.event.get(): | |||||
| #TODO: For each event obtains, convert it for the above Event dispatcher | |||||
| pass | |||||
| if __name__ == "__main__": | if __name__ == "__main__": | ||||
| app = game.Application() | |||||
| app.init() | |||||
| app.execute() | |||||
| game.start() | |||||
| #app = game.Application() | |||||
| #app.init() | |||||
| #app.execute() |