feat(poc): implement Sprint 1 proof of concept

- project.godot with autoload configuration
- Reception room with placeholder visuals
- Draggable Character with DragDropComponent
- Interactive flower object with bounce animation
- GameState, SaveManager, AudioManager, InputManager autoloads
- HUD with back button and music toggle

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Steven Wroblewski
2026-04-17 10:38:29 +02:00
parent d1b771ddcb
commit 22f4bea670
14 changed files with 574 additions and 0 deletions

View File

@@ -0,0 +1,46 @@
[gd_scene load_steps=3 format=3 uid="uid://cozypaw_char"]
[ext_resource type="Script" path="res://scripts/characters/character.gd" id="1_char"]
[ext_resource type="Script" path="res://scripts/systems/drag_drop_component.gd" id="2_drag"]
[node name="Character" type="Node2D"]
script = ExtResource("1_char")
character_id = "bunny_01"
display_name = "Bunny"
[node name="Visual" type="ColorRect" parent="."]
color = Color(0.95, 0.85, 0.9, 1)
size = Vector2(64, 80)
position = Vector2(-32, -80)
[node name="Eyes" type="Node2D" parent="Visual"]
[node name="EyeLeft" type="ColorRect" parent="Visual/Eyes"]
color = Color(0.1, 0.1, 0.1, 1)
size = Vector2(8, 8)
position = Vector2(14, 20)
[node name="EyeRight" type="ColorRect" parent="Visual/Eyes"]
color = Color(0.1, 0.1, 0.1, 1)
size = Vector2(8, 8)
position = Vector2(42, 20)
[node name="Ears" type="Node2D" parent="."]
[node name="EarLeft" type="ColorRect" parent="Ears"]
color = Color(0.95, 0.85, 0.9, 1)
size = Vector2(18, 36)
position = Vector2(-22, -114)
[node name="EarRight" type="ColorRect" parent="Ears"]
color = Color(0.95, 0.85, 0.9, 1)
size = Vector2(18, 36)
position = Vector2(4, -114)
[node name="DragDropComponent" type="Node" parent="."]
script = ExtResource("2_drag")
[node name="CollisionArea" type="Area2D" parent="."]
input_pickable = true
[node name="CollisionShape" type="CollisionShape2D" parent="CollisionArea"]

23
scenes/main/Main.tscn Normal file
View File

@@ -0,0 +1,23 @@
[gd_scene load_steps=4 format=3 uid="uid://cozypaw_main"]
[ext_resource type="PackedScene" path="res://scenes/rooms/floor0/Reception.tscn" id="1_reception"]
[ext_resource type="PackedScene" path="res://scenes/characters/Character.tscn" id="2_char"]
[ext_resource type="PackedScene" path="res://scenes/ui/HUD.tscn" id="3_hud"]
[node name="Main" type="Node2D"]
[node name="Hospital" type="Node2D" parent="."]
[node name="Floor0" type="Node2D" parent="Hospital"]
[node name="Reception" parent="Hospital/Floor0" instance=ExtResource("1_reception")]
position = Vector2(0, 0)
[node name="Characters" type="Node2D" parent="."]
[node name="Bunny1" parent="Characters" instance=ExtResource("2_char")]
position = Vector2(300, 400)
[node name="UI" type="CanvasLayer" parent="."]
[node name="HUD" parent="UI" instance=ExtResource("3_hud")]

View File

@@ -0,0 +1,28 @@
[gd_scene load_steps=3 format=3 uid="uid://cozypaw_iobj"]
[ext_resource type="Script" path="res://scripts/objects/interactive_object.gd" id="1_iobj"]
[ext_resource type="Script" path="res://scripts/systems/drag_drop_component.gd" id="2_drag"]
[node name="InteractiveObject" type="Node2D"]
script = ExtResource("1_iobj")
object_id = "flower_01"
[node name="Visual" type="Node2D" parent="."]
[node name="Stem" type="ColorRect" parent="Visual"]
color = Color(0.2, 0.7, 0.2, 1)
size = Vector2(8, 40)
position = Vector2(-4, -40)
[node name="Bloom" type="ColorRect" parent="Visual"]
color = Color(1.0, 0.4, 0.6, 1)
size = Vector2(32, 32)
position = Vector2(-16, -72)
[node name="DragDropComponent" type="Node" parent="."]
script = ExtResource("2_drag")
[node name="CollisionArea" type="Area2D" parent="."]
input_pickable = true
[node name="CollisionShape" type="CollisionShape2D" parent="CollisionArea"]

View File

@@ -0,0 +1,41 @@
[gd_scene load_steps=2 format=3 uid="uid://cozypaw_reception"]
[ext_resource type="PackedScene" path="res://scenes/objects/InteractiveObject.tscn" id="1_iobj"]
[node name="Reception" type="Node2D"]
[node name="Background" type="ColorRect" parent="."]
color = Color(0.78, 0.94, 0.80, 1)
size = Vector2(1280, 720)
position = Vector2(0, 0)
[node name="Counter" type="ColorRect" parent="."]
color = Color(0.55, 0.35, 0.18, 1)
size = Vector2(300, 80)
position = Vector2(490, 610)
[node name="CounterTop" type="ColorRect" parent="."]
color = Color(0.70, 0.50, 0.28, 1)
size = Vector2(300, 12)
position = Vector2(490, 598)
[node name="Floor" type="ColorRect" parent="."]
color = Color(0.88, 0.80, 0.68, 1)
size = Vector2(1280, 100)
position = Vector2(0, 620)
[node name="WallLeft" type="ColorRect" parent="."]
color = Color(0.92, 0.88, 0.82, 1)
size = Vector2(40, 620)
position = Vector2(0, 0)
[node name="WallRight" type="ColorRect" parent="."]
color = Color(0.92, 0.88, 0.82, 1)
size = Vector2(40, 620)
position = Vector2(1240, 0)
[node name="CharacterSpawn" type="Marker2D" parent="."]
position = Vector2(300, 520)
[node name="Flower" parent="." instance=ExtResource("1_iobj")]
position = Vector2(200, 560)

35
scenes/ui/HUD.tscn Normal file
View File

@@ -0,0 +1,35 @@
[gd_scene load_steps=2 format=3 uid="uid://cozypaw_hud"]
[ext_resource type="Script" path="res://scripts/systems/hud.gd" id="1_hud"]
[node name="HUD" type="CanvasLayer"]
script = ExtResource("1_hud")
[node name="BackButton" type="Button" parent="."]
anchors_preset = 0
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
offset_left = 16.0
offset_top = 16.0
offset_right = 80.0
offset_bottom = 80.0
text = "←"
flat = false
[node name="MusicToggle" type="Button" parent="."]
anchors_preset = 1
anchor_left = 1.0
anchor_top = 0.0
anchor_right = 1.0
anchor_bottom = 0.0
offset_left = -80.0
offset_top = 16.0
offset_right = -16.0
offset_bottom = 80.0
text = "♪"
flat = false
[connection signal="pressed" from="BackButton" to="." method="_on_back_button_pressed"]
[connection signal="pressed" from="MusicToggle" to="." method="_on_music_toggle_pressed"]