def __init__(self, base, mapNo): self.isListening = False # Holds rigid bodies, joints, controls global params self.world = OdeWorld() self.world.setGravity(0, 0, -9.8) st = SurfaceType() st.load(self.world) del st self.contactgroup = OdeJointGroup() self.space = OdeHashSpace() self.space.setAutoCollideWorld(self.world) self.space.setAutoCollideJointGroup(self.contactgroup) self.space.setCollisionEvent(EventType.ODE_COLLISION) base.accept(EventType.ODE_COLLISION, self.onCollision) self.ball = Ball(self.world, self.space, "Johanneksen pallo") self.level = Level(self, mapNo) self.player = Player("Johannes") self.camera = Camera(base, self.ball)
def post(self, level_id): user = User.getLevelBlockUser(users.get_current_user()) if user: level = self.request.get('level') name = self.request.get('name') if level_id: l = Level.getById(int(level_id)) #only modify if you are the original author if l.user.id == user.key.id: l.name = name l.user = user.key l.score = 0 l.published = False l.level = str(level) l.put() else: l = Level() l.name = name l.user = user.key l.score = 0 l.published = False l.level = str(level) l.put() self.response.out.write(level) else: template_values = { 'signinurl': users.create_login_url("/") } template = jinja_environment.get_template('signin.html') self.response.out.write(template.render(template_values))
def get(self): max = Level.getByMaxJackpot() score = Level.getByHighScore() popular = Level.getByMostPlayed() template_values = { 'max': max, 'score': score, 'popular': popular } template = jinja_environment.get_template('index.html') self.response.out.write(template.render(template_values))
def get(self): template_values = { 'levels' : Level.get_all() } template = jinja_environment.get_template('levels.html') self.response.out.write(template.render(template_values))
def get(self, level_id): template_values = { 'level': Level.getById(int(level_id)) if level_id else 0 } template = jinja_environment.get_template('editor.html') self.response.out.write(template.render(template_values))
def __init__(self, camera, luObserver, fxObserver, lvl): self.mSwitch = True self.mTimer = 0.0 self.mLevelDone = False self.mCamera = camera self.mLuObs = luObserver self.mFxObs = fxObserver self.contactListener = ContactListener() self.gravity = Gravity() self.physWorld = b2World(gravity=(0,0),doSleep=True, contactListener=self.contactListener) self.level = Level(self.physWorld, self.gravity, lvl) self.player = Player(self.level.mStartPos, self.physWorld, self.gravity) self.mEntityToFollow = self.player
def post(self, levelid=""): user = User.getLevelBlockUser(users.get_current_user()) currentlevel = Level.getById(int(levelid)) action = self.request.get('done') if user: if action == 'true': self.response.headers['Content-Type'] = 'application/json' #check to see if level belongs to user and is if published if currentlevel.user.id == user.key.id: if not currentlevel.published: currentlevel.published = True currentlevel.played += 1 currentlevel.put() else: user.score += 1 user.put() self.response.out.write('{"points": 1, "publish": true}') else: score = 0 if currentlevel.jackpot: score = math.ceil(currentlevel.score * 0.5) creator = User.get_by_id(currentlevel.user.id()) creator.score += int(score) creator.put() currentlevel.jackpot = False currentlevel.played += 1 currentlevel.put() else: score += math.ceil(currentlevel.score * 0.1) user.score += int(score) user.put() self.response.out.write('{"points": ' + str(score) + ', "publish": false}') else: if currentlevel.published: if currentlevel.jackpot: currentlevel.score += 1 currentlevel.played += 1 currentlevel.put() else: template_values = { 'signinurl' : users.create_login_url("/") } template = jinja_environment.get_template('signin.html') self.response.out.write(template.render(template_values))
def test_wawes(self): Orc._velocity = 1 path = [Vector(1, 0), Vector(2, 0)] towers = [Vector(0, 0)] waves = [WavePart([Orc] * 2, Vector(0, 0), path)] level = Level(100, towers, WavesManager(waves, preparation_duration=0, unit_interval=2), '') game = Game(levels=iter((level,))) game.current_level.tick() orcs = self._find(Orc) self.assertEqual(1, len(orcs)) game.current_level.tick() orcs = self._find(Orc) self.assertEqual(1, len(orcs)) game.current_level.tick() orcs = self._find(Orc) self.assertEqual(1, len(orcs))
def get(self): user = User.getLevelBlockUser(users.get_current_user()) #checks to see if we have a user signed in if user: template_values = { 'levels' : Level.getUserLevels(user.key), 'currentuser': user.nickname } template = jinja_environment.get_template('userlevels.html') self.response.out.write(template.render(template_values)) #if not is ask them to sign in else: template_values = { 'signinurl' : users.create_login_url("/") } template = jinja_environment.get_template('signin.html') self.response.out.write(template.render(template_values))
def get(self, levelid=""): user = User.getLevelBlockUser(users.get_current_user()) #checks to see if we have a user signed in if user: currentlevel = Level.getById(int(levelid)) creator = User.get_by_id(currentlevel.user.id()) template_values = { 'level': currentlevel, 'creator': creator } template = jinja_environment.get_template('game.html') self.response.out.write(template.render(template_values)) #if not is ask them to sign in else: template_values = { 'signinurl' : users.create_login_url("/") } template = jinja_environment.get_template('signin.html') self.response.out.write(template.render(template_values))
def get(self, level=""): if level: l = Level.getById(int(level)) l.key.delete() self.redirect("/mylevels")
def get(self, level=''): if level: self.response.headers['Content-Type'] = 'application/json' self.response.out.write(Level.getByName(level)[0].level)
class GameModel: #Represents the world data. def __init__(self, base, mapNo): self.isListening = False # Holds rigid bodies, joints, controls global params self.world = OdeWorld() self.world.setGravity(0, 0, -9.8) st = SurfaceType() st.load(self.world) del st self.contactgroup = OdeJointGroup() self.space = OdeHashSpace() self.space.setAutoCollideWorld(self.world) self.space.setAutoCollideJointGroup(self.contactgroup) self.space.setCollisionEvent(EventType.ODE_COLLISION) base.accept(EventType.ODE_COLLISION, self.onCollision) self.ball = Ball(self.world, self.space, "Johanneksen pallo") self.level = Level(self, mapNo) self.player = Player("Johannes") self.camera = Camera(base, self.ball) def turnGravityTask(self): '''''' g = self.world.getGravity() g = -g self.world.setGravity(g) self.camera.turn() def turnGravityTask2(self): '''''' g = self.world.getGravity() g2 = self.ball.perpendicularUnitVec3WithFixedX(g) g2 *= g.length() self.world.setGravity(g2) def updateObjects(self): ''' Update objects after one physics iteration @see GameLoop.simulationTask ''' self.level.updateModelNode() self.camera.updateModelNode() #Has to be last for RESTART to work inside Ball self.ball.updateModelNode() def getBall(self): return self.ball def getPlayer(self): return self.player # http://www.panda3d.org/wiki/index.php/Collision_Detection_with_ODE def onCollision(self, entry): geom1 = entry.getGeom1() geom2 = entry.getGeom2() body1 = entry.getBody1() body2 = entry.getBody2() # Is the ball touching something? if body1 == self.ball.getBody() or body2 == self.ball.getBody(): self.ball.refreshCollisionTime(entry) for coin in self.level.getCoins(): if body1 == coin.getBody() and body2 == self.ball.getBody(): coin.collect() messenger.send(EventType.UPDATE_HUD) exit = self.level.getExit() if geom1 == exit or geom2 == exit: if Coin.collectable == self.level.getGoal(): # todo: make event based messenger.send(EventType.NEXT_LEVEL) def cleanUp(self): self.level.removeLevel() self.ball.removeNode()
def levels(): path = [ Vector(320, 600), Vector(320, 420), Vector(290, 360), Vector(211, 338), Vector(170, 293), Vector(168, 244), Vector(212, 180), Vector(318, 170), Vector(385, 178), Vector(477, 162), Vector(588, 237), Vector(710, 255) ] towers = [ Vector(465, 222), Vector(178, 392), Vector(254, 295), Vector(241, 417), Vector(248, 234), Vector(323, 234), Vector(387, 138), Vector(586, 161) ] waves = [ WavePart([Orc] * 3 + [Shaman] * 2, Vector(310, 630), path), WavePart([Bandit] * 15, Vector(310, 630), path, unit_interval=15), WavePart([Orc, Orc, Shaman] * 4, Vector(310, 630), path) ] yield Level(100, towers, WavesManager(waves), 'res/maps/level1.png') path = [ Vector(700, 390), Vector(527, 392), Vector(493, 491), Vector(438, 517), Vector(377, 488), Vector(346, 393), Vector(221, 380), Vector(166, 319), Vector(202, 272), Vector(267, 266), Vector(389, 288), Vector(452, 256), Vector(426, 176), Vector(321, 147), Vector(308, -10) ] towers = [ Vector(438, 458), Vector(437, 396), Vector(299, 442), Vector(247, 330), Vector(305, 218), Vector(379, 232), Vector(390, 122) ] waves = [ WavePart([Orc] * 3 + [Shaman] * 2, Vector(710, 390), path), WavePart([Bandit] * 15, Vector(710, 390), path, unit_interval=15), WavePart([Orc, Orc, Shaman] * 4, Vector(710, 390), path) ] yield Level(200, towers, WavesManager(waves), 'res/maps/level2.png') path1 = [ Vector(309, 148), Vector(472, 155), Vector(577, 186), Vector(625, 281), Vector(592, 383), Vector(461, 490), Vector(397, 514), Vector(402, 624) ] path2 = [ Vector(309, 148), Vector(144, 281), Vector(110, 370), Vector(150, 452), Vector(244, 503), Vector(397, 514), Vector(402, 624) ] towers = [ Vector(400, 470), Vector(318, 470), Vector(243, 448), Vector(199, 406), Vector(192, 346), Vector(213, 305), Vector(92, 251), Vector(511, 382), Vector(547, 322), Vector(551, 263), Vector(495, 215), Vector(414, 206), Vector(325, 211), Vector(474, 110), Vector(586, 128) ] waves = [ WavePart([Orc] * 3 + [Shaman] * 2, Vector(300, -20), path1), WavePart([Bandit] * 15, Vector(300, -20), path2, unit_interval=15), WavePart([Orc, Orc, Shaman] * 4, Vector(300, -20), path1) ] yield Level(200, towers, WavesManager(waves), 'res/maps/level3.png')
class WorldModel(object): DEBUG = False physWorld = None vel_iters, pos_iters = 6, 2 debugRender = None; player = None body = None dynamic_enities = [] mFirstUpdate = True mEntityToFollow = None mTimer = None mDeathTimer = 1.0 mSwitch = None def __init__(self, camera, luObserver, fxObserver, lvl): self.mSwitch = True self.mTimer = 0.0 self.mLevelDone = False self.mCamera = camera self.mLuObs = luObserver self.mFxObs = fxObserver self.contactListener = ContactListener() self.gravity = Gravity() self.physWorld = b2World(gravity=(0,0),doSleep=True, contactListener=self.contactListener) self.level = Level(self.physWorld, self.gravity, lvl) self.player = Player(self.level.mStartPos, self.physWorld, self.gravity) self.mEntityToFollow = self.player def __resetWorld(self): self.mSwitch = True self.mDeathTimer = 1.0 self.mTimer = 0.0 self.dynamic_enities = [] self.mFirstUpdate = True self.gravity.reset() self.player.reset(b2Vec2(self.level.mStartPos.x + self.player.size.x/3, self.level.mStartPos.y + self.player.size.y/2)) self.mLuObs.levelChanged(self.level) def restart(self): self.mFxObs.addFx(BloodSplatter(self.physWorld, self.gravity.get(), self.player.position)) self.level.retryLevel() self.__resetWorld() def update(self, delta): self.mTimer += delta #step the physicsworld self.physWorld.Step(delta, self.vel_iters, self.pos_iters) self.physWorld.ClearForces() for body in self.physWorld.bodies: #dynamic body if body.type == b2_dynamicBody: if self.mFirstUpdate: if isinstance(body.userData, Player): self.dynamic_enities.append(body) # body.userData.update(delta) if isinstance(body.userData, Player): body.userData.update(delta) elif isinstance(body.userData, Enemy): body.userData.update(delta) elif isinstance(body.userData, PickableObject): body.userData.update(delta) elif isinstance(body.userData, Particle): body.userData.update(delta) if self.mFirstUpdate == True: self.mFirstUpdate = False #update level, if level is done, returns true if self.level.update(delta, self.player.position): self.mLevelDone = True #is player dead? if not self.player.alive: if self.mSwitch: SoundManager.getInstance().playSound(SoundID.FLESHEXPLOSION) self.mFxObs.addFx(BloodSplatter(self.physWorld, self.gravity.get(), self.player.position)) self.mSwitch = False self.player.stopMovement() self.mDeathTimer -= delta if self.mDeathTimer < 0: self.level.retryLevel() self.__resetWorld() def changeGravity(self, gravitydirection): if self.player.isOnGround() == True: self.gravity.set(gravitydirection) for body in self.dynamic_enities: if not body.userData.isInGravityZone(): body.userData.flip(gravitydirection)