diff --git a/src/genieutils/civ.py b/src/genieutils/civ.py index 3687fe6..a0ea454 100644 --- a/src/genieutils/civ.py +++ b/src/genieutils/civ.py @@ -5,7 +5,7 @@ from genieutils.versions import Version -@dataclass +@dataclass(slots=True) class Civ(GenieClass): player_type: int name: str diff --git a/src/genieutils/datfile.py b/src/genieutils/datfile.py index 91487e3..75332c1 100644 --- a/src/genieutils/datfile.py +++ b/src/genieutils/datfile.py @@ -18,7 +18,7 @@ from genieutils.versions import Version -@dataclass +@dataclass(slots=True) class DatFile(GenieClass): version: str float_ptr_terrain_tables: list[int] diff --git a/src/genieutils/effect.py b/src/genieutils/effect.py index 24bf511..533bb0c 100644 --- a/src/genieutils/effect.py +++ b/src/genieutils/effect.py @@ -4,7 +4,7 @@ from genieutils.versions import Version -@dataclass +@dataclass(slots=True) class EffectCommand(GenieClass): type: int a: int @@ -32,7 +32,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class Effect(GenieClass): name: str effect_commands: list[EffectCommand] diff --git a/src/genieutils/graphic.py b/src/genieutils/graphic.py index 9efd1ba..a810de2 100644 --- a/src/genieutils/graphic.py +++ b/src/genieutils/graphic.py @@ -4,7 +4,7 @@ from genieutils.versions import Version -@dataclass +@dataclass(slots=True) class GraphicDelta(GenieClass): graphic_id: int padding_1: int @@ -38,7 +38,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class GraphicAngleSound(GenieClass): frame_num: int sound_id: int @@ -78,7 +78,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class Graphic(GenieClass): name: str file_name: str diff --git a/src/genieutils/playercolour.py b/src/genieutils/playercolour.py index f1c869f..01c3208 100644 --- a/src/genieutils/playercolour.py +++ b/src/genieutils/playercolour.py @@ -4,7 +4,7 @@ from genieutils.versions import Version -@dataclass +@dataclass(slots=True) class PlayerColour(GenieClass): id: int player_color_base: int diff --git a/src/genieutils/randommaps.py b/src/genieutils/randommaps.py index 3e5671a..a9f272a 100644 --- a/src/genieutils/randommaps.py +++ b/src/genieutils/randommaps.py @@ -4,7 +4,7 @@ from genieutils.versions import Version -@dataclass +@dataclass(slots=True) class MapUnit(GenieClass): unit: int host_terrain: int @@ -56,7 +56,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class MapTerrain(GenieClass): proportion: int terrain: int @@ -87,7 +87,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class MapLand(GenieClass): land_id: int terrain: int @@ -145,7 +145,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class MapElevation(GenieClass): proportion: int terrain: int @@ -176,7 +176,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class MapInfo(GenieClass): map_id: int border_south_west: int @@ -277,7 +277,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class RandomMaps(GenieClass): random_maps_ptr: int map_info_1: list[MapInfo] diff --git a/src/genieutils/sound.py b/src/genieutils/sound.py index ebe321b..f4f32b3 100644 --- a/src/genieutils/sound.py +++ b/src/genieutils/sound.py @@ -4,7 +4,7 @@ from genieutils.versions import Version -@dataclass +@dataclass(slots=True) class SoundItem(GenieClass): filename: str resource_id: int @@ -32,7 +32,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class Sound(GenieClass): id: int play_delay: int diff --git a/src/genieutils/task.py b/src/genieutils/task.py index 20b3d83..a68ef48 100644 --- a/src/genieutils/task.py +++ b/src/genieutils/task.py @@ -4,7 +4,7 @@ from genieutils.versions import Version -@dataclass +@dataclass(slots=True) class Task(GenieClass): task_type: int id: int diff --git a/src/genieutils/tech.py b/src/genieutils/tech.py index 97ba278..b5b27df 100644 --- a/src/genieutils/tech.py +++ b/src/genieutils/tech.py @@ -4,7 +4,7 @@ from genieutils.versions import Version -@dataclass +@dataclass(slots=True) class ResearchResourceCost(GenieClass): type: int amount: int @@ -26,7 +26,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class Tech(GenieClass): required_techs: tuple[int, int, int, int, int, int] resource_costs: tuple[ResearchResourceCost, ResearchResourceCost, ResearchResourceCost] diff --git a/src/genieutils/techtree.py b/src/genieutils/techtree.py index eb6cff3..27e6c5f 100644 --- a/src/genieutils/techtree.py +++ b/src/genieutils/techtree.py @@ -4,7 +4,7 @@ from genieutils.versions import Version -@dataclass +@dataclass(slots=True) class Common(GenieClass): slots_used: int unit_research: tuple[int, int, int, int, int, int, int, int, int, int] @@ -26,7 +26,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class TechTreeAge(GenieClass): id: int status: int @@ -89,7 +89,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class BuildingConnection(GenieClass): id: int status: int @@ -152,7 +152,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class UnitConnection(GenieClass): id: int status: int @@ -207,7 +207,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class ResearchConnection(GenieClass): id: int status: int @@ -266,7 +266,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class TechTree(GenieClass): total_unit_tech_groups: int tech_tree_ages: list[TechTreeAge] diff --git a/src/genieutils/terrainblock.py b/src/genieutils/terrainblock.py index 6629e1f..83686e8 100644 --- a/src/genieutils/terrainblock.py +++ b/src/genieutils/terrainblock.py @@ -4,7 +4,7 @@ from genieutils.versions import Version -@dataclass +@dataclass(slots=True) class FrameData(GenieClass): frame_count: int angle_count: int @@ -26,7 +26,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class Terrain(GenieClass): enabled: int random: int @@ -153,7 +153,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class TileSize(GenieClass): width: int height: int @@ -175,7 +175,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class TerrainBlock(GenieClass): virtual_function_ptr: int map_pointer: int diff --git a/src/genieutils/terrainrestriction.py b/src/genieutils/terrainrestriction.py index 1f1d52e..cd9ff42 100644 --- a/src/genieutils/terrainrestriction.py +++ b/src/genieutils/terrainrestriction.py @@ -4,7 +4,7 @@ from genieutils.versions import Version -@dataclass +@dataclass(slots=True) class TerrainPassGraphic(GenieClass): exit_tile_sprite_id: int enter_tile_sprite_id: int @@ -29,7 +29,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class TerrainRestriction(GenieClass): passable_buildable_dmg_multiplier: list[float] terrain_pass_graphics: list[TerrainPassGraphic] diff --git a/src/genieutils/unit.py b/src/genieutils/unit.py index 3b8fff0..1b569a5 100644 --- a/src/genieutils/unit.py +++ b/src/genieutils/unit.py @@ -5,7 +5,7 @@ from genieutils.versions import Version -@dataclass +@dataclass(slots=True) class ResourceStorage(GenieClass): type: int amount: float @@ -27,7 +27,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class DamageGraphic(GenieClass): graphic_id: int damage_percent: int @@ -49,7 +49,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class DeadFish(GenieClass): walking_graphic: int running_graphic: int @@ -104,7 +104,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class Bird(GenieClass): default_task_id: int search_radius: float @@ -167,7 +167,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class AttackOrArmor(GenieClass): class_: int amount: int @@ -186,7 +186,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class Type50(GenieClass): base_armor: int attacks: list[AttackOrArmor] @@ -291,7 +291,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class Projectile(GenieClass): projectile_type: int smart_mode: int @@ -322,7 +322,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class ResourceCost(GenieClass): type: int amount: int @@ -344,7 +344,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class Creatable(GenieClass): resource_costs: tuple[ResourceCost, ResourceCost, ResourceCost] train_time: int @@ -435,7 +435,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class BuildingAnnex(GenieClass): unit_id: int misplacement_x: float @@ -457,7 +457,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class Building(GenieClass): construction_graphic_id: int snow_graphic_id: int @@ -548,7 +548,7 @@ def to_bytes(self, version: Version) -> bytes: ]) -@dataclass +@dataclass(slots=True) class Unit(GenieClass): type: int id: int diff --git a/src/genieutils/unitheaders.py b/src/genieutils/unitheaders.py index 13e61d2..d5f853d 100644 --- a/src/genieutils/unitheaders.py +++ b/src/genieutils/unitheaders.py @@ -5,14 +5,13 @@ from genieutils.versions import Version -@dataclass +@dataclass(slots=True) class UnitHeaders(GenieClass): exists: int task_list: list[Task] | None = None @classmethod def from_bytes(cls, content: ByteHandler) -> 'UnitHeaders': - super().__init__(content) exists = content.read_int_8() task_list = None if exists: diff --git a/tests/test_common.py b/tests/test_common.py index 446f86d..3a021a2 100644 --- a/tests/test_common.py +++ b/tests/test_common.py @@ -101,7 +101,7 @@ def byte_handler_class(self): @pytest.fixture def child_genie_class(self): - @dataclasses.dataclass + @dataclasses.dataclass(slots=True) class ChildGenieClass(GenieClass): int_8_val: int int_16_val: int