def __init__(self): self._background = City() width, height, tiles, objects = mapreader(MAP_FILE) self._background.build(width, height, tiles) self._start = Vector(*objects['start']) self._player = self._background.place_pawn(self._start.x, self._start.y, PLAYER_IMAGE) goal = Vector(*objects['goal']) self._goal = self._background.place_pawn(goal.x, goal.y, FLOORTARGET_IMAGE) self._goal.opacity = FLOORTARGET_OPACITY self._ai = [] for x,y in objects['other']: pos = Vector(x,y) ai = create_normal_ai(self._background, pos, NORMAL_IMAGE, FAN_IMAGE, self._player) self._ai.append(ai) self._stats = Stats() self._movement = Vector(0,0) self._cooldown = 0 self._reset_level = False
class MainState(EngineState): def __init__(self): self._background = City() width, height, tiles, objects = mapreader(MAP_FILE) self._background.build(width, height, tiles) self._start = Vector(*objects['start']) self._player = self._background.place_pawn(self._start.x, self._start.y, PLAYER_IMAGE) goal = Vector(*objects['goal']) self._goal = self._background.place_pawn(goal.x, goal.y, FLOORTARGET_IMAGE) self._goal.opacity = FLOORTARGET_OPACITY self._ai = [] for x,y in objects['other']: pos = Vector(x,y) ai = create_normal_ai(self._background, pos, NORMAL_IMAGE, FAN_IMAGE, self._player) self._ai.append(ai) self._stats = Stats() self._movement = Vector(0,0) self._cooldown = 0 self._reset_level = False def render(self, engine): engine.window.clear() glPushMatrix() self._background.render() glPopMatrix() def update(self, engine, dt): if self._cooldown <= 0 and self._movement.length2: event = self._background.try_move(self._player, self._movement) if self._player.position == self._goal.position: print self._stats self._reset_level = True return if event.is_obstacle_hit(): return for ai in self._ai: ai.update() self._stats.increase_move() self._cooldown = MOVE_COOLDOWN elif self._cooldown <= 0 and self._reset_level: self.reset_level() self._cooldown = MOVE_COOLDOWN elif self._cooldown > 0: self._cooldown -= dt def handle_input(self, engine, keystate): self._movement = Vector(0,0) if keystate[key.UP]: self._movement.y += 1 elif keystate[key.DOWN]: self._movement.y -= 1 elif keystate[key.RIGHT]: self._movement.x += 1 elif keystate[key.LEFT]: self._movement.x -= 1 def reset_level(self): for ai in self._ai: ai.reset_level() self._background.move(self._player, self._start) self._stats.reset() self._reset_level = False