feat(core): implement room navigation, character states, save/load and settings menu
- RoomNavigator autoload: smooth camera pan between floors - Floor1 and Floor2 placeholder rooms with elevator buttons - CharacterData Resource with State enum (HEALTHY/SICK/SLEEPING/TIRED) - Character visual state feedback via ColorRect color - Main scene loads saved state on startup - SettingsMenu with music/sfx sliders and game reset - HUD settings button to open SettingsMenu Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -3,18 +3,55 @@ class_name Character extends Node2D
|
||||
|
||||
signal character_picked_up(character: Character)
|
||||
signal character_placed(character: Character, position: Vector2)
|
||||
signal state_changed(new_state: CharacterData.State)
|
||||
|
||||
@export var character_id: String = ""
|
||||
@export var display_name: String = ""
|
||||
@export var data: CharacterData
|
||||
|
||||
var _is_held: bool = false
|
||||
|
||||
const _STATE_COLORS: Dictionary = {
|
||||
CharacterData.State.HEALTHY: Color(0.6, 0.8, 1.0),
|
||||
CharacterData.State.SICK: Color(0.7, 0.9, 0.7),
|
||||
CharacterData.State.SLEEPING: Color(0.8, 0.7, 0.95),
|
||||
CharacterData.State.TIRED: Color(1.0, 0.95, 0.6),
|
||||
CharacterData.State.PREGNANT: Color(1.0, 0.85, 0.9),
|
||||
CharacterData.State.BABY: Color(0.9, 0.95, 1.0),
|
||||
}
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
var drag: DragDropComponent = get_node_or_null("DragDropComponent") as DragDropComponent
|
||||
if drag != null:
|
||||
drag.drag_picked_up.connect(_on_drag_picked_up)
|
||||
drag.drag_released.connect(_on_drag_released)
|
||||
if data != null:
|
||||
_update_visual_state()
|
||||
|
||||
|
||||
func set_state(new_state: CharacterData.State) -> void:
|
||||
if data == null:
|
||||
return
|
||||
data.state = new_state
|
||||
_update_visual_state()
|
||||
state_changed.emit(new_state)
|
||||
|
||||
|
||||
func _update_visual_state() -> void:
|
||||
if data == null:
|
||||
return
|
||||
var visual: ColorRect = get_node_or_null("Visual") as ColorRect
|
||||
if visual == null:
|
||||
return
|
||||
var color: Color = _STATE_COLORS.get(data.state, Color(0.6, 0.8, 1.0))
|
||||
visual.color = color
|
||||
var ear_left: ColorRect = get_node_or_null("Ears/EarLeft") as ColorRect
|
||||
var ear_right: ColorRect = get_node_or_null("Ears/EarRight") as ColorRect
|
||||
if ear_left != null:
|
||||
ear_left.color = color
|
||||
if ear_right != null:
|
||||
ear_right.color = color
|
||||
|
||||
|
||||
func _on_drag_picked_up(_pos: Vector2) -> void:
|
||||
|
||||
Reference in New Issue
Block a user