Esempio n. 1
0
    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
Esempio n. 2
0
    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()
Esempio n. 3
0
    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)
Esempio n. 4
0
    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
Esempio n. 5
0
 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)
Esempio n. 6
0
    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)
Esempio n. 7
0
    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))
Esempio n. 8
0
    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"
Esempio n. 9
0
    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)
Esempio n. 10
0
    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)
Esempio n. 11
0
    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)
Esempio n. 12
0
    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)