class_name VisualThemeProfile extends Resource ## Replaceable visual-only configuration. Gameplay code must not branch on ## this resource, so changing art never changes simulation or save data. @export_group("Pixel Art") @export var pixel_dungeon_tiles: Texture2D @export var pixel_town_tiles: Texture2D @export_group("World Art") @export var front_world_background: Texture2D @export var back_world_background: Texture2D @export_range(0.0, 1.0, 0.01) var world_art_opacity := 0.94 @export_range(0.0, 1.0, 0.01) var grid_overlay_opacity := 0.24 @export_group("Interface Icons") @export var facility_icons: Dictionary = {} @export var navigation_icons: Dictionary = {} @export var resource_icons: Dictionary = {} @export var control_icons: Dictionary = {} @export var guest_actor_markers: Dictionary = {} @export var staff_actor_markers: Dictionary = {} @export_group("Interface Skins") @export var ui_skin_textures: Dictionary = {} @export_group("Interface Palette") @export var window_background := Color("24170f") @export var dark_panel := Color("6b3e1d") @export var dark_panel_alt := Color("513018") @export var light_panel := Color("f4e3bd") @export var border_gold := Color("d5a552") @export var button_normal := Color("75451f") @export var button_hover := Color("8d5628") @export var button_pressed := Color("496528") @export var button_disabled := Color("574334") @export var text_light := Color("fff0c8") @export var text_dark := Color("55371e") @export var success := Color("4f8a45") @export var warning := Color("d39a2d") @export var danger := Color("c84632") func world_background_for_layer(layer: int) -> Texture2D: return front_world_background if layer == 0 else back_world_background func facility_icon(definition_id: StringName) -> Texture2D: return _icon_from(facility_icons, definition_id) func navigation_icon(mode: StringName) -> Texture2D: return _icon_from(navigation_icons, mode) func resource_icon(resource_name: StringName) -> Texture2D: return _icon_from(resource_icons, resource_name) func control_icon(control_name: StringName) -> Texture2D: return _icon_from(control_icons, control_name) func guest_actor_marker(guest_type_id: StringName) -> Texture2D: var direct := _icon_from(guest_actor_markers, guest_type_id) if direct != null: return direct var type_text := String(guest_type_id) for raw_key: Variant in guest_actor_markers: var class_id := String(raw_key) if class_id == "default": continue if type_text == class_id or type_text.begins_with(class_id + "_"): return guest_actor_markers[raw_key] as Texture2D return _icon_from(guest_actor_markers, &"default") func staff_actor_marker(role_id: StringName) -> Texture2D: var marker := _icon_from(staff_actor_markers, role_id) return marker if marker != null else _icon_from(staff_actor_markers, &"default") func ui_skin(skin_id: StringName) -> Texture2D: return _icon_from(ui_skin_textures, skin_id) func _icon_from(collection: Dictionary, key: StringName) -> Texture2D: var value: Variant = collection.get(key, collection.get(String(key), null)) return value as Texture2D