1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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
43
44
49
50 -class Scene(MessageHandler, BackgroundLayer):
51 - def __init__(self, engine, owner, **args):
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
66 self.players.append(player)
67
69 self.players.remove(player)
70
73
76
77 - def run(self, ticks):
78 self.time += ticks / 50.0
79
81 actor = globals()[name](self, owner)
82 self.objects[id] = actor
83 self.actors.append(actor)
84
86 actor = self.objects[id]
87 self.actors.remove(actor)
88 del self.objects[id]
89
91 - def __init__(self, engine, owner, session, **args):
97
100
103
106
109
116
123
125
126 for player in self.session.world.players:
127 if player.owner == owner:
128 player.controls.flags = flags
129 break
130
132 actor = self.objects[id]
133 actor.setState(*data)
134
135 - def run(self, ticks):
138
140 for actor in self.actors:
141 actor.render()
142
143 - def render(self, visibility, topMost):
144 font = self.engine.data.font
145
146
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
166 - def __init__(self, engine, owner, server, **args):
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
174 self.changedControlData[sender] = flags
175
177
178 for player in self.server.world.players:
179 if player.owner == owner:
180 player.controls.flags = flags
181 break
182
186
192
197
206
207 - def run(self, ticks):
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