GodotVR/components/persistent/persistent_zone_database.gd
2025-10-08 11:10:13 +02:00

50 lines
1.1 KiB
GDScript

class_name PersistentZoneDatabase
extends Resource
## Persistent Zone Database Resource
##
## This resource defines all [PersistentZoneInfo] entries for our game.
## This is used by our loading system to load the correct zone.
## This property is the array of supported zones
@export var zones : Array[PersistentZoneInfo] : set = _set_zones
# Items cache
var _cache := {}
# Items cache valid flag
var _cache_valid := false
## This method get an [PersistentZoneInfo] given its [param zone_id]. If no
## corresponding [PersistentZoneInfo] is found then this function returns null.
func get_zone(zone_id : String) -> PersistentZoneInfo:
# Populate the cache if necessary
if not _cache_valid:
_populate_cache()
return _cache.get(zone_id)
# Handle setting the items
func _set_zones(p_zones : Array[PersistentZoneInfo]) -> void:
# Save the new items
zones = p_zones
# Invalidate the cache
_cache_valid = false
# Populate the type cache
func _populate_cache() -> void:
# Populate the cache
_cache = {}
for zone in zones:
_cache[zone.zone_id] = zone
# Indicate the cache is valid
_cache_valid = true