Пример #1
0
    def runDefaultAction(self, event):
        triggered = False
        char = event.character
        charPixRelative = UTIL.calcCharPix(char.getPosition(), char.getSize())
        charTileRelative = UTIL.calcTileFromPix(
            charPixRelative)  #relative tile that char appears to stand on
        layout = self.game.gameScene.layoutWrapper.layout

        if layout[charTileRelative[1]][charTileRelative[
                0]].levelEvent is not None:  #check the space you are standing on
            if layout[charTileRelative[1]][charTileRelative[
                    0]].levelEvent.trigger == PRAM.TRIG_ACTION:
                self.game.addEvent(layout[charTileRelative[1]][
                    charTileRelative[0]].levelEvent.gameEvent)
                triggered = True

        elif char.actor.direction == PRAM.UP:  #now check the tile next to you that you are facing
            targetTile = UTIL.calcTileFromPix(
                [charPixRelative[0], charPixRelative[1] - PRAM.TILESIZE])
            if layout[targetTile[1]][targetTile[0]].levelEvent is not None:
                if layout[targetTile[1]][
                        targetTile[0]].levelEvent.trigger == PRAM.TRIG_ACTION:
                    self.game.addEvent(layout[targetTile[1]][
                        targetTile[0]].levelEvent.gameEvent)
                    triggered = True

        elif char.actor.direction == PRAM.DOWN:
            targetTile = UTIL.calcTileFromPix(
                [charPixRelative[0], charPixRelative[1] + PRAM.TILESIZE])
            if layout[targetTile[1]][targetTile[0]].levelEvent is not None:
                if layout[targetTile[1]][
                        targetTile[0]].levelEvent.trigger == PRAM.TRIG_ACTION:
                    self.game.addEvent(layout[targetTile[1]][
                        targetTile[0]].levelEvent.gameEvent)
                    triggered = True

        elif char.actor.direction == PRAM.LEFT:
            targetTile = UTIL.calcTileFromPix(
                [charPixRelative[0] - PRAM.TILESIZE, charPixRelative[1]])
            if layout[targetTile[1]][targetTile[0]].levelEvent is not None:
                if layout[targetTile[1]][
                        targetTile[0]].levelEvent.trigger == PRAM.TRIG_ACTION:
                    self.game.addEvent(layout[targetTile[1]][
                        targetTile[0]].levelEvent.gameEvent)
                    triggered = True

        else:  # 'right'
            targetTile = UTIL.calcTileFromPix(
                [charPixRelative[0] + PRAM.TILESIZE, charPixRelative[1]])
            if layout[targetTile[1]][targetTile[0]].levelEvent is not None:
                if layout[targetTile[1]][
                        targetTile[0]].levelEvent.trigger == PRAM.TRIG_ACTION:
                    self.game.addEvent(layout[targetTile[1]][
                        targetTile[0]].levelEvent.gameEvent)
                    triggered = True

        if not triggered:  #no level event, so perform characters default action
            self.game.addEvent(char.defaultAction())
Пример #2
0
    def setPosition(self, position=[0, 0]):
        self.position = position
        if self.position[0] < 0:
            self.position[0] = 0
        if self.position[1] < 0:
            self.position[1] = 0
        if self.position[0] > self.maxPosition[0]:
            self.position[0] = self.maxPosition[0]
        if self.position[1] > self.maxPosition[1]:
            self.position[1] = self.maxPosition[1]

        self.tile = UTIL.calcTileFromPix(self.position)
        self.offset = (self.position[0] - (self.tile[0] * PRAM.TILESIZE),
                       self.position[1] - (self.tile[1] * PRAM.TILESIZE))
    def calcRenderChanges(self, actor, origin, target, direction):
        actorTileAbsolute = UTIL.calcTileFromPix(origin)
        actorTileSize = UTIL.calcTileSizeFromPix(actor.size)
        actorPixRelative = UTIL.calcCharPix(origin, actor.size)
        actorTileRelative = UTIL.calcTileFromPix(actorPixRelative)

        mapSizeX = len(self.layoutWrapper.layout[0])
        mapSizeY = len(self.layoutWrapper.layout)
                
        if direction == PRAM.UP:
            minXTile = actorTileAbsolute[0] - 1
            maxXTile = actorTileAbsolute[0] + actorTileSize[0] + 1
            maxYTile = actorTileAbsolute[1] + actorTileSize[1] +1
            minYTile = actorTileAbsolute[1] - (target[1] - actorTileRelative[1])             
        
        elif direction == PRAM.DOWN:
            minXTile = actorTileAbsolute[0] - 1
            maxXTile = actorTileAbsolute[0] + actorTileSize[0] + 1
            minYTile = actorTileAbsolute[1]
            maxYTile = actorTileAbsolute[1] + (target[1] - actorTileRelative[1]) + actorTileSize[1] +1
               
        elif direction == PRAM.LEFT:
            maxXTile = actorTileAbsolute[0] + actorTileSize[0] + 1
            minXTile = actorTileAbsolute[0] - (actorTileRelative[0] - target[0]) - actorTileSize[0]            
            minYTile = actorTileAbsolute[1]
            maxYTile = actorTileAbsolute[1] + actorTileSize[1] +1        
                
        else: #right
            minXTile = actorTileAbsolute[0]
            maxXTile = actorTileAbsolute[0] + (target[0]- actorTileRelative[0]) + actorTileSize[0] +1              
            minYTile = actorTileAbsolute[1]
            maxYTile = actorTileAbsolute[1] + actorTileSize[1] +1               
        
        #add a - 2 fudge factor to accomodate scrolling BR
        minXTile -= 2
        minYTile -= 2
                
        if minXTile < 0:
            minXTile = 0
        if maxXTile > mapSizeX:
            maxXTile = mapSizeX        
        if minYTile < 0:
            minYTile = 0   
        if maxYTile > mapSizeY:
            maxYTile = mapSizeY
        
        for x in range(minXTile, maxXTile):
            for y in range(minYTile, maxYTile):
                self.backgroundQueue.append((self.layoutWrapper.layout[y][x],(x,y)))

        maxXTile +=2
        maxYTile +=2
        minXTile -= 2
        minYTile -= 2
        
        if minXTile < 0:
            minXTile = 0
        if maxXTile > mapSizeX:
            maxXTile = mapSizeX        
        if minYTile < 0:
            minYTile = 0   
        if maxYTile > mapSizeY:
            maxYTile = mapSizeY
        
        for x in range(minXTile, maxXTile):
            for y in range(minYTile, maxYTile):
                self.renderQueue.append((self.layoutWrapper.layout[y][x],(x,y)))
Пример #4
0
    def runMove(self, event):
        char = event.character
        origin = char.getPosition()
        charPixRelative = UTIL.calcCharPix(char.getPosition(), char.getSize())
        charTileRelative = UTIL.calcTileFromPix(
            charPixRelative)  #relative tile that char appears to stand on
        #         layout = self.game.gameScene.layoutWrapper.layout

        if event.direction == PRAM.UP:
            char.setDirection(PRAM.UP)
            targetTile = UTIL.calcTileFromPix(
                [charPixRelative[0], charPixRelative[1] - char.moveSpeed])
            if targetTile == charTileRelative:
                char.adjustPosition(0, -char.moveSpeed)
            else:
                if self.borders[targetTile[1]][
                        targetTile[0]] & 0b0001:  #barrier in the way
                    char.adjustPosition(
                        0, (targetTile[1] + 1) * PRAM.TILESIZE -
                        charPixRelative[1])  #move next to barrier
                else:
                    char.adjustPosition(0, -char.moveSpeed)

        elif event.direction == PRAM.DOWN:
            char.setDirection(PRAM.DOWN)
            targetTile = UTIL.calcTileFromPix(
                [charPixRelative[0], charPixRelative[1] + char.moveSpeed])
            if targetTile == charTileRelative:
                char.adjustPosition(0, char.moveSpeed)
            else:
                if self.borders[targetTile[1]][
                        targetTile[0]] & 0b1000:  #barrier in the way
                    char.adjustPosition(0, targetTile[1] * PRAM.TILESIZE -
                                        charPixRelative[1] -
                                        1)  #move next to barrier
                else:
                    char.adjustPosition(0, char.moveSpeed)

        elif event.direction == PRAM.LEFT:
            char.setDirection(PRAM.LEFT)
            targetTile = UTIL.calcTileFromPix(
                [charPixRelative[0] - char.moveSpeed, charPixRelative[1]])
            if targetTile == charTileRelative:
                char.adjustPosition(-char.moveSpeed, 0)
            else:
                if self.borders[targetTile[1]][
                        targetTile[0]] & 0b0010:  #barrier in the way
                    char.adjustPosition((targetTile[0] + 1) * PRAM.TILESIZE -
                                        charPixRelative[0],
                                        0)  #move next to barrier
                else:
                    char.adjustPosition(-char.moveSpeed, 0)

        else:  # 'right'
            char.setDirection(PRAM.RIGHT)
            targetTile = UTIL.calcTileFromPix(
                [charPixRelative[0] + char.moveSpeed, charPixRelative[1]])
            if targetTile == charTileRelative:
                char.adjustPosition(char.moveSpeed, 0)
            else:
                if self.borders[targetTile[1]][
                        targetTile[0]] & 0b0100:  #barrier in the way
                    char.adjustPosition(targetTile[0] * PRAM.TILESIZE -
                                        charPixRelative[0] - 1,
                                        0)  #move next to barrier
                else:
                    char.adjustPosition(char.moveSpeed, 0)

#         self.game.gameScene.calcRenderChanges(char.actor, origin, targetTile, event.direction)
        char.actor.changed = True  #flag to re-render the character
        if char.actor.isFocus:  #check if the camera needs to be adjusted
            self.game.gameCamera.panToChar(char.getPosition())

        if not self.game.gameCamera.moveFlag:
            self.game.renderer.addRenderBox_movedSprite(
                char.getSize(), origin, char.getPosition(), event.direction)

        if targetTile != charTileRelative:  #Check if the targetTile tile has an event that triggers on touch
            targetTileTile = self.eventTiles.get(
                (targetTile[1], targetTile[0]))
            if targetTileTile is not None:
                if targetTileTile.levelEvent.trigger == PRAM.TRIG_TOUCH:
                    self.game.addEvent(targetTileTile.levelEvent.gameEvent)

        if len(char.moveListeners) > 0:
            self.game.addEvent(EventNotifyMove(event.character))