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())
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)))
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))