コード例 #1
0
class Tilemap_Tester_With_Box(Location_Layer):

    is_event_handler = True
    BASE_CAMERA_SPEED = 600.0
    is_debag = False

    def __init__(self, force_ground, scroller):
        layer.ScrollableLayer.__init__(self)
        self.scroller = scroller
        self.force_ground = force_ground
        self.b2world = b2.b2World(gravity=(0, -GRAVITY),
                                  contactListener=b2Listener())
        self.b2level = self.b2world.CreateStaticBody()
        self._create_b2_tile_map(force_ground)
        #FROM TILEMAP TESTER
        self.camera_pos = [16*25, 16*25]
        self.keys = {key.LEFT: False,
                     key.RIGHT: False,
                     key.UP: False,
                     key.DOWN: False}
        movable_object.Movable_Object.tilemap = self.force_ground
        movable_object.Movable_Object.world = self.b2world

        self.unit = Actor(Human)
        #print self.unit.cshape
        self.unit.move_to(60, 1716)
        self.add(self.unit, z=100)
        self.unit.do(Brain())
        self.cellmap = force_ground
        #self.counter = 0
        self.path = None

        self.counter = 0
        self.fr = None

        self.schedule(self.update)

    def update(self, dt):
        floor = self.unit.get_rect().midbottom
        current_cell = self.force_ground.get_at_pixel(*floor)
        down = self.force_ground.get_neighbor(current_cell, (0, -1))
        i, j = down.i, down.j
        self.force_ground.set_cell_opacity(i, j, 100)

        self.b2world.Step(dt, 1, 1)

        self.camera_pos[0] += (self.keys[key.RIGHT] - self.keys[key.LEFT])*self.BASE_CAMERA_SPEED*dt
        self.camera_pos[1] += (self.keys[key.UP] - self.keys[key.DOWN])*self.BASE_CAMERA_SPEED*dt
        self.scroller.set_focus(*self.camera_pos)

    def on_key_press(self, symbol, modifers):
        self.keys[symbol] = True

    def on_key_release(self, symbol, modifers):
        self.keys[symbol] = False

    def on_mouse_press(self, x, y, button, modifiers):
        if not self.is_debag:
            if self.path:
                self.path.kill()
            x, y = self.scroller.pixel_from_screen(x, y)
            to = self.cellmap.get_at_pixel(x, y)
            #fr = self.cellmap.get_neighbor(self.cellmap.get_at_pixel(*self.unit.get_rect().midbottom), self.cellmap.UP)
            fr = self.cellmap.get_at_pixel(*self.unit.get_rect().midbottom)
            #print self.cellmap.get_neighbor(fr, self.cellmap.DOWN).tile.properties
            oth_path = Connections_Net([(fr, to)])
            #self.add(oth_path, z=10)
            t = clock()
            #path = manhattan_dijkstra(self.fr, self.to)
            #path = bfs(self.fr, self.to)
            path = manhattan_Grankovski_a_star(fr, to)
            print clock() - t
            self.path = create_drawed_path(path)
            self.unit.push_task(Follow_To(self.unit, path))
            self.cellmap.add(self.path, z=10)
        else:
            if self.counter == 0:
                if self.path:
                    self.path.kill()
                x, y = self.scroller.pixel_from_screen(x, y)
                self.fr = self.cellmap.get_at_pixel(x, y)
                self.counter = 1
            else:
                x, y = self.scroller.pixel_from_screen(x, y)
                to = self.cellmap.get_at_pixel(x, y)
                path = manhattan_Grankovski_a_star(self.fr, to)
                self.path = create_drawed_path(path)
                self.cellmap.add(self.path, z=10)
                self.counter = 0

    def on_mouse_drag(self, x, y, dx, dy, buttons, modifers):
        pass

    def on_mouse_motion(self, x, y, dx, dy):
        pass

    def on_mouse_release(self, x, y, buttons, modifers):
        pass