56 lines
1.0 KiB
GDScript
56 lines
1.0 KiB
GDScript
class_name SimulationPopulationView
|
|
extends RefCounted
|
|
|
|
var all_by_id: Dictionary = {}
|
|
var living_by_id: Dictionary = {}
|
|
var starving_by_id: Dictionary = {}
|
|
|
|
|
|
func _init(npcs: Array = []) -> void:
|
|
rebuild(npcs)
|
|
|
|
|
|
func rebuild(npcs: Array) -> void:
|
|
all_by_id.clear()
|
|
living_by_id.clear()
|
|
starving_by_id.clear()
|
|
for value in npcs:
|
|
var npc := value as SimNPC
|
|
if npc != null:
|
|
refresh_npc(npc)
|
|
|
|
|
|
func refresh_npc(npc: SimNPC) -> void:
|
|
if npc == null:
|
|
return
|
|
all_by_id[npc.id] = npc
|
|
if npc.is_dead:
|
|
living_by_id.erase(npc.id)
|
|
starving_by_id.erase(npc.id)
|
|
return
|
|
living_by_id[npc.id] = npc
|
|
if npc.is_starving:
|
|
starving_by_id[npc.id] = npc
|
|
else:
|
|
starving_by_id.erase(npc.id)
|
|
|
|
|
|
func get_living(npc_id: int) -> SimNPC:
|
|
return living_by_id.get(npc_id) as SimNPC
|
|
|
|
|
|
func get_any(npc_id: int) -> SimNPC:
|
|
return all_by_id.get(npc_id) as SimNPC
|
|
|
|
|
|
func get_starving(npc_id: int) -> SimNPC:
|
|
return starving_by_id.get(npc_id) as SimNPC
|
|
|
|
|
|
func living_count() -> int:
|
|
return living_by_id.size()
|
|
|
|
|
|
func starving_count() -> int:
|
|
return starving_by_id.size()
|