def init(self, viewport): self.viewport = viewport self.cache = { TextureType.action: [], TextureType.character: [], TextureType.phenomena: [], TextureType.speech: [] } n = 0 while n < self.size: texture = ActionTexture() renderable = Renderable(texture=texture, viewport=self.viewport, active=True, name="ActionRenderable init") self.addRenderable(renderable, TextureType.action) n += 1 n = 0 while n < self.size: texture = PhenomenaTexture() renderable = Renderable(texture=texture, viewport=self.viewport, active=True, name="PhenomenaRenderable init") self.addRenderable(renderable, TextureType.phenomena) n += 1
def __init__(self, viewport, world): super().__init__(world=world, viewport=viewport) self.textureEmiter = TextureEmiter(viewport=viewport, world=world) renderableCache.init(viewport=viewport) textureCopter = PhenomenaTexture( phenomenaType=PhenomenaType.roflcopter, name="Scene1 chopper") self.copterSpawn = Coordinates(13, -1 * textureCopter.height) renderableCopter = Renderable( texture=textureCopter, viewport=self.viewport, coordinates=self.copterSpawn, active=True, ) texturePlayer = CharacterTexture( characterAnimationType=CharacterAnimationType.standing, characterTextureType=CharacterTextureType.player, name='Scene1 Player') coordinates = Coordinates(24, 13) renderablePlayer = Renderable( texture=texturePlayer, viewport=self.viewport, coordinates=coordinates, active=True, ) textureEnemy = CharacterTexture( characterAnimationType=CharacterAnimationType.standing, characterTextureType=CharacterTextureType.player, name='Scene1 Enemy') coordinates = Coordinates(Config.columns, 13) renderableEnemy = Renderable( texture=textureEnemy, viewport=self.viewport, coordinates=coordinates, active=True, ) self.renderableCopter = renderableCopter self.renderablePlayer = renderablePlayer self.renderableEnemy = renderableEnemy self.myTimer = Timer(0.5) self.state = IntroSceneState.wait1 self.name = "Scene1 - Intro Animation" self.anyKeyFinishesScene = True self.init()
def loadMapRenderables(self, map): t = PhenomenaTexture(phenomenaType=PhenomenaType.tree1, setbg=True) r = Renderable(texture=t, viewport=self.viewport, coordinates=Coordinates(80, 8 - t.height + 1), active=True) self.addTextureToMap(r) t = PhenomenaTexture(phenomenaType=PhenomenaType.tree4, setbg=True) r = Renderable(texture=t, viewport=self.viewport, coordinates=Coordinates(40, 8 - t.height + 1), active=True) self.addTextureToMap(r)
def createEnemyCached(self): id = game.uniqueid.getUniqueId() name = "Bot " + str(id) groupId = GroupId(id=id) tenemy = Enemy(name=name) attackable = Attackable() ai = Ai(name=name) texture = CharacterTexture( name=name) renderable = Renderable( texture=texture, viewport=self.viewport, parent=None, active=True, name=name) offensiveAttack = OffensiveAttack( parentChar=tenemy, parentRenderable=renderable) physics = Physics() enemyCached = EnemyCached() enemyCached.ai = ai enemyCached.groupId = groupId enemyCached.renderable = renderable enemyCached.tenemy = tenemy enemyCached.attackable = attackable enemyCached.offensiveAttack = offensiveAttack enemyCached.physics = physics return enemyCached
def showSpeechBubble(self, displayText, time, parentRenderable): texture = SpeechTexture(displayText=displayText, time=time) coordinates = Coordinates(1, -4) renderable = Renderable(texture=texture, viewport=self.viewport, parent=parentRenderable, coordinates=coordinates, z=Config.zMax, active=True) self.addRenderable(renderable)
def loadDebugEnvironment(self): # a box t = PhenomenaTexture(phenomenaType=PhenomenaType.box, setbg=True) x = 28 y = 10 r = Renderable( texture=t, viewport=self.viewport, coordinates=Coordinates(x, y), active=True, name='Env Box', z=1, # background ) attackable = Attackable(initialHealth=100, stunCount=0, stunTimeFrame=0.0, stunTime=0, knockdownChance=0.0, knockbackChance=0.0) physics = Physics() destructable = Destructable() groupId = GroupId(id=game.uniqueid.getUniqueId()) self.addEnvRenderable(r, attackable, groupId, physics, None, destructable) # a puddle t = PhenomenaTexture(phenomenaType=PhenomenaType.puddle, setbg=True) x = 20 y = 20 r = Renderable( texture=t, viewport=self.viewport, coordinates=Coordinates(x, y), active=True, name='Env Puddle 10 10', z=1, # background ) p = PassiveAttack([10, 10]) groupId = GroupId(id=game.uniqueid.getUniqueId()) self.addEnvRenderable(r, None, groupId, None, p, None)
def addEnvRenderable( self, renderable: Renderable, attackable: Attackable, groupId: GroupId, physics, passiveAttack, destructable, ): x = renderable.getLocation().x if not self.envRenderables[x]: self.envRenderables[x] = [] self.envRenderables[x].append((renderable, attackable, groupId, physics, passiveAttack, destructable))
def __init__(self, viewport, world): super().__init__(world=world, viewport=viewport) # teh logo coordinates = Coordinates(2, 5) textureLogo = PhenomenaTexture(phenomenaType=PhenomenaType.intro) self.renderableLogo = Renderable( texture=textureLogo, viewport=self.viewport, coordinates=coordinates, active=True, ) self.anyKeyFinishesScene = True self.timer = Timer(3) self.sceneFinished = False self.name = "Scene0 - Logo"
def spawnPlayer(self, spawnCoordinates): myid = 0 # 0 should be player playerEntity = self.world.create_entity() groupId = GroupId(id=myid) player = system.gamelogic.player.Player() attackable = Attackable( initialHealth=self.playerSeed.initialHealth, stunCount=self.playerSeed.stunCount, stunTimeFrame=self.playerSeed.stunTimeFrame, stunTime=self.playerSeed.stunTime, knockdownChance=self.playerSeed.knockdownChance, knockbackChance=self.playerSeed.knockbackChance) texture = CharacterTexture( characterTextureType=CharacterTextureType.player, characterAnimationType=CharacterAnimationType.standing, name='Player') renderable = Renderable(texture=texture, viewport=self.viewport, parent=None, coordinates=spawnCoordinates, direction=Direction.right, name='Player', canMoveOutsideMap=False) esperData = EsperData(self.world, playerEntity, 'player') offensiveSkill = OffensiveSkill(esperData=esperData, viewport=self.viewport) offensiveAttack = OffensiveAttack(parentChar=player, parentRenderable=renderable) physics = Physics() defense = Defense() self.world.add_component(playerEntity, physics) self.world.add_component(playerEntity, groupId) self.world.add_component(playerEntity, offensiveSkill) self.world.add_component(playerEntity, renderable) self.world.add_component(playerEntity, player) self.world.add_component(playerEntity, attackable) self.world.add_component(playerEntity, offensiveAttack) self.world.add_component(playerEntity, defense)
def loadEnvironment(self): width = 800 # FIXME self.mapManager.getCurrentMapWidth() self.envRenderables = [None] * width if Config.devMode: self.loadDebugEnvironment() return # boxes n = random.randrange(30, 60) while n < width - 100: t = PhenomenaTexture(phenomenaType=PhenomenaType.box, setbg=True) x = n y = random.randrange(10, 20) r = Renderable( texture=t, viewport=self.viewport, coordinates=Coordinates(x, y), active=True, name='Env Box', z=1, # background ) attackable = Attackable(initialHealth=100, stunCount=0, stunTimeFrame=0.0, stunTime=0, knockdownChance=0.0, knockbackChance=0.0) physics = Physics() destructable = Destructable() groupId = GroupId(id=game.uniqueid.getUniqueId()) if not self.isEmpty(r): continue self.addEnvRenderable(r, attackable, groupId, physics, None, destructable) n += random.randrange(30, 60) # puddles n = random.randrange(30, 60) while n < width - 100: t = PhenomenaTexture(phenomenaType=PhenomenaType.puddle, setbg=True) x = n y = random.randrange(10, 20) r = Renderable( texture=t, viewport=self.viewport, coordinates=Coordinates(x, y), active=True, name='Env Puddle', z=1, # background ) p = PassiveAttack([10, 10]) groupId = GroupId(id=game.uniqueid.getUniqueId()) if not self.isEmpty(r): continue self.addEnvRenderable(r, None, groupId, None, p, None) n += random.randrange(30, 60)
def test_renderableCollisionDetection(self): game.isunittest.setIsUnitTest() fileTextureLoader.loadFromFiles() self.viewport = MockWin(20, 10) self.world = esper.World() self.textureEmiter = None particleEmiter = ParticleEmiter(viewport=self.viewport) renderableProcessor = RenderableProcessor( textureEmiter=self.textureEmiter, particleEmiter=particleEmiter) movementProcessor = MovementProcessor(mapManager=None) inputProcessor = InputProcessor() renderableMinimalProcessor = RenderableMinimalProcessor( viewport=self.viewport, textureEmiter=self.textureEmiter) self.world.add_processor(inputProcessor) self.world.add_processor(movementProcessor) self.world.add_processor(renderableMinimalProcessor) self.world.add_processor(renderableProcessor) # Player playerEntity = self.world.create_entity() texture = CharacterTexture( characterTextureType=CharacterTextureType.player, characterAnimationType=CharacterAnimationType.standing, name='Player') coordinates = Coordinates(10, 10) playerRenderable = Renderable(texture=texture, viewport=self.viewport, parent=None, coordinates=coordinates, direction=Direction.right, name='Player') physics = Physics() self.world.add_component(playerEntity, playerRenderable) self.world.add_component(playerEntity, physics) # /Player # Enemy enemyEntity = self.world.create_entity() texture = CharacterTexture( characterTextureType=CharacterTextureType.player, characterAnimationType=CharacterAnimationType.standing, name='Enemy') coordinates = Coordinates(10, 10) enemyRenderable = Renderable(texture=texture, viewport=self.viewport, parent=None, coordinates=coordinates, direction=Direction.right, name='Enemy') physics = Physics() self.world.add_component(enemyEntity, enemyRenderable) self.world.add_component(playerEntity, physics) # /Enemy # process it targetFrameTime = 1.0 / Config.fps # sprites overlap, but not with chars (foot is in shoulder) # o # /|\ # o/ \ # /|\ # / \ enemyRenderable.coordinates.y -= 2 enemyRenderable.coordinates.x += 2 self.world.process(targetFrameTime) self.viewport.internalPrint() overlap = enemyRenderable.overlapsWith(playerRenderable) self.assertTrue(overlap) # inprecise check, true overlap = playerRenderable.overlapsWithRenderablePixel(enemyRenderable) self.assertFalse(overlap) # precise check, false overlap = enemyRenderable.overlapsWithRenderablePixel(playerRenderable) self.assertFalse(overlap) # precise check, false empty = EntityFinder.isDestinationEmpty(self.world, enemyRenderable) self.assertTrue(empty) empty = EntityFinder.isDestinationEmpty(self.world, playerRenderable) self.assertTrue(empty) distance = enemyRenderable.distanceToBorder(playerRenderable) self.assertTrue(distance['x'] == -1) self.assertTrue(distance['y'] == -1)
def test_renderableBasic(self): game.isunittest.setIsUnitTest() fileTextureLoader.loadFromFiles() self.viewport = MockWin(20, 10) self.world = esper.World() self.textureEmiter = None particleEmiter = ParticleEmiter(viewport=self.viewport) renderableProcessor = RenderableProcessor( textureEmiter=self.textureEmiter, particleEmiter=particleEmiter) movementProcessor = MovementProcessor(mapManager=None) inputProcessor = InputProcessor() renderableMinimalProcessor = RenderableMinimalProcessor( viewport=self.viewport, textureEmiter=self.textureEmiter) self.world.add_processor(inputProcessor) self.world.add_processor(movementProcessor) self.world.add_processor(renderableMinimalProcessor) self.world.add_processor(renderableProcessor) # Player playerEntity = self.world.create_entity() texture = CharacterTexture( characterTextureType=CharacterTextureType.player, characterAnimationType=CharacterAnimationType.standing, name='Player') coordinates = Coordinates(10, 10) renderable = Renderable(texture=texture, viewport=self.viewport, parent=None, coordinates=coordinates, direction=Direction.right, name='Player') self.world.add_component(playerEntity, renderable) # /Player # process it targetFrameTime = 1.0 / Config.fps self.world.process(targetFrameTime) self.viewport.internalPrint() # check if head is at correct position self.assertTrue(self.viewport.peek(11, 10) == 'o') extCoords = renderable.getLocationAndSize() self.assertTrue(extCoords.x == 10) self.assertTrue(extCoords.y == 10) self.assertTrue(extCoords.width == 3) self.assertTrue(extCoords.height == 3) locCenter = renderable.getLocationCenter() self.assertTrue(locCenter.x == 11) self.assertTrue(locCenter.y == 11) self.assertTrue(self.viewport.peek(11, 11) == '|') # body attackLocation = renderable.getAttackBaseLocation() self.assertTrue(attackLocation.x == 13) self.assertTrue(attackLocation.y == 11) attackLocation = renderable.getAttackBaseLocationInverted() self.assertTrue(attackLocation.x == 9) self.assertTrue(attackLocation.y == 11) p = Coordinates(9, 9) self.assertFalse(renderable.isHitBy([p])) p = Coordinates(13, 13) # in sprite, but dest is empty self.assertFalse(renderable.isHitBy([p])) p = Coordinates(10, 10) # in sprite, but on head (not empty) self.assertFalse(renderable.isHitBy([p])) p = Coordinates(11, 10) self.assertTrue(renderable.isHitBy([p])) p = Coordinates(12, 12) self.assertTrue(renderable.isHitBy([p])) renderable.setDirection(Direction.left) attackLocation = renderable.getAttackBaseLocation() self.assertTrue(attackLocation.x == 9) self.assertTrue(attackLocation.y == 11) attackLocation = renderable.getAttackBaseLocationInverted() self.assertTrue(attackLocation.x == 13) self.assertTrue(attackLocation.y == 11)