Implement Phase 6 features for Stickman Editor

- Updated BUGS.md with new issues related to selection bounding box, touchpad panning speed, and zooming behavior.
- Enhanced PROJECT.md with detailed specifications for touchpad controls, recent colors in the color picker, and a status bar for project information.
- Modified project.godot to update compatibility version to 4.7.
- Added a status bar in stickman_editor.tscn to display cursor coordinates and snap status.
- Updated body_part_panel.gd to handle recent colors and cursor detection over drawing areas.
- Enhanced stickman_editor.gd to manage cursor coordinates display and recent colors tracking.
- Improved whole_stickman_preview.gd to render selection gizmos on top of other parts.
- Created master_rig.tscn for the stickman rig structure with bones and IK targets.
- Developed master_rig_builder.gd to automate the rig building process with remote transforms and IK modifications.
This commit is contained in:
2026-08-14 21:49:06 -04:00
parent b97bc145e4
commit 28e8798021
11 changed files with 647 additions and 42 deletions
+182
View File
@@ -0,0 +1,182 @@
[gd_scene format=3 uid="uid://dr5ef3l2var2s"]
[sub_resource type="GDScript" id="GDScript_f0s26"]
script/source = "@tool
extends Node2D
@export var radius : float = 100.0:
set(value):
radius = value
queue_redraw()
@export var color : Color = Color.WHITE:
set(value):
color = value
queue_redraw()
func _draw():
draw_circle(Vector2(0,0), radius, color)
"
[sub_resource type="SkeletonModification2DTwoBoneIK" id="SkeletonModification2DTwoBoneIK_yvxej"]
target_nodepath = NodePath("../IK_Targets/Right_Hand")
flip_bend_direction = true
joint_one_bone_idx = 4
joint_one_bone2d_node = NodePath("Torso/RightUpperArm")
joint_two_bone_idx = 5
joint_two_bone2d_node = NodePath("Torso/RightUpperArm/RightLowerArm")
[sub_resource type="SkeletonModification2DTwoBoneIK" id="SkeletonModification2DTwoBoneIK_f0s26"]
target_nodepath = NodePath("../IK_Targets/Left_Hand")
joint_one_bone_idx = 2
joint_one_bone2d_node = NodePath("Torso/LeftUpperArm")
joint_two_bone_idx = 3
joint_two_bone2d_node = NodePath("Torso/LeftUpperArm/LeftLowerArm")
[sub_resource type="SkeletonModificationStack2D" id="SkeletonModificationStack2D_j4hao"]
enabled = true
modification_count = 2
modifications/0 = SubResource("SkeletonModification2DTwoBoneIK_yvxej")
modifications/1 = SubResource("SkeletonModification2DTwoBoneIK_f0s26")
[node name="Master" type="Node2D" unique_id=319103476]
[node name="Body" type="Node2D" parent="." unique_id=327811712]
[node name="Head" type="Node2D" parent="Body" unique_id=864822355]
position = Vector2(704, 104)
scale = Vector2(0.99999964, 0.99999964)
script = SubResource("GDScript_f0s26")
[node name="Body" type="Line2D" parent="Body" unique_id=1290443463]
position = Vector2(704, 184)
points = PackedVector2Array(0, 0, 0, 400)
width = 16.0
default_color = Color(0.445488, 0.445488, 0.445488, 1)
[node name="LeftUpperLeg" type="Line2D" parent="Body" unique_id=199373156]
position = Vector2(703.99994, 576)
rotation = 0.5235988
points = PackedVector2Array(0, 0, 0, 200)
width = 16.0
default_color = Color(0.445488, 0.445488, 0.445488, 1)
[node name="RightUpperLeg" type="Line2D" parent="Body" unique_id=1396556308]
position = Vector2(703.99994, 576)
rotation = -0.5235988
points = PackedVector2Array(0, 0, 0, 200)
width = 16.0
default_color = Color(0.445488, 0.445488, 0.445488, 1)
[node name="LeftLowerLeg" type="Line2D" parent="Body" unique_id=1590485904]
position = Vector2(608, 744)
points = PackedVector2Array(0, 0, 0, 200)
width = 16.0
default_color = Color(0.445488, 0.445488, 0.445488, 1)
[node name="RightLowerLeg" type="Line2D" parent="Body" unique_id=29203948]
position = Vector2(800, 744)
points = PackedVector2Array(0, 0, 0, 200)
width = 16.0
default_color = Color(0.445488, 0.445488, 0.445488, 1)
[node name="LeftUpperArm" type="Line2D" parent="Body" unique_id=744524157]
position = Vector2(704, 328)
rotation = 1.4909883
scale = Vector2(0.9999922, 0.9999922)
points = PackedVector2Array(0, 0, 0, 175)
width = 16.0
default_color = Color(0.445488, 0.445488, 0.445488, 1)
[node name="RightUpperArm" type="Line2D" parent="Body" unique_id=1593646765]
position = Vector2(704, 328)
rotation = -1.4639877
scale = Vector2(0.99998343, 0.99998343)
points = PackedVector2Array(0, 0, 0, 175)
width = 16.0
default_color = Color(0.445488, 0.445488, 0.445488, 1)
[node name="LeftLowerArm" type="Line2D" parent="Body" unique_id=2142117097]
position = Vector2(536.536, 341.3934)
rotation = 3.0600982
scale = Vector2(0.99998534, 0.99998534)
points = PackedVector2Array(0, 0, 0, 200)
width = 16.0
default_color = Color(0.445488, 0.445488, 0.445488, 1)
[node name="RightLowerArm" type="Line2D" parent="Body" unique_id=1200980480]
position = Vector2(871.03986, 345.90945)
rotation = -2.8942726
scale = Vector2(0.9999745, 0.9999745)
points = PackedVector2Array(0, 0, 0, 200)
width = 16.0
default_color = Color(0.445488, 0.445488, 0.445488, 1)
[node name="Skeleton2D" type="Skeleton2D" parent="." unique_id=1854735445]
modification_stack = SubResource("SkeletonModificationStack2D_j4hao")
[node name="Torso" type="Bone2D" parent="Skeleton2D" unique_id=744339938]
position = Vector2(704, 576)
rest = Transform2D(1, 0, 0, 1, 704, 576)
[node name="Head" type="Bone2D" parent="Skeleton2D/Torso" unique_id=1487357366]
position = Vector2(0, -392)
rest = Transform2D(1, 0, 0, 1, 0, -392)
[node name="LeftUpperArm" type="Bone2D" parent="Skeleton2D/Torso" unique_id=1840957808]
position = Vector2(0, -248)
rotation = -0.7853982
scale = Vector2(0.9999999, 0.9999999)
rest = Transform2D(1, 0, 0, 1, -168, -248)
metadata/_local_pose_override_enabled_ = true
[node name="LeftLowerArm" type="Bone2D" parent="Skeleton2D/Torso/LeftUpperArm" unique_id=721380545]
position = Vector2(-118.79398, -118.793945)
rotation = -1.5707964
scale = Vector2(0.9999999, 0.9999999)
rest = Transform2D(1, 0, 0, 1, -136, -136)
auto_calculate_length_and_angle = false
length = 200.0
bone_angle = 0.0
metadata/_local_pose_override_enabled_ = true
[node name="RemoteTransform2D" type="RemoteTransform2D" parent="Skeleton2D/Torso/LeftUpperArm/LeftLowerArm" unique_id=1189277122]
position = Vector2(3.0517578e-05, 1.9073486e-06)
rotation = 4.712389
remote_path = NodePath("../../../../../Body/LeftLowerArm")
[node name="RemoteTransform2D" type="RemoteTransform2D" parent="Skeleton2D/Torso/LeftUpperArm" unique_id=1110605862]
rotation = 2.3561945
remote_path = NodePath("../../../../Body/LeftUpperArm")
[node name="RightUpperArm" type="Bone2D" parent="Skeleton2D/Torso" unique_id=36616186]
position = Vector2(0, -248)
scale = Vector2(0.9999998, 0.9999998)
rest = Transform2D(0.9999999, 0, 0, 0.9999999, 0, -248)
metadata/_local_pose_override_enabled_ = true
[node name="RightLowerArm" type="Bone2D" parent="Skeleton2D/Torso/RightUpperArm" unique_id=1018820563]
position = Vector2(168, 0)
rotation = -0.7853978
scale = Vector2(0.9999999, 0.9999999)
rest = Transform2D(-0.9999999, 1.5099579e-07, -1.5099579e-07, -0.9999999, 168, 0)
auto_calculate_length_and_angle = false
length = 200.0
bone_angle = 0.0
metadata/_local_pose_override_enabled_ = true
[node name="RemoteTransform2D" type="RemoteTransform2D" parent="Skeleton2D/Torso/RightUpperArm/RightLowerArm" unique_id=1282597655]
rotation = -1.5707964
remote_path = NodePath("../../../../../Body/RightLowerArm")
[node name="RemoteTransform2D" type="RemoteTransform2D" parent="Skeleton2D/Torso/RightUpperArm" unique_id=975221467]
rotation = -1.5707964
remote_path = NodePath("../../../../Body/RightUpperArm")
[node name="IK_Targets" type="Node2D" parent="." unique_id=1089334064]
[node name="Right_Hand" type="Marker2D" parent="IK_Targets" unique_id=1785254130]
position = Vector2(920, 152)
[node name="Left_Hand" type="Marker2D" parent="IK_Targets" unique_id=1085197042]
position = Vector2(496, 144)