1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 """This module contains the main Application class
16 and the basic Listener for PARPG """
17
18
19 from fife import fife
20 from fife.extensions import pychan
21 from fife.extensions.basicapplication import ApplicationBase
22
23 from scripts.gamemodel import GameModel
24 from scripts.mainmenuview import MainMenuView
25 from scripts import console
26 from scripts.mainmenucontroller import MainMenuController
27 from scripts.common.listeners.event_listener import EventListener
28 from scripts.common.listeners.key_listener import KeyListener
29 from scripts.common.listeners.mouse_listener import MouseListener
30 from scripts.common.listeners.command_listener import CommandListener
31 from scripts.common.listeners.console_executor import ConsoleExecuter
32 from scripts.common.listeners.widget_listener import WidgetListener
33
35 """
36 This is the implementation of the fife.IKeyFilter class.
37
38 Prevents any filtered keys from being consumed by guichan.
39 """
43
45 """Checks if an key is filtered"""
46 return event.getKey().getValue() in self._keys
47
48 -class ApplicationListener(KeyListener,
49 MouseListener,
50 ConsoleExecuter,
51 CommandListener,
52 WidgetListener):
53 """Basic listener for PARPG"""
54
55 - def __init__(self, event_listener, engine, view, model):
78
80 """Forces a quit game on next cycle.
81 @return: None"""
82 self.quit = True
83
85 """
86 Called on every console comand, delegates calls to the a console
87 object, implementing the callbacks
88 @type command: string
89 @param command: the command to run
90 @return: result
91 """
92 return self.console.handleConsoleCommand(command)
93
95 """Enables the game to be closed via the 'X' button on the window frame
96 @type command: fife.Command
97 @param command: The command to read.
98 @return: None"""
99 if(command.getCommandType() == fife.CMD_QUIT_GAME):
100 self.quit = True
101 command.consume()
102
104 """Main Application class
105 We use an MVC model model
106 self.gamesceneview is our view,self.model is our model
107 self.controller is the controller"""
108
110 """Initialise the instance.
111 @return: None"""
112 super(PARPGApplication, self).__init__(setting)
113 pychan.init(self.engine, debug = True)
114
115 self.model = GameModel(self.engine, setting)
116 self.model.maps_file = self._setting.get("PARPG", "MapsFile")
117 self.model.readMapFiles()
118 self.model.object_db_file = self._setting.get("PARPG",
119 "ObjectDatabaseFile")
120 self.model.readObjectDB()
121 self.model.agents_directory = self._setting.get("PARPG",
122 "AgentsDirectory")
123 self.model.getAgentImportFiles()
124 self.model.all_agents_file = self._setting.get("PARPG", "AllAgentsFile")
125 self.model.readAllAgents()
126 self.model.dialogues_directory = self._setting.get("PARPG",
127 "DialoguesDirectory")
128 self.model.getDialogues()
129 self.view = MainMenuView(self.engine, self.model)
130 self.event_listener = EventListener(self.engine)
131 self.controllers = []
132 controller = MainMenuController(self.engine,
133 self.view,
134 self.model,
135 self)
136
137 self.controllers.append(controller)
138 self.listener = ApplicationListener(self.event_listener,
139 self.engine,
140 self.view,
141 self.model)
142
143
144
146 """@return: None"""
147
148
149 pass
150
152 """Adds a controller to the list to be the current active one."""
153 self.controllers[-1].pause(True)
154 self.controllers.append(controller)
155
157 """Removes and returns the current active controller, unless its the last one"""
158 ret_controller = None
159 if self.controllers.count > 1:
160 ret_controller = self.controllers.pop()
161 self.controllers[-1].pause(False)
162 ret_controller.onStop()
163 return ret_controller
164
166 """Clears the controller list and adds a controller to be the current active one"""
167 for old_controller in self.controllers:
168 old_controller.onStop()
169 self.controllers = []
170 self.controllers.append(controller)
171
173 """Main game loop.
174 There are in fact 2 main loops, this one and the one in GameSceneView.
175 @return: None"""
176 if self.listener.quit:
177 self.breakRequested = True
178 else:
179 for controller in self.controllers:
180 controller.pump()
181