Trees | Indices | Help |
|
---|
|
1 ##################################################################### 2 # -*- coding: iso-8859-1 -*- # 3 # # 4 # Frets on Fire # 5 # Copyright (C) 2006 Sami Kyöstilä # 6 # # 7 # This program is free software; you can redistribute it and/or # 8 # modify it under the terms of the GNU General Public License # 9 # as published by the Free Software Foundation; either version 2 # 10 # of the License, or (at your option) any later version. # 11 # # 12 # This program is distributed in the hope that it will be useful, # 13 # but WITHOUT ANY WARRANTY; without even the implied warranty of # 14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # 15 # GNU General Public License for more details. # 16 # # 17 # You should have received a copy of the GNU General Public License # 18 # along with this program; if not, write to the Free Software # 19 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # 20 # MA 02110-1301, USA. # 21 ##################################################################### 22 23 from Player import Player 24 from Session import MessageHandler, Message 25 import Network 26 import SceneFactory 27 28 STARTUP_SCENE = "SongChoosingScene" 29 30 # Messages from client to server 36 37 # Messages from server to client 45 46 # Internal messages 4951 # TODO: abstract away the network details somehow9853 self.objects = Network.ObjectCollection() 54 self.engine = engine 55 self.broker = broker 56 self.players = [] 57 self.scenes = []58 6365 player = self.objects[id] 66 self.players.remove(player) 67 del self.objects[id] 68 self.finishGameIfNeeded()69 7375 try: 76 scene = self.objects[id] 77 self.broker.removeMessageHandler(scene) 78 self.engine.removeTask(scene) 79 if scene in self.scenes: 80 self.scenes.remove(scene) 81 del self.objects[id] 82 except KeyError: 83 pass 84 self.finishGameIfNeeded()85 9092 try: 93 scene = self.objects[sceneId] 94 player = self.objects[playerId] 95 scene.removePlayer(player) 96 except KeyError: 97 pass103200105 id = self.objects.generateId() 106 self.server.broadcastMessage(PlayerJoined(id = id, owner = sender, name = name)) 107 return id108110 id = self.objects.generateId() 111 self.server.broadcastMessage(SceneCreated(id = id, owner = sender, name = name, args = args)) 112 return id113 120 124 128130 id = self.objects.generateId() 131 self.server.broadcastMessage(SceneCreated(id = id, owner = None, name = name, args = args)) 132 return id133135 sceneId = self.objects.id(scene) 136 playerId = self.objects.id(player) 137 self.server.broadcastMessage(SceneEntered(sceneId = sceneId, playerId = playerId))138140 sceneId = self.objects.id(scene) 141 playerId = self.objects.id(player) 142 self.server.broadcastMessage(SceneLeft(sceneId = sceneId, playerId = playerId))143145 # TODO: make this more automatic 146 for player in self.players: 147 id = self.objects.id(player) 148 session.sendMessage(PlayerJoined(id = id, owner = player.owner, name = player.name)) 149 for scene in self.scenes: 150 id = self.objects.id(scene) 151 session.sendMessage(SceneCreated(id = id, owner = scene.owner, name = scene.__name__, args = scene.args))152154 # TODO: make this more automatic 155 for player in self.players: 156 if player.owner == session.id: 157 self.deletePlayer(player) 158 for scene in self.scenes: 159 if scene.owner == session.id: 160 self.deleteScene(scene)161163 self.server.broadcastMessage(GameStarted()) 164 id = self.createScene(STARTUP_SCENE, **args) 165 if id: 166 for player in self.players: 167 playerId = self.objects.id(player) 168 self.server.broadcastMessage(EnterScene(sceneId = id, playerId = playerId))169171 scene = self.objects[sceneId] 172 player = self.objects[playerId] 173 self.enterScene(scene, player)174176 scene = self.objects[sceneId] 177 player = self.objects[playerId] 178 self.leaveScene(scene, player)179181 scene = SceneFactory.create(engine = self.engine, name = name, owner = owner, server = self.server, **args) 182 self.broker.addMessageHandler(scene) 183 self.engine.addTask(scene) 184 self.scenes.append(scene) 185 self.objects[id] = scene186188 try: 189 scene = self.objects[id] 190 for player in scene.players: 191 self.leaveScene(scene, player) 192 except KeyError: 193 pass 194 World.handleSceneDeleted(self, sender, id)195197 if not self.players and not self.scenes: 198 self.server.broadcastMessage(GameFinished()) 199 World.finishGameIfNeeded(self)205253207 for scene in self.scenes: 208 self.deleteScene(scene) 209 for player in self.players: 210 self.deletePlayer(player)211 214 218 221223 sceneId = self.objects.id(scene) 224 playerId = self.objects.id(player) 225 self.session.sendMessage(EnterScene(sceneId = sceneId, playerId = playerId))226228 sceneId = self.objects.id(scene) 229 playerId = objects.id(player) 230 self.session.sendMessage(LeaveScene(sceneId = sceneId, playerId = playerId))231 235 238 243245 scene = SceneFactory.create(engine = self.engine, name = name, owner = owner, session = self.session, **args) 246 self.broker.addMessageHandler(scene) 247 self.scenes.append(scene) 248 self.objects[id] = scene 249 if owner == self.session.id: 250 for player in self.players: 251 if player.owner == self.session.id: 252 self.enterScene(player, scene)
Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0beta1 on Sat Oct 20 15:25:11 2007 | http://epydoc.sourceforge.net |