Skip to content

Commit

Permalink
Add helper methods for handling actor groups
Browse files Browse the repository at this point in the history
  • Loading branch information
henriquegemignani committed Feb 12, 2022
1 parent 60fac37 commit 0f9b4f5
Showing 1 changed file with 23 additions and 2 deletions.
25 changes: 23 additions & 2 deletions mercury_engine_data_structures/formats/brfld.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import Iterator, Tuple
from typing import Iterator, Tuple, List

import construct

Expand Down Expand Up @@ -31,5 +31,26 @@ def follow_link(self, link: str):
result = result[part]
return result

def link_for_actor(self, layer_name: str, actor_name: str) -> str:
def link_for_actor(self, actor_name: str, layer_name: str = "default") -> str:
return ":".join(["Root", "pScenario", "rEntitiesLayer", "dctSublayers", layer_name, "dctActors", actor_name])

def all_actor_groups(self) -> Iterator[str]:
yield from self.raw.Root.pScenario.rEntitiesLayer.dctActorGroups.keys()

def get_actor_group(self, group_name: str) -> List[str]:
return self.raw.Root.pScenario.rEntitiesLayer[group_name]

def is_actor_in_group(self, group_name: str, actor_name: str, layer_name: str = "default") -> bool:
return self.link_for_actor(actor_name, layer_name) in self.get_actor_group(group_name)

def add_actor_to_group(self, group_name: str, actor_name: str, layer_name: str = "default"):
group = self.get_actor_group(group_name)
actor_link = self.link_for_actor(actor_name, layer_name)
if actor_link not in group:
group.append(actor_link)

def remove_actor_from_group(self, group_name: str, actor_name: str, layer_name: str = "default"):
group = self.get_actor_group(group_name)
actor_link = self.link_for_actor(actor_name, layer_name)
if actor_link in group:
group.remove(actor_link)

0 comments on commit 0f9b4f5

Please sign in to comment.