fix(poc): resolve evaluator and review findings
- Add RectangleShape2D to Character and InteractiveObject collision areas - Fix HUD button signal connections in _ready() - Fix character_placed signal emitting global_position - Extract DEFAULT_DRAG_RADIUS constant in DragDropComponent - Type Variant on JSON parsed variable in SaveManager - Extract music symbol constants in HUD - Refactor duplicated drag input code in InputManager Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,8 +1,11 @@
|
|||||||
[gd_scene load_steps=3 format=3 uid="uid://cozypaw_char"]
|
[gd_scene load_steps=4 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/characters/character.gd" id="1_char"]
|
||||||
[ext_resource type="Script" path="res://scripts/systems/drag_drop_component.gd" id="2_drag"]
|
[ext_resource type="Script" path="res://scripts/systems/drag_drop_component.gd" id="2_drag"]
|
||||||
|
|
||||||
|
[sub_resource type="RectangleShape2D" id="RectangleShape2D_char"]
|
||||||
|
size = Vector2(64, 80)
|
||||||
|
|
||||||
[node name="Character" type="Node2D"]
|
[node name="Character" type="Node2D"]
|
||||||
script = ExtResource("1_char")
|
script = ExtResource("1_char")
|
||||||
character_id = "bunny_01"
|
character_id = "bunny_01"
|
||||||
@@ -44,3 +47,5 @@ script = ExtResource("2_drag")
|
|||||||
input_pickable = true
|
input_pickable = true
|
||||||
|
|
||||||
[node name="CollisionShape" type="CollisionShape2D" parent="CollisionArea"]
|
[node name="CollisionShape" type="CollisionShape2D" parent="CollisionArea"]
|
||||||
|
shape = SubResource("RectangleShape2D_char")
|
||||||
|
position = Vector2(0, -40)
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
[gd_scene load_steps=3 format=3 uid="uid://cozypaw_iobj"]
|
[gd_scene load_steps=4 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/objects/interactive_object.gd" id="1_iobj"]
|
||||||
[ext_resource type="Script" path="res://scripts/systems/drag_drop_component.gd" id="2_drag"]
|
[ext_resource type="Script" path="res://scripts/systems/drag_drop_component.gd" id="2_drag"]
|
||||||
|
|
||||||
|
[sub_resource type="RectangleShape2D" id="RectangleShape2D_obj"]
|
||||||
|
size = Vector2(48, 48)
|
||||||
|
|
||||||
[node name="InteractiveObject" type="Node2D"]
|
[node name="InteractiveObject" type="Node2D"]
|
||||||
script = ExtResource("1_iobj")
|
script = ExtResource("1_iobj")
|
||||||
object_id = "flower_01"
|
object_id = "flower_01"
|
||||||
@@ -26,3 +29,4 @@ script = ExtResource("2_drag")
|
|||||||
input_pickable = true
|
input_pickable = true
|
||||||
|
|
||||||
[node name="CollisionShape" type="CollisionShape2D" parent="CollisionArea"]
|
[node name="CollisionShape" type="CollisionShape2D" parent="CollisionArea"]
|
||||||
|
shape = SubResource("RectangleShape2D_obj")
|
||||||
|
|||||||
@@ -11,20 +11,30 @@ var _is_dragging: bool = false
|
|||||||
func _input(event: InputEvent) -> void:
|
func _input(event: InputEvent) -> void:
|
||||||
if event is InputEventScreenTouch:
|
if event is InputEventScreenTouch:
|
||||||
if event.pressed:
|
if event.pressed:
|
||||||
_is_dragging = true
|
_emit_drag_started(event.position)
|
||||||
drag_started.emit(event.position)
|
|
||||||
else:
|
else:
|
||||||
_is_dragging = false
|
_emit_drag_ended(event.position)
|
||||||
drag_ended.emit(event.position)
|
|
||||||
elif event is InputEventScreenDrag:
|
elif event is InputEventScreenDrag:
|
||||||
if _is_dragging:
|
if _is_dragging:
|
||||||
drag_moved.emit(event.position)
|
_emit_drag_moved(event.position)
|
||||||
elif event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT:
|
elif event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT:
|
||||||
if event.pressed:
|
if event.pressed:
|
||||||
_is_dragging = true
|
_emit_drag_started(event.position)
|
||||||
drag_started.emit(event.position)
|
|
||||||
else:
|
else:
|
||||||
_is_dragging = false
|
_emit_drag_ended(event.position)
|
||||||
drag_ended.emit(event.position)
|
|
||||||
elif event is InputEventMouseMotion and _is_dragging:
|
elif event is InputEventMouseMotion and _is_dragging:
|
||||||
drag_moved.emit(event.position)
|
_emit_drag_moved(event.position)
|
||||||
|
|
||||||
|
|
||||||
|
func _emit_drag_started(pos: Vector2) -> void:
|
||||||
|
_is_dragging = true
|
||||||
|
drag_started.emit(pos)
|
||||||
|
|
||||||
|
|
||||||
|
func _emit_drag_moved(pos: Vector2) -> void:
|
||||||
|
drag_moved.emit(pos)
|
||||||
|
|
||||||
|
|
||||||
|
func _emit_drag_ended(pos: Vector2) -> void:
|
||||||
|
_is_dragging = false
|
||||||
|
drag_ended.emit(pos)
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ func load_game() -> void:
|
|||||||
return
|
return
|
||||||
var raw: String = file.get_as_text()
|
var raw: String = file.get_as_text()
|
||||||
file.close()
|
file.close()
|
||||||
var parsed = JSON.parse_string(raw)
|
var parsed: Variant = JSON.parse_string(raw)
|
||||||
if parsed is Dictionary:
|
if parsed is Dictionary:
|
||||||
GameState.apply_save_data(parsed)
|
GameState.apply_save_data(parsed)
|
||||||
|
|
||||||
|
|||||||
@@ -25,4 +25,4 @@ func _on_drag_picked_up(_pos: Vector2) -> void:
|
|||||||
func _on_drag_released(pos: Vector2) -> void:
|
func _on_drag_released(pos: Vector2) -> void:
|
||||||
_is_held = false
|
_is_held = false
|
||||||
GameState.set_character_position(character_id, global_position)
|
GameState.set_character_position(character_id, global_position)
|
||||||
character_placed.emit(self, pos)
|
character_placed.emit(self, global_position)
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ signal drag_released(global_position: Vector2)
|
|||||||
|
|
||||||
const DRAG_Z_INDEX: int = 10
|
const DRAG_Z_INDEX: int = 10
|
||||||
const DRAG_SCALE: float = 1.1
|
const DRAG_SCALE: float = 1.1
|
||||||
|
const DEFAULT_DRAG_RADIUS: float = 64.0
|
||||||
|
|
||||||
@export var drag_target: Node2D
|
@export var drag_target: Node2D
|
||||||
|
|
||||||
@@ -73,8 +74,8 @@ func _is_position_over_target(screen_pos: Vector2) -> bool:
|
|||||||
var local_pos: Vector2 = drag_target.to_local(world_pos)
|
var local_pos: Vector2 = drag_target.to_local(world_pos)
|
||||||
var area: Area2D = drag_target.get_node_or_null("CollisionArea") as Area2D
|
var area: Area2D = drag_target.get_node_or_null("CollisionArea") as Area2D
|
||||||
if area == null:
|
if area == null:
|
||||||
return local_pos.length() < 64.0
|
return local_pos.length() < DEFAULT_DRAG_RADIUS
|
||||||
for child in area.get_children():
|
for child in area.get_children():
|
||||||
if child is CollisionShape2D and child.shape != null:
|
if child is CollisionShape2D and child.shape != null:
|
||||||
return child.shape.get_rect().has_point(local_pos)
|
return child.shape.get_rect().has_point(local_pos)
|
||||||
return local_pos.length() < 64.0
|
return local_pos.length() < DEFAULT_DRAG_RADIUS
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
## HUD — heads-up display with back button and music toggle.
|
## HUD — heads-up display with back button and music toggle.
|
||||||
extends CanvasLayer
|
extends CanvasLayer
|
||||||
|
|
||||||
|
const MUSIC_ON_SYMBOL: String = "♪"
|
||||||
|
const MUSIC_OFF_SYMBOL: String = "✕"
|
||||||
|
|
||||||
var _music_enabled: bool = true
|
var _music_enabled: bool = true
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
func _on_back_button_pressed() -> void:
|
func _on_back_button_pressed() -> void:
|
||||||
get_tree().quit()
|
get_tree().quit()
|
||||||
|
|
||||||
@@ -18,4 +17,4 @@ func _on_music_toggle_pressed() -> void:
|
|||||||
AudioManager.set_music_volume(volume)
|
AudioManager.set_music_volume(volume)
|
||||||
var btn: Button = get_node_or_null("MusicToggle") as Button
|
var btn: Button = get_node_or_null("MusicToggle") as Button
|
||||||
if btn != null:
|
if btn != null:
|
||||||
btn.text = "♪" if _music_enabled else "✕"
|
btn.text = MUSIC_ON_SYMBOL if _music_enabled else MUSIC_OFF_SYMBOL
|
||||||
|
|||||||
Reference in New Issue
Block a user