示例#1
0
class Editor(State):
    def __init__(self, resourcemgr, level=None):
        super(Editor, self).__init__(resourcemgr)
        self.tilemgr = TileManager(resourcemgr, level)
        self.lw = self.tilemgr.lw
        self.lh = self.tilemgr.lh
        self.camera = Camera(0, 0, self.lw, self.lh, resourcemgr)
        self.current_tile = 0
        self.font = SysFont(FONTS, int(48 * self.resourcemgr.scale), True)

    def set_tile(self):
        x, y = mouse.get_pos()
        x += self.camera.rect.x
        y += self.camera.rect.y

        for t in self.tilemgr.tiles:
            if t.rect.collidepoint(x, y):
                t.set_tile(self.current_tile)
                break

    def get_tile(self):
        x, y = mouse.get_pos()
        x += self.camera.rect.x
        y += self.camera.rect.y

        for t in self.tilemgr.tiles:
            if t.rect.collidepoint(x, y):
                self.current_tile = t.kind
                break

    def render_kind(self):
        text = "Current Tile: %s" % self.tilemgr.tile_labels[self.current_tile]
        msg = self.font.render(text, 1, WHITE)
        msg_rect = msg.get_rect(
            centerx=self.resourcemgr.screen.get_rect().w / 2, centery=self.resourcemgr.screen.get_rect().h / 6
        )
        self.resourcemgr.screen.blit(msg, msg_rect)

    def input(self, event, next_state):
        next_state = super(Editor, self).input(event, next_state)

        self.camera.input(event)

        if event.type == KEYDOWN:
            if event.key == K_ESCAPE:
                self.tilemgr.save_tiles("map1.map")
                next_state = set_next_state(next_state, STATES.MENU)
        elif event.type == MOUSEBUTTONDOWN:
            if event.button == MOUSE.LEFT:
                self.set_tile()
            elif event.button == MOUSE.RIGHT:
                self.get_tile()
            elif event.button == MOUSE.WHEELUP:
                self.current_tile -= 1
                if self.current_tile < 0:
                    self.current_tile = self.tilemgr.total_tile_kinds - 1
            elif event.button == MOUSE.WHEELDOWN:
                self.current_tile += 1
                if self.current_tile > self.tilemgr.total_tile_kinds - 1:
                    self.current_tile = 0
        elif event.type == MOUSEMOTION and mouse.get_pressed()[0]:
            self.set_tile()

        return next_state

    def logic(self, clock, next_state):
        self.camera.logic(clock.get_time())
        return next_state

    def render(self):
        self.resourcemgr.screen.fill(BLACK)
        self.tilemgr.render(self.camera)
        self.render_kind()