diff options
-rw-r--r-- | MAFH2/BattleEngine.py | 2 | ||||
-rw-r--r-- | MAFH2/BattleMenu.py | 2 | ||||
-rw-r--r-- | MAFH2/Comic.py | 2 | ||||
-rw-r--r-- | MAFH2/Dungeon.py | 2 | ||||
-rw-r--r-- | MAFH2/MafhActivity.py | 2 | ||||
-rw-r--r-- | MAFH2/MafhGameManager.py | 2 | ||||
-rw-r--r-- | MAFH2/MafhGameMenu.py | 2 | ||||
-rw-r--r-- | MAFH2/Map.py | 2 | ||||
-rw-r--r-- | MAFH2/Profile.py | 2 | ||||
-rw-r--r-- | MAFH2/TermBox.py | 2 | ||||
-rw-r--r-- | MAFH2/fortuneengine/GameEngine.py | 174 | ||||
-rw-r--r-- | MAFH2/fortuneengine/GameEngineElement.py | 37 | ||||
-rw-r--r-- | MAFH2/fortuneengine/__init__.py | 0 |
13 files changed, 221 insertions, 10 deletions
diff --git a/MAFH2/BattleEngine.py b/MAFH2/BattleEngine.py index 3d0505b..97e28d5 100644 --- a/MAFH2/BattleEngine.py +++ b/MAFH2/BattleEngine.py @@ -1,4 +1,4 @@ -from GameEngine import GameEngineElement +from fortuneengine.GameEngineElement import GameEngineElement from Enemy import get_enemy from BattleMenu import BattleMenuHolder from AnimatedSprite import Spritesheet diff --git a/MAFH2/BattleMenu.py b/MAFH2/BattleMenu.py index 84e2b4f..7f84daa 100644 --- a/MAFH2/BattleMenu.py +++ b/MAFH2/BattleMenu.py @@ -1,5 +1,5 @@ import pygame -from GameEngine import GameEngineElement +from fortuneengine.GameEngineElement import GameEngineElement from constants import MENU_PATH from gettext import gettext as _ diff --git a/MAFH2/Comic.py b/MAFH2/Comic.py index 8b1f919..485d365 100644 --- a/MAFH2/Comic.py +++ b/MAFH2/Comic.py @@ -1,6 +1,6 @@ import pygame import os -from GameEngine import GameEngineElement +from fortuneengine.GameEngineElement import GameEngineElement ###################################################################### #Comic Class: stores an image list and possible BGM, traverses through list and tries to play BGM ###################################################################### diff --git a/MAFH2/Dungeon.py b/MAFH2/Dungeon.py index 4c3cbf0..843637d 100644 --- a/MAFH2/Dungeon.py +++ b/MAFH2/Dungeon.py @@ -3,7 +3,7 @@ import os.path from time import time from gettext import gettext as _ -from GameEngine import GameEngineElement +from fortuneengine.GameEngineElement import GameEngineElement from BattleEngine import BattleEngine from Map import Map diff --git a/MAFH2/MafhActivity.py b/MAFH2/MafhActivity.py index 84a64a0..39b6108 100644 --- a/MAFH2/MafhActivity.py +++ b/MAFH2/MafhActivity.py @@ -1,4 +1,4 @@ -from GameEngine import GameEngine +from fortuneengine.GameEngine import GameEngine from MafhGameMenu import GameMenuHolder from constants import MENU_PATH, FMC_PATH, TOUR_PATH diff --git a/MAFH2/MafhGameManager.py b/MAFH2/MafhGameManager.py index 2c26903..676c536 100644 --- a/MAFH2/MafhGameManager.py +++ b/MAFH2/MafhGameManager.py @@ -1,6 +1,6 @@ import pygame -from GameEngine import GameEngineElement +from fortuneengine.GameEngineElement import GameEngineElement from TermBox import TermBox from Dungeon import Dungeon diff --git a/MAFH2/MafhGameMenu.py b/MAFH2/MafhGameMenu.py index ae146b2..3ed27dd 100644 --- a/MAFH2/MafhGameMenu.py +++ b/MAFH2/MafhGameMenu.py @@ -1,5 +1,5 @@ import pygame, ezmenu -from GameEngine import GameEngineElement +from fortuneengine.GameEngineElement import GameEngineElement class GameMenuHolder( GameEngineElement ): def __init__(self, callback, background=None, width=1200, height=900): diff --git a/MAFH2/Map.py b/MAFH2/Map.py index cfe3a17..878cbfe 100644 --- a/MAFH2/Map.py +++ b/MAFH2/Map.py @@ -5,7 +5,7 @@ from constants import ( NORTH, EAST, WEST, SOUTH,UNLOCKED_DOOR, LOCKED_DOOR, PUZZLE_DOOR, LOCKED_PUZZLE_DOOR, ENTRANCE_DOOR, EXIT_DOOR ) -from GameEngine import GameEngineElement +from fortuneengine.GameEngineElement import GameEngineElement from gettext import gettext as _ diff --git a/MAFH2/Profile.py b/MAFH2/Profile.py index 5f801c0..04d8d9d 100644 --- a/MAFH2/Profile.py +++ b/MAFH2/Profile.py @@ -1,6 +1,6 @@ import pygame -from GameEngine import GameEngineElement +from fortuneengine.GameEngineElement import GameEngineElement from constants import MENU_PATH, NORTH, SOUTH, EAST, WEST, RIGHT, LEFT from Hero import Hero diff --git a/MAFH2/TermBox.py b/MAFH2/TermBox.py index c9d09f8..620b29c 100644 --- a/MAFH2/TermBox.py +++ b/MAFH2/TermBox.py @@ -1,5 +1,5 @@ import pygame -from GameEngine import GameEngineElement +from fortuneengine.GameEngineElement import GameEngineElement class TermBox(GameEngineElement): def __init__(self, x,y,width,height,lines): GameEngineElement.__init__(self, has_draw=True, has_event=False) diff --git a/MAFH2/fortuneengine/GameEngine.py b/MAFH2/fortuneengine/GameEngine.py new file mode 100644 index 0000000..befdf0f --- /dev/null +++ b/MAFH2/fortuneengine/GameEngine.py @@ -0,0 +1,174 @@ +import pygame + +class GameEngine(object): + instance = None + def __init__(self, width=1200, height=900): + GameEngine.instance = self + pygame.init() + pygame.mouse.set_visible(False) + + self.width = width + self.height = height + size = width, height + + self.screen = pygame.display.set_mode(size) + + self.__event_cb = [] + self.__draw_lst = [] + self.__object_hold = {} + + self.clock = pygame.time.Clock() + + def start_event_timer(self, id, time): + pygame.time.set_timer(pygame.USEREVENT + id, time) + + def stop_event_timer(self, id): + pygame.time.set_timer(pygame.USEREVENT + id, 0) + + def start_event_loop(self): + """ + Starts the pygame event loop. + """ + self.__run = True + pygame.event.set_blocked(pygame.MOUSEMOTION) + while self.__run: + self.clock.tick(15) + update_draw = False + for event in pygame.event.get(): + + if event.type == pygame.QUIT: + self.__run = False + + else: + # Send event to all event listeners + # Make a copy first so that adding events don't get fired right away + list_cp = self.__event_cb[:] + + # Reverse list so that newest stuff is on top + list_cp.reverse() + + for cb in list_cp: + # Fire the event for all in cb and stop if return True + if cb(event) == True: + update_draw = True + break + + if update_draw: + self.draw() + #~ print "\n\n" + #~ print "Event Listeners:" + #~ for eventlst in self.__event_cb: + #~ print "\t",eventlst + + #~ print "\nDraw Callbacks:" + #~ for eventlst in self.__draw_lst: + #~ print "\t",eventlst + + #~ print "\nObjects Registered:" + #~ for eventlst in self.__object_hold: + #~ print "\t",eventlst + + def stop_event_loop(self): + """ + Sends a pygame.QUIT event into the event queue which exits the event loop + """ + pygame.event.post(pygame.event.Event(pygame.QUIT)) + + def draw(self): + """ + Calls draw on the draw callback stack then calls the pygame flip command + """ + for fnc in self.__draw_lst: + fnc(self.screen) + pygame.display.flip() + + def add_event_callback(self, cb): + """ + Adds event callback to the event callback stack + + @param cb Callback to be added to the stack when events are fired + """ + self.__event_cb.append( cb ) + + def remove_event_callback(self, cb): + """ + Removes an event from the event callback stack + + @param cb The callback to remove from the event callback stack + @return Returns true if sucessful in removing callback + """ + try: + self.__event_cb.remove( cb ) + return True + except: + return False + + def add_draw_callback(self, fnc): + """ + Adds a callback to the draw list. Function will be passed the game screen + + @param fnc The funciton to call when system is drawing + """ + self.__draw_lst.append( fnc ) + + def pop_draw_callback(self): + """ + Removes top of draw stack and returns it + + @return Returns the top callback function that was removed + """ + return self.__draw_lst.pop() + + def clear_draw_callback(self): + """ + Empties draw callback stack + """ + self.__draw_lst = [] + + def remove_draw_callback(self, fnc): + """ + Removes a draw callback from the game engine draw function + + @param fnc The callback function to remove + @return Returns true if sucessful removal of the function + """ + try: + self.__draw_lst.remove(fnc) + return True + except: + return False + + def has_object(self, name): + """ + Returns true if object is stored in game engine + + @param name Name of the object to check if exists + @return Returns true if object found + """ + return self.__object_hold.has_key( name ) + + def add_object(self, name, obj): + """ + Adds an object to the game engine datastore + + @param name The name used to store the object + @param obj The object to store + """ + self.__object_hold[name] = obj + + def get_object(self, name): + """ + Returns an object from the game engine datastore + + @param name The name of object to return + @return Returns the object + """ + return self.__object_hold[name] + + def remove_object(self, name): + """ + Removes an object from the game engine datastore + + @param name The name of the object to remove + """ + del self.__object_hold[name] diff --git a/MAFH2/fortuneengine/GameEngineElement.py b/MAFH2/fortuneengine/GameEngineElement.py new file mode 100644 index 0000000..2ef8302 --- /dev/null +++ b/MAFH2/fortuneengine/GameEngineElement.py @@ -0,0 +1,37 @@ +from fortuneengine.GameEngine import GameEngine + +class GameEngineElement(object): + def __init__(self, has_draw=True, has_event=True): + self.__has_draw = has_draw + self.__has_event = has_event + self.__in_engine = False + self.game_engine = GameEngine.instance + + def is_in_engine(self): + return self.__in_engine + + def add_to_engine(self): + if not self.__in_engine: + self.__in_engine = True + + if self.__has_draw: + self.game_engine.add_draw_callback( self.draw ) + + if self.__has_event: + self.game_engine.add_event_callback( self.event_handler ) + + def remove_from_engine(self): + if self.__in_engine: + self.__in_engine = False + + if self.__has_draw: + self.game_engine.remove_draw_callback(self.draw) + + if self.__has_event: + self.game_engine.remove_event_callback( self.event_handler ) + + def event_handler(self, event): + pass + + def draw(self, screen): + pass diff --git a/MAFH2/fortuneengine/__init__.py b/MAFH2/fortuneengine/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/MAFH2/fortuneengine/__init__.py |