| 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 View import BackgroundLayer
25 from Session import MessageHandler, Message
26 from Input import KeyListener
27 from Camera import Camera
28 import Network
29 import Player
30 import Config
31
32 from OpenGL.GL import *
33 from OpenGL.GLU import *
34 import math
35 import colorsys
36 import pygame
37
38 Config.define("network", "updateinterval", int, 72)
39
40 # Messages from client to server
43
44 # Messages from server to client
49
52 self.objects = Network.ObjectCollection()
53 self.args = args
54 self.owner = owner
55 self.engine = engine
56 self.actors = []
57 self.camera = Camera()
58 self.world = None
59 self.space = None
60 self.time = 0.0
61 self.actors = []
62 self.players = []
63 self.createCommon(**args)
64
67
70
73
76
78 self.time += ticks / 50.0
79
84
89
92 Scene.__init__(self, engine, owner, **args)
93 self.session = session
94 self.player = self.session.world.getLocalPlayer()
95 self.controls = Player.Controls()
96 self.createClient(**args)
97
100
103
105 self.engine.input.addKeyListener(self)
106
109
111 c = self.controls.keyPressed(key)
112 if c:
113 self.session.sendMessage(ControlEvent(flags = self.controls.flags))
114 return True
115 return False
116
118 c = self.controls.keyReleased(key)
119 if c:
120 self.session.sendMessage(ControlEvent(flags = self.controls.flags))
121 return True
122 return False
123
125 # TODO: player mapping
126 for player in self.session.world.players:
127 if player.owner == owner:
128 player.controls.flags = flags
129 break
130
134
138
142
144 font = self.engine.data.font
145
146 # render the scene
147 try:
148 glMatrixMode(GL_PROJECTION)
149 glPushMatrix()
150 glLoadIdentity()
151 gluPerspective(60, self.engine.view.aspectRatio, 0.1, 1000)
152 glMatrixMode(GL_MODELVIEW)
153 glLoadIdentity()
154
155 glPushMatrix()
156 self.camera.apply()
157
158 self.render3D()
159 finally:
160 glPopMatrix()
161 glMatrixMode(GL_PROJECTION)
162 glPopMatrix()
163 glMatrixMode(GL_MODELVIEW)
164
167 Scene.__init__(self, engine, owner, **args)
168 self.server = server
169 self.updateInterval = self.engine.config.get("network", "updateinterval")
170 self.updateCounter = 0
171 self.changedControlData = {}
172
175
177 # TODO: player mapping
178 for player in self.server.world.players:
179 if player.owner == owner:
180 player.controls.flags = flags
181 break
182
184 id = self.objects.generateId()
185 self.server.broadcastMessage(ActorCreated(owner = sender, name = name, id = id))
186
188 for actor in self.actors:
189 if actor.owner == session.id:
190 id = self.objects.id(actor)
191 self.server.broadcastMessage(ActorDeleted(id = id))
192
194 for actor in self.actors:
195 id = self.objects.id(actor)
196 session.sendMessage(ActorCreated(owner = actor.owner, name = actor.__name__, id = id))
197
199 for actor in self.actors:
200 id = self.objects.id(actor)
201 self.server.broadcastMessage(ActorData(id = id, data = actor.getState()), meToo = False)
202
203 for sender, flags in self.changedControlData.items():
204 self.server.broadcastMessage(ControlData(owner = sender, flags = flags))
205 self.changedControlData = {}
206
208 self.runCommon(ticks, self.server.world)
209 Scene.run(self, ticks)
210
211 self.updateCounter += ticks
212 if self.updateCounter > self.updateInterval:
213 self.updateCounter %= self.updateInterval
214 self.broadcastState()
215
| Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0beta1 on Sat Oct 20 15:25:11 2007 | http://epydoc.sourceforge.net |