def __init__(self, id_, class_, class_data, model, y_positions, enemy_handler):
        Unit.__init__(self, "enemy_" + str(id_), class_, class_data)

        self.transport_snd = None
        self._move_int = None
        self._rb_node = None
        self._tooltip = "Skinhead - " + self.class_

        self._y_positions = y_positions
        self._y_pos = take_random(self._y_positions)

        self._x_range = (-0.3, 0.4) if self.class_data["part"] == "side" else (0.6, 1.3)

        self.node = render.attachNewNode(self.id + "_node")  # noqa: F821
        self.node.setPos(self._io_dist, -7, 0)

        self.model = model
        self.model.pose("ride", 1)
        self.model.reparentTo(self.node)

        # organize movement and aiming tasks
        time_to_overtake = random.randint(33, 50)

        self._move(time_to_overtake, (self._y_pos, random.uniform(*self._x_range), 0))
        taskMgr.doMethodLater(  # noqa: F821
            time_to_overtake + 2, self._float_move, self.id + "_float_move"
        )
Beispiel #2
0
    def _die(self):
        """Character death sequence.

        Stop all the character's tasks, play death animation
        and plan the character object clearing.
        """
        if self._team.hold_together:
            self.health = 1
            return False

        if not Shooter._die(self):
            return False

        Unit._die(self)

        if base.common_ctrl.chosen_char == self:  # noqa: F821
            base.common_ctrl.deselect(clear_resting=False)  # noqa: F821

        self._health_bar.hide_health()
        self._stop_tasks(
            "_reduce_energy", "_get_well", "_infect", "_stop_stimul", "_gain_energy"
        )

        base.char_gui.destroy_char_button(self.id)  # noqa: F821
        self._team.delete_relations(self.id)

        LerpAnimInterval(self.model, 0.3, "stand_and_aim", "die").start()
        LerpAnimInterval(self.model, 0.3, self._current_anim, "die").start()
        self.model.hprInterval(1, (self.current_part.angle, 0, 0)).start()
        self.model.play("die")
        self._die_snd.play()

        taskMgr.doMethodLater(3, self._hide, self.id + "_hide")  # noqa: F821
 def __init__(self,
              name='SpellCaster',
              hit_points_limit=80,
              mana_limit=100):
     Unit.__init__(self, name, hit_points_limit)
     self.mana = mana_limit
     self.mana_limit = mana_limit
     self.is_battle_mage = False
     self.spellbook = {}
    def get_damage(self, damage):
        """Take damage points and change model color.

        The more damage the unit taken the more red it'll be.

        Args:
            damage (int): Damage points to get.
        """
        Unit.get_damage(self, damage)
        self.model.setColorScale(self.model.getColorScale()[0] + 0.018, 1, 1, 1)
Beispiel #5
0
    def get_damage(self, damage):
        """Getting damage.

        Args:
            damage (int): Damage points to get.
        """
        if base.labels.TRAITS[2][0] in self.traits:  # noqa: F821
            # Masochism
            self.energy += 1

        Unit.get_damage(self, damage)
Beispiel #6
0
 def __init__(self,
              title,
              hit_points_limit,
              damage,
              mana_limit,
              spell=Lightning()):
     Unit.__init__(self, title, hit_points_limit, damage)
     self._magic_state = MagicState(title, hit_points_limit, damage,
                                    mana_limit)
     self._spell = spell
     self._magic_abilitiy = MagicAbilitiy(self, self._spell)
     self._spell_book = SpellBook(self._spell)
Beispiel #7
0
    def __init__(self, id_, name, class_, sex, team, desc=None):
        Unit.__init__(
            self, "character_" + str(id_), class_, CLASSES[sex + "_" + class_]
        )
        Shooter.__init__(self)

        self._team = team
        self._current_pos = None
        self._current_anim = None
        self._idle_seq = None
        self._cohesion_ball = None
        self._is_stunned = False
        self._is_stimulated = False
        self._health_bar = None

        self.inhale = 15
        self.damage_range = [5, 8]
        self.clear_damage = [5, 8]
        self.effects = {}
        self._yeah_snds = []

        self.name = name
        self.sex = sex
        if sex == "male":
            self.heshe = base.labels.PRONOUNS[0]  # noqa: F821
            self.hisher = base.labels.PRONOUNS[1]  # noqa: F821
            self.himher = base.labels.PRONOUNS[2]  # noqa: F821
        else:
            self.heshe = base.labels.PRONOUNS[3]  # noqa: F821
            self.hisher = base.labels.PRONOUNS[4]  # noqa: F821
            self.himher = base.labels.PRONOUNS[5]  # noqa: F821

        if desc:
            self._energy = desc["energy"]
            self.is_diseased = desc["is_diseased"]
            self.get_well_score = desc["get_well_score"]
            self.traits = desc["traits"]
            self.disabled_traits = desc["disabled_traits"]

            if self.is_diseased:
                taskMgr.doMethodLater(  # noqa: F821
                    60, self.get_well, self.id + "_get_well"
                )
        else:
            self._energy = 100
            self.is_diseased = False
            self.get_well_score = 0

            self.disabled_traits = []
            self.traits = []
            traits = copy.copy(base.labels.TRAITS)  # noqa: F821
            for _ in range(random.randint(0, 2)):
                self.traits.append(random.choice(take_random(traits)))
    def _die(self):
        """Make this enemy unit die.

        Play death sequence of movements and sounds,
        stop all the tasks for this enemy, plan clearing.

        Returns:
            bool: True, if the unit dies for the first time.
        """
        if not Unit._die(self):
            return False

        self.model.setColorScale(1, 1, 1, 1)
        self._stop_tasks("_float_move")
        self._move_int.pause()

        self.model.play("die")
        if self.id in base.world.enemy.active_units:  # noqa: F821
            base.world.enemy.active_units.pop(self.id)  # noqa: F821
            if self.current_part:
                self.current_part.enemies.remove(self)

        self._explode()
        self.transport_snd.stop()
        self._y_positions.append(self._y_pos)

        base.add_head(self.class_data["class"].__name__)  # noqa: F821
        return True
import sys
import os
sys.path.append(os.path.abspath('..'))

from units.unitcollection import UnitCollection
from units.unit import Unit

unit1 = Unit(60, os.path.join('..', 'images', 'units', 'fighter.png'))
unit2 = Unit(60, os.path.join('..', 'images', 'units', 'gtk3-demo.png'))
unit3 = Unit(60, os.path.join('..', 'images', 'units', 'fighter.png'))

units = UnitCollection()
units.addUnit(unit1, (0, 3))
units.addUnit(unit2, (2, 2))

try:
    units.addUnit(unit1, (1, 5))
    print('failed to fail')
except:
    print('successfully failed')

try:
    units.addUnit(unit3, (2, 2))
    print('failed to fail')
except:
    print('successfully failed')

units.addUnit(unit3, (1, 2))

try:
    units.moveUnit(unit3, (-1, 1))
Beispiel #10
0
 def __repr__(self):
     if self.title == 'Vampire' or 'Werewolf' or 'Wolf':
         return Unit.__repr__(self)
     return Unit.__repr__(self) + 'Mana: %d\n' % (self._magic_state.mana)
Beispiel #11
0
 def __init__(self, title='Vampire', hit_points_limit=130, damage=60):
     Unit.__init__(self, title, hit_points_limit, damage)
     self._vampire_abilitiy = VampireAbilitiy(self)
Beispiel #12
0
 def __init__(self, coords, size):
     Unit.__init__(self, coords, size)
     self.timer = Timer()
     self.legs_are_open = True
 def __str__(self):
     return '{0}\nMana[{1}/{2}] {3} > has in Spellbook:\n{4}'.format(
         Unit.__str__(self), self.mana, self.mana_limit,
         (' battle mage' if self.is_battle_mage else ' healer'),
         self.show_spellbook())
Beispiel #14
0
 def __init__(self, title='Roque', hit_points_limit=150, damage=40):
     Unit.__init__(self, title, hit_points_limit, damage)
     self._roque_abilitiy = RoqueAbilitiy(self)
Beispiel #15
0
 def __init__(self, title='Soldier', hit_points_limit=200, damage=45):
     Unit.__init__(self, title, hit_points_limit, damage)
Beispiel #16
0
 def __init__(self, title='Werewolf', hit_points_limit=170, damage=40):
     Unit.__init__(self, title, hit_points_limit, damage)
     self._werewolf_state = WerewolfState(title, hit_points_limit, damage,
                                          self)
     self._werewolf_abilitiy = WerewolfAbilitiy(self, self._werewolf_state)
Beispiel #17
0
import pygame

from units.unit import Unit
from units.unitcollection import UnitCollection
from interface.inputhandler import InputHandler
from interface.mapwindow import MapWindow
from interface.graphicsengine import GraphicsEngine

pygame.init()

tilesize = 60
screen = pygame.display.set_mode((800, 600))
mapview = MapWindow((500, 500), tilesize)
units = UnitCollection()
engine = GraphicsEngine(screen, mapview, units)

me = Unit(tilesize, os.path.join('..', 'images', 'units', 'fighter.png'))
units.addUnit(me, (1, 1))
inputHandler = InputHandler(engine, mapview, units)
inputHandler.linkUnit(me)

enemy = Unit(tilesize, os.path.join('..', 'images', 'units', 'skeleton.png'))
units.addUnit(enemy, (4, 3))

while engine.requestQuit != True:
    engine.runFrame()
    inputHandler.handleInput()
    pygame.time.wait(60)

sys.exit()
Beispiel #18
0
 def __init__(self, title='Berserker', hit_points_limit=190, damage=35):
     Unit.__init__(self, title, hit_points_limit, damage)
     self._berserker_state = BerserkerState(title, hit_points_limit, damage)
Beispiel #19
0
 def __init__(self, coords, size):
     Unit.__init__(self, coords, size)
     pass
Beispiel #20
0
 def __init__(self, warlock, title='Demon', hit_points_limit=80, damage=30):
     Unit.__init__(self, title, hit_points_limit, damage)
     self._warlock = warlock