mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 12:11:33 -06:00
Core: Add State add/remove/set Helpers (#4845)
This commit is contained in:
@@ -1013,6 +1013,17 @@ class CollectionState():
|
|||||||
|
|
||||||
return changed
|
return changed
|
||||||
|
|
||||||
|
def add_item(self, item: str, player: int, count: int = 1) -> None:
|
||||||
|
"""
|
||||||
|
Adds the item to state.
|
||||||
|
|
||||||
|
:param item: The item to be added.
|
||||||
|
:param player: The player the item is for.
|
||||||
|
:param count: How many of the item to add.
|
||||||
|
"""
|
||||||
|
assert count > 0
|
||||||
|
self.prog_items[player][item] += count
|
||||||
|
|
||||||
def remove(self, item: Item):
|
def remove(self, item: Item):
|
||||||
changed = self.multiworld.worlds[item.player].remove(self, item)
|
changed = self.multiworld.worlds[item.player].remove(self, item)
|
||||||
if changed:
|
if changed:
|
||||||
@@ -1021,6 +1032,33 @@ class CollectionState():
|
|||||||
self.blocked_connections[item.player] = set()
|
self.blocked_connections[item.player] = set()
|
||||||
self.stale[item.player] = True
|
self.stale[item.player] = True
|
||||||
|
|
||||||
|
def remove_item(self, item: str, player: int, count: int = 1) -> None:
|
||||||
|
"""
|
||||||
|
Removes the item from state.
|
||||||
|
|
||||||
|
:param item: The item to be removed.
|
||||||
|
:param player: The player the item is for.
|
||||||
|
:param count: How many of the item to remove.
|
||||||
|
"""
|
||||||
|
assert count > 0
|
||||||
|
self.prog_items[player][item] -= count
|
||||||
|
if self.prog_items[player][item] < 1:
|
||||||
|
del (self.prog_items[player][item])
|
||||||
|
|
||||||
|
def set_item(self, item: str, player: int, count: int) -> None:
|
||||||
|
"""
|
||||||
|
Sets the item in state equal to the provided count.
|
||||||
|
|
||||||
|
:param item: The item to modify.
|
||||||
|
:param player: The player the item is for.
|
||||||
|
:param count: How many of the item to now have.
|
||||||
|
"""
|
||||||
|
assert count >= 0
|
||||||
|
if count == 0:
|
||||||
|
del (self.prog_items[player][item])
|
||||||
|
else:
|
||||||
|
self.prog_items[player][item] = count
|
||||||
|
|
||||||
|
|
||||||
class EntranceType(IntEnum):
|
class EntranceType(IntEnum):
|
||||||
ONE_WAY = 1
|
ONE_WAY = 1
|
||||||
|
@@ -528,7 +528,7 @@ class World(metaclass=AutoWorldRegister):
|
|||||||
"""Called when an item is collected in to state. Useful for things such as progressive items or currency."""
|
"""Called when an item is collected in to state. Useful for things such as progressive items or currency."""
|
||||||
name = self.collect_item(state, item)
|
name = self.collect_item(state, item)
|
||||||
if name:
|
if name:
|
||||||
state.prog_items[self.player][name] += 1
|
state.add_item(name, self.player)
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@@ -536,9 +536,7 @@ class World(metaclass=AutoWorldRegister):
|
|||||||
"""Called when an item is removed from to state. Useful for things such as progressive items or currency."""
|
"""Called when an item is removed from to state. Useful for things such as progressive items or currency."""
|
||||||
name = self.collect_item(state, item, True)
|
name = self.collect_item(state, item, True)
|
||||||
if name:
|
if name:
|
||||||
state.prog_items[self.player][name] -= 1
|
state.remove_item(name, self.player)
|
||||||
if state.prog_items[self.player][name] < 1:
|
|
||||||
del (state.prog_items[self.player][name])
|
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@@ -428,13 +428,13 @@ class MessengerWorld(World):
|
|||||||
def collect(self, state: "CollectionState", item: "Item") -> bool:
|
def collect(self, state: "CollectionState", item: "Item") -> bool:
|
||||||
change = super().collect(state, item)
|
change = super().collect(state, item)
|
||||||
if change and "Time Shard" in item.name:
|
if change and "Time Shard" in item.name:
|
||||||
state.prog_items[self.player]["Shards"] += int(item.name.strip("Time Shard ()"))
|
state.add_item("Shards", self.player, int(item.name.strip("Time Shard ()")))
|
||||||
return change
|
return change
|
||||||
|
|
||||||
def remove(self, state: "CollectionState", item: "Item") -> bool:
|
def remove(self, state: "CollectionState", item: "Item") -> bool:
|
||||||
change = super().remove(state, item)
|
change = super().remove(state, item)
|
||||||
if change and "Time Shard" in item.name:
|
if change and "Time Shard" in item.name:
|
||||||
state.prog_items[self.player]["Shards"] -= int(item.name.strip("Time Shard ()"))
|
state.remove_item("Shards", self.player, int(item.name.strip("Time Shard ()")))
|
||||||
return change
|
return change
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
Reference in New Issue
Block a user