Files
code-terraform/libs/utils/item.py
T
2026-11-13 00:59:44 +01:00

60 lines
2.4 KiB
Python

from __builtins__ import OutpostComponent, OutpostRef, LargeWarehouse, Warehouse, StorageBin
class Item:
@staticmethod
def get_storages(
item: str, outpost: OutpostComponent | OutpostRef | str = None,
sbin: bool = True, whouse: bool = True,
nearest: tuple[int, int] | None = None
) -> list[StorageBin | Warehouse | LargeWarehouse]:
"""get all storages (without inventory) for with a given item
Args:
item (str): item id
outpost (OutpostComponent | OutpostRef | str): outpost to search for storages
sbin (bool): control StorageBin search. default True
whouse (bool): control Warehouese & LargeWarehouse search. default True
TODO: nearest (tuple[int, int] | None): on True get only the nearest storage for position (x, y). None = get all. default None (planed!)
Return:
list[StorageBin | Warehouse | LargeWarehouse]
"""
# check type of item
if not isinstance(item, str):
return list()
# check type of outpost
if outpost is None:
# get all outposts
for op in get_component("outpost_network").outposts():
outposts = get_component("outpost_network").outposts()
else:
# ensure outpost is a OutpostComponent
if isinstance(outpost, str): outpost = get_component(outpost)
if isinstance(outpost, OutpostRef): outpost = get_component(outpost.id)
if not isinstance(outpost, OutpostComponent):
return list()
outposts = [outpost]
storages = list()
for outpost in outposts:
# search for StorgageBins
if sbin:
for b in outpost.buildings("storage_bin"):
storage = get_component(b.id)
if item == storage.get_material(): storages.append(storage)
# search for Warehouse and LargeWarehouse
if whouse:
for w in outpost.buildings("warehouse"):
storage = get_component(w.id)
if item in storage.materials(): storages.append(storage)
# check if nearest is a tuple and has 2 int insert
if isinstance(nearest, tuple) and len(nearest) == 2 and all(isinstance(v, int) for v in nearest):
pass # TODO
return storages
def count(item, outpost: str = None):
pass