Skip to content

Unit

Classes

Unit

Bases: AoE2Object

A class representing a single unit on the map. This can be an archer, a gold mine, a house or even a tree.

Source code in AoE2ScenarioParser/objects/data_objects/unit.py
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
class Unit(AoE2Object):
    """
    A class representing a single unit on the map.
    This can be an archer, a gold mine, a house or even a tree.
    """
    _link_list = [
        RetrieverObjectLink("player", retrieve_history_number=0),
        RetrieverObjectLinkGroup("Units", "players_units[__index__].units[__index__]", group=[
            RetrieverObjectLink("x"),
            RetrieverObjectLink("y"),
            RetrieverObjectLink("z"),
            RetrieverObjectLink("reference_id"),
            RetrieverObjectLink("unit_const"),
            RetrieverObjectLink("status"),
            RetrieverObjectLink("rotation"),
            RetrieverObjectLink("initial_animation_frame"),
            RetrieverObjectLink("garrisoned_in_id"),
        ])
    ]

    def __init__(self,
                 player: int | PlayerId,
                 x: float,
                 y: float,
                 z: float,
                 reference_id: int,
                 unit_const: int,
                 status: int,
                 rotation: float,
                 initial_animation_frame: int,
                 garrisoned_in_id: int,
                 **kwargs
                 ):
        raise_if_not_int_subclass([unit_const])

        super().__init__(**kwargs)

        self._player: PlayerId = PlayerId(player)
        self.x: float = x
        self.y: float = y
        self.z: float = z
        self.reference_id: int = reference_id
        self.unit_const: int = unit_const
        self.status: int = status
        self.rotation: float = rotation
        self.initial_animation_frame: int = initial_animation_frame
        self.garrisoned_in_id: int = garrisoned_in_id

    @property
    def player(self) -> PlayerId:
        """The player that owns this unit"""
        return self._player

    @player.setter
    def player(self, player: int | PlayerId):
        actions.unit_change_ownership(self._uuid, player, self)
        self._player = player

    @property
    def tile(self) -> Tile:
        """The tile where the unit is located"""
        return Tile(math.floor(self.x), math.floor(self.y))
        # Floor x and y as location (0.9, 0.9) is still Tile[x=0, y=0]

    @tile.setter
    def tile(self, tile: Tile) -> None:
        self.x = tile.x
        self.y = tile.y

    @property
    def name(self) -> str:
        """The name of the unit, nicely formatted"""
        unit_enum = helper.get_enum_from_unit_const(self.unit_const)
        if unit_enum:
            return pretty_format_name(unit_enum.name)
        else:
            return f"Unknown{self.unit_const}"  # e.g."Unknown411"

Attributes

Attribute Type
garrisoned_in_id instance-attribute
int
initial_animation_frame instance-attribute
int
reference_id instance-attribute
int
rotation instance-attribute
float
status instance-attribute
int
unit_const instance-attribute
int
x instance-attribute
float
y instance-attribute
float
z instance-attribute
float
name property
str

The name of the unit, nicely formatted

Source code in AoE2ScenarioParser/objects/data_objects/unit.py
86
87
88
89
90
91
92
def name(self) -> str:
    """The name of the unit, nicely formatted"""
    unit_enum = helper.get_enum_from_unit_const(self.unit_const)
    if unit_enum:
        return pretty_format_name(unit_enum.name)
    else:
        return f"Unknown{self.unit_const}"  # e.g."Unknown411"
player property writable
PlayerId

The player that owns this unit

Source code in AoE2ScenarioParser/objects/data_objects/unit.py
65
66
67
def player(self) -> PlayerId:
    """The player that owns this unit"""
    return self._player
tile property writable
Tile

The tile where the unit is located

Source code in AoE2ScenarioParser/objects/data_objects/unit.py
75
76
77
def tile(self) -> Tile:
    """The tile where the unit is located"""
    return Tile(math.floor(self.x), math.floor(self.y))

Functions


def __init__(...)

Parameters:

Name Type Description Default
player int | PlayerId - required
x float - required
y float - required
z float - required
reference_id int - required
unit_const int - required
status int - required
rotation float - required
initial_animation_frame int - required
garrisoned_in_id int - required
kwargs ? - {}
Source code in AoE2ScenarioParser/objects/data_objects/unit.py
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
def __init__(self,
             player: int | PlayerId,
             x: float,
             y: float,
             z: float,
             reference_id: int,
             unit_const: int,
             status: int,
             rotation: float,
             initial_animation_frame: int,
             garrisoned_in_id: int,
             **kwargs
             ):
    raise_if_not_int_subclass([unit_const])

    super().__init__(**kwargs)

    self._player: PlayerId = PlayerId(player)
    self.x: float = x
    self.y: float = y
    self.z: float = z
    self.reference_id: int = reference_id
    self.unit_const: int = unit_const
    self.status: int = status
    self.rotation: float = rotation
    self.initial_animation_frame: int = initial_animation_frame
    self.garrisoned_in_id: int = garrisoned_in_id

Functions

Modules