Exemple #1
0
    def init(self, actor: stdbomb.Bomb, position, velocity, materials):
        factory = stdbomb.BombFactory.get()
        actor.node = ba.newnode('prop',
                                delegate=actor,
                                attrs={
                                    'position': position,
                                    'velocity': velocity,
                                    'body': 'sphere',
                                    'materials': materials
                                })

        actor.first_shield = ba.newnode(
            'shield', owner=actor.node, attrs={
                'color': (1, 1, 1),
                'radius': 0.6})

        actor.node.connectattr(
            'position', actor.first_shield, 'position')

        actor.second_shield = ba.newnode(
            'shield', owner=actor.node, attrs={
                'color': (20, 0, 0),
                'radius': 0.4})

        actor.node.connectattr(
            'position', actor.second_shield, 'position')

        ba.animate(actor.second_shield, 'radius',
                   {0: 0.1, 0.05: 0.4, 0.2: 0.1, 0.25: 0.5, 0.4: 0.3, 0.7: 0.1}, True)
    def handlemessage(self, actor: stdbomb.Bomb, msg: Any) -> bool:
        if isinstance(msg, ba.PickedUpMessage):
            if actor.node and actor.owner != msg.node:
                ba.playsound(ba.getsound("corkPop"),
                             position=actor.node.position)

                actor.explode()
                return True
        elif isinstance(msg, SetStickyMessage):
            node = ba.getcollision().opposingnode
            self.on_sticky_gift(actor, node)
            return True
        return False
Exemple #3
0
 def init(self, actor: stdbomb.Bomb, position: Sequence[Union[int, float]],
          velocity: Sequence[Union[int, float]],
          materials: Sequence[ba.Material]):
     factory = stdbomb.BombFactory.get()
     actor.node = ba.newnode('prop',
                             delegate=actor,
                             attrs={
                                 'body':
                                 'landMine',
                                 'model':
                                 factory.land_mine_model,
                                 'light_model':
                                 factory.land_mine_model,
                                 'color_texture':
                                 ba.gettexture('achievementCrossHair'),
                                 'position':
                                 position,
                                 'velocity':
                                 velocity,
                                 'shadow_size':
                                 0.44,
                                 'reflection':
                                 'powerup',
                                 'reflection_scale': [1],
                                 'materials':
                                 materials
                             })
    def _update(self) -> None:
        # Misc. periodic updating.
        xpos = random.uniform(-7.1, 6.0)
        ypos = random.uniform(3.5, 3.5)
        zpos = random.uniform(-8.2, 3.7)

        # Prune dead eggs from our list.
        self._eggs = [e for e in self._eggs if e]

        # Spawn more eggs if we've got space.
        if len(self._eggs) < int(self._max_eggs):

            # Occasionally spawn a land-mine in addition.
            if self._pro_mode and random.random() < 0.25:
                mine = Bomb(position=(xpos, ypos, zpos),
                            bomb_type='land_mine').autoretain()
                mine.arm()
            else:
                self._eggs.append(Egg(position=(xpos, ypos, zpos)))
Exemple #5
0
    def init(self, actor: stdbomb.Bomb, position, velocity, materials):
        factory = stdbomb.BombFactory.get()
        actor.node = ba.newnode('prop',
                                delegate=actor,
                                attrs={
                                    'body': 'sphere',
                                    'body_scale': 0.85,
                                    'position': position,
                                    'velocity': velocity,
                                    'materials': materials
                                })

        actor.first_shield = ba.newnode('shield',
                                        owner=actor.node,
                                        attrs={
                                            'color': (1, 1, 1),
                                            'radius': 0.6
                                        })

        actor.node.connectattr('position', actor.first_shield, 'position')

        actor.second_shield = ba.newnode('shield',
                                         owner=actor.node,
                                         attrs={
                                             'color': (0, 0, 20),
                                             'radius': 0.4
                                         })

        actor.node.connectattr('position', actor.second_shield, 'position')

        color = {
            0: (1, 1, 1),
            1: (20, 0, 0),
            2: (20, 10, 0),
            3: (20, 20, 0),
            4: (0, 20, 0),
            5: (0, 10, 20),
            6: (0, 0, 20),
            7: (10, 0, 20),
            8: (1, 1, 1)
        }

        ba.animate_array(actor.second_shield, 'color', 3, color, True)
Exemple #6
0
 def init(self, actor: stdbomb.Bomb, position, velocity, materials):
     factory = stdbomb.BombFactory.get()
     actor.node = ba.newnode('prop', delegate=actor, attrs={
         'body': 'sphere',
         'model': factory.impact_bomb_model,
         'color_texture': ba.gettexture('ouyaAButton'),
         'position': position,
         'velocity': velocity,
         'shadow_size': 0.3,
         'reflection': 'powerup',
         'reflection_scale': [1.5],
         'materials': materials})
Exemple #7
0
    def arm(self, actor: stdbomb.Bomb):
        factory = stdbomb.BombFactory.get()
        elon_mine_lit_tex = ba.gettexture('circleNoAlpha')
        elon_mine_tex = ba.gettexture('achievementCrossHair')
        actor.texture_sequence = ba.newnode('texture_sequence',
                                            owner=actor.node,
                                            attrs={
                                                'rate':
                                                30,
                                                'input_textures':
                                                (elon_mine_lit_tex,
                                                 elon_mine_tex)
                                            })
        ba.timer(0.5, actor.texture_sequence.delete)
        ba.playsound(ba.getsound('activateBeep'), position=actor.node.position)

        actor.aim = AutoAim(actor.node, actor.owner)
        # we now make it explodable.
        ba.timer(
            0.25,
            ba.WeakCall(actor._add_material, factory.land_mine_blast_material))
        actor.texture_sequence.connectattr('output_texture', actor.node,
                                           'color_texture')
 def init(self, actor: stdbomb.Bomb, position: Sequence[Union[int, float]],
          velocity: Sequence[Union[int, float]],
          materials: Sequence[ba.Material]):
     factory = StickyGiftFactory.get()
     materials += (factory.sticky_gift_material, )
     actor.node = ba.newnode('prop',
                             delegate=actor,
                             attrs={
                                 'body': 'sphere',
                                 'model': factory.sticky_gift_model,
                                 'light_model': factory.sticky_gift_model,
                                 'color_texture':
                                 factory.sticky_gift_texture,
                                 'position': position,
                                 'velocity': velocity,
                                 'shadow_size': 0.44,
                                 'reflection': 'sharper',
                                 'reflection_scale': [0, 8.5, 10],
                                 'materials': materials
                             })
    def _on_bomb_exploded(self, bomb: Bomb, blast: Blast) -> None:
        assert blast.node
        pos = blast.node.position

        # Debugging: throw a locator down where we landed.
        # ba.newnode('locator', attrs={'position':blast.node.position})

        # Feed the explosion point to all our targets and get points in return.
        # Note: we operate on a copy of self._targets since the list may change
        # under us if we hit stuff (don't wanna get points for new targets).
        player = bomb.get_source_player()
        if not player:
            return  # could happen if they leave after throwing a bomb..

        bullseye = any(
            target.do_hit_at_position(pos, player)
            for target in list(self._targets))
        if bullseye:
            player.gamedata['streak'] += 1
        else:
            player.gamedata['streak'] = 0
Exemple #10
0
 def _make_mine(self, i: int) -> None:
     assert self._race_mines is not None
     rmine = self._race_mines[i]
     rmine.mine = Bomb(position=rmine.point[:3], bomb_type='land_mine')
     rmine.mine.arm()
Exemple #11
0
 def _spawn_bomb_at_pos(self, pos: Sequence[float]) -> None:
     if self.has_ended():
         return
     Bomb(position=pos, bomb_type='normal').autoretain()
Exemple #12
0
    def arm(self, actor: stdbomb.Bomb):
        ba.playsound(ba.getsound('activateBeep'), position=actor.node.position)

        actor.aim = AutoAim(actor.node, actor.owner)
Exemple #13
0
 def on_drop(self, actor: stdbomb.Bomb):
     actor.arm_timer = ba.Timer(
         0.25, ba.WeakCall(actor.handlemessage, stdbomb.ArmMessage()))
Exemple #14
0
 def _drop_bomb(self, position: Sequence[float],
                velocity: Sequence[float]) -> None:
     Bomb(position=position, velocity=velocity).autoretain()