Skip to content

Commit

Permalink
Fix connect_dock_to not fixing connected areas array
Browse files Browse the repository at this point in the history
  • Loading branch information
henriquegemignani committed Feb 25, 2023
1 parent ec2263c commit 17d16a0
Showing 1 changed file with 16 additions and 4 deletions.
20 changes: 16 additions & 4 deletions retro_data_structures/formats/mlvl.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
active=Int8ub,
)


class LayerFlags(Adapter):
def __init__(self):
super().__init__(Struct(
Expand All @@ -83,6 +84,7 @@ def _encode(self, obj, context, path):
"layer_flags": list(reversed(flags))
})


class LayerNameOffsetAdapter(OffsetAdapter):
def _get_table(self, context):
return context._.layer_names
Expand All @@ -93,6 +95,7 @@ def _get_table_length(self, context):
def _get_item_size(self, item):
return len(item.encode('utf-8'))


class AreaDependencyOffsetAdapter(OffsetAdapter):
def _get_table(self, context):
return context._.dependencies_b
Expand All @@ -103,6 +106,7 @@ def _get_table_length(self, context):
def _get_item_size(self, item):
return 8


def create_area(version: int, asset_id):
MLVLAreaDependency = Struct(
asset_id=asset_id,
Expand Down Expand Up @@ -346,14 +350,22 @@ def get_instance(self, instance_id: typing.Union[int, InstanceId]) -> typing.Opt
def get_instance_by_name(self, name: str) -> ScriptInstanceHelper:
return self.mrea.get_instance_by_name(name)

def connect_dock_to(self, source_dock_number: int, target_area: AreaWrapper, target_dock_number: int):
def _raw_connect_to(self, source_dock_number: int, target_area: AreaWrapper, target_dock_number: int):
source_dock = self._raw.docks[source_dock_number]
assert len(source_dock.connecting_dock) == 1, "Only docks with one connection supported"
source_dock.connecting_dock[0].area_index = target_area._index
source_dock.connecting_dock[0].dock_index = target_dock_number

target_dock = target_area._raw.docks[target_dock_number]
target_dock.connecting_dock[0].area_index = self._index
target_dock.connecting_dock[0].dock_index = source_dock_number
attached_area_index = []
for docks in self._raw.docks:
for c in docks.connecting_dock:
if c.area_index not in attached_area_index:
attached_area_index.append(c.area_index)
self._raw.attached_area_index = construct.ListContainer(attached_area_index)

def connect_dock_to(self, source_dock_number: int, target_area: AreaWrapper, target_dock_number: int):
self._raw_connect_to(source_dock_number, target_area, target_dock_number)
target_area._raw_connect_to(target_dock_number, self, source_dock_number)


class Mlvl(BaseResource):
Expand Down

0 comments on commit 17d16a0

Please sign in to comment.