Skip to content
Snippets Groups Projects
Commit e36dfe0c authored by Florian Schröder's avatar Florian Schröder
Browse files

Add player tracking for effects and improve trashcan logic

Introduced effect-to-player mapping to track player actions on specific effects. Enhanced item-to-next-counter logic to handle cases where drop-off is rejected. Updated trashcan handling to avoid resetting empty equipment unnecessarily.
parent 155c1220
No related branches found
No related tags found
1 merge request!116Resolve "New game content"
Pipeline #77009 passed
...@@ -782,9 +782,10 @@ class Trashcan(Counter): ...@@ -782,9 +782,10 @@ class Trashcan(Counter):
): ):
return item return item
if isinstance(item, CookingEquipment): if isinstance(item, CookingEquipment):
self.hook(TRASHCAN_USAGE, counter=self, item=item, player=player) if item.content_list:
item.reset_content() self.hook(TRASHCAN_USAGE, counter=self, item=item, player=player)
item.reset() item.reset_content()
item.reset()
return item return item
self.hook(TRASHCAN_USAGE, counter=self, item=item, player=player) self.hook(TRASHCAN_USAGE, counter=self, item=item, player=player)
return None return None
...@@ -1004,9 +1005,17 @@ class Conveyer(Counter): ...@@ -1004,9 +1005,17 @@ class Conveyer(Counter):
def has_fixed_orientation(self) -> bool: def has_fixed_orientation(self) -> bool:
return True return True
def item_to_next_counter(self, item_id, next_counter): def item_to_next_counter(self, item_id, next_counter: Counter, player) -> bool:
for i, item in enumerate(self.occupied_by): for i, item in enumerate(self.occupied_by):
if item.uuid == item_id: if item.uuid == item_id:
self.occupied_by.remove(item) if isinstance(next_counter, Conveyer):
next_counter.occupied_by.appendleft(item) self.occupied_by.remove(item)
return next_counter.occupied_by.appendleft(item)
\ No newline at end of file return True
elif next_counter.can_drop_off(item):
ret = next_counter.drop_off(item, player)
if ret is None:
self.occupied_by.remove(item)
return True
return False
return False
\ No newline at end of file
...@@ -256,7 +256,7 @@ class ConveyerManager(EffectManager): ...@@ -256,7 +256,7 @@ class ConveyerManager(EffectManager):
self.active_effects: list[Tuple[Effect, Item | Counter]] = [] self.active_effects: list[Tuple[Effect, Item | Counter]] = []
"""A list of tuples representing the active effects and their target items or counters.""" """A list of tuples representing the active effects and their target items or counters."""
self.next_counter: dict[str, Counter] = {} self.next_counter: dict[str, Counter] = {}
self.effect_to_player = {}
def set_counters(self, counters: list[Counter]): def set_counters(self, counters: list[Counter]):
...@@ -280,13 +280,15 @@ class ConveyerManager(EffectManager): ...@@ -280,13 +280,15 @@ class ConveyerManager(EffectManager):
if effect.progres_percentage >= 1.0: if effect.progres_percentage >= 1.0:
if target.uuid in self.next_counter: if target.uuid in self.next_counter:
next_counter = self.next_counter[target.uuid] next_counter = self.next_counter[target.uuid]
delete_effects.append(i) on_new_counter = target.item_to_next_counter(effect.uuid[:-1], next_counter, self.effect_to_player.get(effect.uuid, "0") )
target.item_to_next_counter(effect.uuid[:-1], next_counter) if on_new_counter:
self.register_active_effect( delete_effects.append(i)
Effect(name=self.effects[0].name, item_info=self.effects[0], uid=effect.uuid, self.register_active_effect(
progress_percentage=0.0), next_counter) Effect(name=self.effects[0].name, item_info=self.effects[0], uid=effect.uuid,
progress_percentage=0.0), next_counter)
for i in reversed(delete_effects): for i in reversed(delete_effects):
self.active_effects.pop(i) effect, target = self.active_effects.pop(i)
target.active_effects.remove(effect)
def remove_active_effect_by_id(self, uid, player: str): def remove_active_effect_by_id(self, uid, player: str):
for effect, target in self.active_effects: for effect, target in self.active_effects:
...@@ -296,6 +298,7 @@ class ConveyerManager(EffectManager): ...@@ -296,6 +298,7 @@ class ConveyerManager(EffectManager):
break break
def drop_off_item(self, occupied_by: deque, item: Item, player: str, counter): def drop_off_item(self, occupied_by: deque, item: Item, player: str, counter):
self.effect_to_player[item.uuid + "-"] = player
self.register_active_effect(Effect(name=self.effects[0].name, item_info=self.effects[0], uid=item.uuid + "-", progress_percentage=0.5), counter) self.register_active_effect(Effect(name=self.effects[0].name, item_info=self.effects[0], uid=item.uuid + "-", progress_percentage=0.5), counter)
occupied_by.appendleft(item) occupied_by.appendleft(item)
return None return None
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment