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
 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
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
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"),
            RetrieverObjectLink("caption_string_id", support=Support(since=1.54)),
        ])
    ]

    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 = -1,
            caption_string_id: int = -1,
            **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
        self.caption_string_id: int = caption_string_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"

    def __repr__(self):
        arguments = [
            'player=' + str(PlayerId(self.player)),
            'x=' + str(self.x),
            'y=' + str(self.y),
            ('z=' + str(self.z)) if self.z else None,
            'reference_id=' + str(self.reference_id),
            'unit_const=' + str(self.unit_const),
            'status=' + str(self.status),
            'rotation=' + str(self.rotation),
            'initial_animation_frame=' + str(self.initial_animation_frame),
            ('garrisoned_in_id=' + str(self.garrisoned_in_id)) if self.garrisoned_in_id != -1 else None,
            ('caption_string_id=' + str(self.caption_string_id)) if self.caption_string_id != -1 else None,
        ]

        return 'Unit(' + ', '.join(filter(None, arguments)) + ')'

Attributes

caption_string_id: int = caption_string_id instance-attribute
Type: int
Value: caption_string_id
garrisoned_in_id: int = garrisoned_in_id instance-attribute
Type: int
Value: garrisoned_in_id
initial_animation_frame: int = initial_animation_frame instance-attribute
Type: int
Value: initial_animation_frame
name: str property
Type: str

The name of the unit, nicely formatted

player: PlayerId property writable
Type: PlayerId

The player that owns this unit

reference_id: int = reference_id instance-attribute
Type: int
Value: reference_id
rotation: float = rotation instance-attribute
Type: float
Value: rotation
status: int = status instance-attribute
Type: int
Value: status
tile: Tile property writable
Type: Tile

The tile where the unit is located

unit_const: int = unit_const instance-attribute
Type: int
Value: unit_const
x: float = x instance-attribute
Type: float
Value: x
y: float = y instance-attribute
Type: float
Value: y
z: float = z instance-attribute
Type: float
Value: z

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 - -1
caption_string_id int - -1
kwargs ? - {}
Source code in AoE2ScenarioParser/objects/data_objects/unit.py
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
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 = -1,
        caption_string_id: int = -1,
        **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
    self.caption_string_id: int = caption_string_id

def __repr__(...)
Source code in AoE2ScenarioParser/objects/data_objects/unit.py
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
def __repr__(self):
    arguments = [
        'player=' + str(PlayerId(self.player)),
        'x=' + str(self.x),
        'y=' + str(self.y),
        ('z=' + str(self.z)) if self.z else None,
        'reference_id=' + str(self.reference_id),
        'unit_const=' + str(self.unit_const),
        'status=' + str(self.status),
        'rotation=' + str(self.rotation),
        'initial_animation_frame=' + str(self.initial_animation_frame),
        ('garrisoned_in_id=' + str(self.garrisoned_in_id)) if self.garrisoned_in_id != -1 else None,
        ('caption_string_id=' + str(self.caption_string_id)) if self.caption_string_id != -1 else None,
    ]

    return 'Unit(' + ', '.join(filter(None, arguments)) + ')'

Functions

Modules