def __init__(self, level='level1'): self.level = level self.console = TextConsole() self.display = Display() self.scene = getScene(self.console) self.scene.player1 = Player() self.scene.player1.character.setColor((100, 255, 0)) self.camera = Camera(self.display, self.scene, self.console) self.scene.add(self.camera, 0) # Default controls self.controlBinds['a'] = self.scene.player1.left self.controlBinds['d'] = self.scene.player1.right self.controlBinds['w'] = self.scene.player1.up self.controlBinds['s'] = self.scene.player1.down self.controlBinds['up'] = self.scene.player1.fireUp self.controlBinds['down'] = self.scene.player1.fireDown self.controlBinds['left'] = self.scene.player1.fireLeft self.controlBinds['right'] = self.scene.player1.fireRight #self.controlBinds['enter'] = #self.controlBinds['pgdn'] = self.camera.scrollDown #self.controlBinds['pgup'] = self.camera.scrollUp self.camera.setPos(0, 0) #self.camera.vel_x = 100.0 self.camera.resistance_x = 400.0 self.camera.resistance_y = 400.0
class Game(object): controlBinds = { 'left': keyUnbound, 'right': keyUnbound, 'up': keyUnbound, 'down': keyUnbound, 'enter': keyUnbound, 'pgdn': keyUnbound, 'pgup': keyUnbound, 'home': keyUnbound, 'end': keyUnbound, 'w': keyUnbound, 'a': keyUnbound, 's': keyUnbound, 'd': keyUnbound } def __init__(self, level='level1'): self.level = level self.console = TextConsole() self.display = Display() self.scene = getScene(self.console) self.scene.player1 = Player() self.scene.player1.character.setColor((100, 255, 0)) self.camera = Camera(self.display, self.scene, self.console) self.scene.add(self.camera, 0) # Default controls self.controlBinds['a'] = self.scene.player1.left self.controlBinds['d'] = self.scene.player1.right self.controlBinds['w'] = self.scene.player1.up self.controlBinds['s'] = self.scene.player1.down self.controlBinds['up'] = self.scene.player1.fireUp self.controlBinds['down'] = self.scene.player1.fireDown self.controlBinds['left'] = self.scene.player1.fireLeft self.controlBinds['right'] = self.scene.player1.fireRight #self.controlBinds['enter'] = #self.controlBinds['pgdn'] = self.camera.scrollDown #self.controlBinds['pgup'] = self.camera.scrollUp self.camera.setPos(0, 0) #self.camera.vel_x = 100.0 self.camera.resistance_x = 400.0 self.camera.resistance_y = 400.0 #self.camera.setOwner(player1) def loadLevel(self, level): self.scene.loadLevel(self.level) self.console.setChars("\x7f", 28, 10) def update(self, kdown, kup, other): for key in self.controlBinds: if key in kdown: self.controlBinds[key](key, True) if key in kup: self.controlBinds[key](key, False) def collisionEntityCheck(self, ent, layer): global frameDTfract ev = Vec2(ent.pos_x, ent.pos_y) collisionList = [] for cent in layer.entities: if cent == ent: continue # Straight forward check, are we too close? cev = Vec2(cent.pos_x, cent.pos_y) distance = abs((ev - cev).mag) if distance < 1: collisionList.append((cent, (0, 0))) elif distance > MAXIMUM_COLLISION_RANGE: continue else: # We aren't too close /now/, but did we collide between frames? old_ev = Vec2(ent.oldpos_x, ent.oldpos_y) ev_vel = Vec2(ent.vel_x, ent.vel_y) old_cev = Vec2(cent.oldpos_x, cent.oldpos_y) cev_vel = Vec2(cent.vel_x, cent.vel_y) cevent = collisionTimeCheck(cent, old_ev, old_cev, ev_vel, cev_vel, 0.001, frameDTfract, 0.002) if cevent: collisionList.append(cevent) return collisionList def collisionLayerCheck(self, layer): for ent in layer.entities: if ent.health <= 0: continue # don't collision-check the dead ex, ey = ent.getPos() collisionList = [] # Check for collisions with the map if self.console.buffer[int(ey)][int(ex)] != ' ': collisionList.append((None, (int(ex), int(ey)))) # Check for collisions with other ents for clayer in self.scene.layers[self.scene.layers.index(layer):]: collisionList += self.collisionEntityCheck(ent, clayer) # Tell the ent about them if len(collisionList): ent.collide(collisionList) # Also tell the ents they collide with for collision in collisionList: if collision[0]: collision[0].collide([(ent, collision[1])]) def run(self, frameDT): # Run a frame global frameDTfract frameDTfract = frameDT / 1000 # Check for 'dead' entities and let everyone think for layer in self.scene.layers: deadEnts = [] for ent in layer.entities: if ent.health == -1: deadEnts.append(ent) else: ent.think(frameDT) ent.move(frameDT) for ent in deadEnts: zombie = layer.entities.remove(ent) del zombie # Check for collisions for layer in self.scene.layers: self.collisionLayerCheck(layer)
class Game(object): controlBinds = { 'left':keyUnbound, 'right':keyUnbound, 'up':keyUnbound, 'down':keyUnbound, 'enter':keyUnbound, 'pgdn':keyUnbound, 'pgup':keyUnbound, 'home':keyUnbound, 'end':keyUnbound, 'w':keyUnbound, 'a':keyUnbound, 's':keyUnbound, 'd':keyUnbound } def __init__(self, level='level1'): self.level = level self.console = TextConsole() self.display = Display() self.scene = getScene(self.console) self.scene.player1 = Player() self.scene.player1.character.setColor((100, 255, 0)) self.camera = Camera(self.display, self.scene, self.console) self.scene.add(self.camera, 0) # Default controls self.controlBinds['a'] = self.scene.player1.left self.controlBinds['d'] = self.scene.player1.right self.controlBinds['w'] = self.scene.player1.up self.controlBinds['s'] = self.scene.player1.down self.controlBinds['up'] = self.scene.player1.fireUp self.controlBinds['down'] = self.scene.player1.fireDown self.controlBinds['left'] = self.scene.player1.fireLeft self.controlBinds['right'] = self.scene.player1.fireRight #self.controlBinds['enter'] = #self.controlBinds['pgdn'] = self.camera.scrollDown #self.controlBinds['pgup'] = self.camera.scrollUp self.camera.setPos(0, 0) #self.camera.vel_x = 100.0 self.camera.resistance_x = 400.0 self.camera.resistance_y = 400.0 #self.camera.setOwner(player1) def loadLevel(self, level): self.scene.loadLevel(self.level) self.console.setChars("\x7f", 28, 10) def update(self, kdown, kup, other): for key in self.controlBinds: if key in kdown: self.controlBinds[key](key, True) if key in kup: self.controlBinds[key](key, False) def collisionEntityCheck(self, ent, layer): global frameDTfract ev = Vec2(ent.pos_x, ent.pos_y) collisionList = [] for cent in layer.entities: if cent == ent: continue # Straight forward check, are we too close? cev = Vec2(cent.pos_x, cent.pos_y) distance = abs((ev - cev).mag) if distance < 1: collisionList.append((cent, (0,0))) elif distance > MAXIMUM_COLLISION_RANGE: continue else: # We aren't too close /now/, but did we collide between frames? old_ev = Vec2(ent.oldpos_x, ent.oldpos_y) ev_vel = Vec2(ent.vel_x, ent.vel_y) old_cev = Vec2(cent.oldpos_x, cent.oldpos_y) cev_vel = Vec2(cent.vel_x, cent.vel_y) cevent = collisionTimeCheck(cent, old_ev, old_cev, ev_vel, cev_vel, 0.001, frameDTfract, 0.002) if cevent: collisionList.append(cevent) return collisionList def collisionLayerCheck(self, layer): for ent in layer.entities: if ent.health <= 0: continue # don't collision-check the dead ex, ey = ent.getPos() collisionList = [] # Check for collisions with the map if self.console.buffer[int(ey)][int(ex)] != ' ': collisionList.append((None, (int(ex), int(ey)))) # Check for collisions with other ents for clayer in self.scene.layers[self.scene.layers.index(layer):]: collisionList += self.collisionEntityCheck(ent, clayer) # Tell the ent about them if len(collisionList): ent.collide(collisionList) # Also tell the ents they collide with for collision in collisionList: if collision[0]: collision[0].collide([(ent, collision[1])]) def run(self, frameDT): # Run a frame global frameDTfract frameDTfract = frameDT/1000 # Check for 'dead' entities and let everyone think for layer in self.scene.layers: deadEnts = [] for ent in layer.entities: if ent.health == -1: deadEnts.append(ent) else: ent.think(frameDT) ent.move(frameDT) for ent in deadEnts: zombie = layer.entities.remove(ent) del zombie # Check for collisions for layer in self.scene.layers: self.collisionLayerCheck(layer)