-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscene.py
65 lines (50 loc) · 1.9 KB
/
scene.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/usr/bin/env python2
from __future__ import division
from entityfactory import *
from collision import *
class Scene(object):
def __init__(self, evtMngr):
self.time = timer.SDL_GetTicks()
self.sceneObjects = []
self.hudObjects = []
self.updateEntities = []
self.sim_dt = 1.0 / 100.0 #100 per second
self.timeAcc = 0
entFact = EntityFactory(evtMngr, self.sceneObjects, self.updateEntities)
self.player = entFact.CreatePlayer(0, -10, 45)
entFact.CreateLevelBlock(-400, -210, 800, 20)
entFact.CreateLevelBlock(-400, 280, 800, 20)
entFact.CreateLevelBlock(-300, 180, 600, 20)
entFact.CreateLevelBlock(-400, -20, 600, 20, -45)
entFact.CreateLevelBlock(0, -420, 600, 20, 45)
entFact.CreateLevelBlock(-380, -300, 600, 20, 90)
entFact.CreateLevelBlock(400, -300, 600, 20, 90)
entFact.drawTarget = self.hudObjects
entFact.CreateFPSMeter()
entFact.CreateParameterMonitor(
lambda f: str(self.player.chassis.wheels[0].contacts.isColliding),
y=500
)
def update(self):
a = self.allowUpdate()
while a.next():
self.updateObjects(self.updateEntities, self.sim_dt)
for w in self.player.chassis.wheels:
CollisionResolver.resolveCollisions(w, self.updateEntities)
def updateObjects(self, objects, dt=None):
if not dt: dt = self.getDt()
for o in objects:
o.update(dt)
def allowUpdate(self):
dt = self.getDt()
if(dt > self.sim_dt*5): dt = self.sim_dt*5
self.timeAcc += dt
while(self.timeAcc >= self.sim_dt):
self.timeAcc -= self.sim_dt
yield True
yield False
def getDt(self):
newTime = timer.SDL_GetTicks()
dt = newTime - self.time
self.time = newTime
return dt / 1000