feat: Implement initial player character, main game scene, 'stop and go' arena, and touch controls.

This commit is contained in:
Yogi Wiguna
2026-03-25 10:50:32 +08:00
parent 7ca63fea00
commit d20dca4b25
9 changed files with 387 additions and 88 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

@@ -0,0 +1,41 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bv8hwsc2h586n"
path.s3tc="res://.godot/imported/Active_ground 10.jpg-042281519752a57c05c29f0d17ca57a5.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://assets/models/arena/stop_n_go/Active_ground 10.jpg"
dest_files=["res://.godot/imported/Active_ground 10.jpg-042281519752a57c05c29f0d17ca57a5.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0
+314 -41
View File
@@ -102,7 +102,22 @@
87,
88,
89,
90
90,
91,
92,
93,
94,
95,
96,
97,
98,
99,
100,
101,
102,
103,
104,
105
]
}
],
@@ -429,9 +444,9 @@
0.005972830578684807
],
"translation":[
-0.08269041031599045,
0.007447271607816219,
-0.05818251520395279
-0.08676587790250778,
-1.38808973133564e-05,
-0.04671066626906395
]
},
{
@@ -550,7 +565,7 @@
],
"translation":[
0.07523632794618607,
0.006656754296272993,
-0.0005740257911384106,
-0.08518262207508087
]
},
@@ -570,7 +585,7 @@
],
"translation":[
0.014871690422296524,
0.006656754296272993,
-0.0005740257911384106,
-0.08443422615528107
]
},
@@ -591,7 +606,7 @@
"translation":[
-0.029131930321455002,
0.002036990597844124,
-0.07459437102079391
-0.07124247401952744
]
},
{
@@ -611,7 +626,7 @@
"translation":[
-0.013141944073140621,
0.0034445375204086304,
-0.07222942262887955
-0.06887752562761307
]
},
{
@@ -631,7 +646,7 @@
"translation":[
0.040613725781440735,
0.004754998721182346,
-0.07906124740839005
-0.07597747445106506
]
},
{
@@ -651,7 +666,7 @@
"translation":[
0.05421815812587738,
0.0025947140529751778,
-0.07787599414587021
-0.07479222118854523
]
},
{
@@ -691,7 +706,7 @@
"translation":[
0.028093654662370682,
0.004464345518499613,
-0.07301106303930283
-0.06992729008197784
]
},
{
@@ -711,7 +726,7 @@
"translation":[
-0.044556908309459686,
0.00300344405695796,
-0.06013080105185509
-0.05677890405058861
]
},
{
@@ -731,7 +746,7 @@
"translation":[
0.04875577241182327,
0.0025947140529751778,
-0.07432270050048828
-0.0712389275431633
]
},
{
@@ -771,7 +786,7 @@
"translation":[
-0.06296971440315247,
0.0025947140529751778,
-0.06111462041735649
-0.05776272341609001
]
},
{
@@ -908,12 +923,12 @@
0.9863263368606567
],
"scale":[
0.004883195273578167,
0.004883196670562029,
0.004883195273578167
0.003991073928773403,
0.003991075325757265,
0.003991073928773403
],
"translation":[
-0.01891900599002838,
-0.019923998042941093,
-0.0001821359619498253,
0.02468346431851387
]
@@ -928,12 +943,12 @@
0.9863263368606567
],
"scale":[
0.004809297621250153,
0.004809298552572727,
0.004809297621250153
0.0040076617151498795,
0.004007662646472454,
0.0040076617151498795
],
"translation":[
0.06013767421245575,
0.06074105575680733,
-0.0001821359619498253,
-0.024954374879598618
]
@@ -1042,15 +1057,15 @@
"mesh":36,
"name":"Forest_Tree.028",
"rotation":[
-0.6598230004310608,
-0.3566572964191437,
-0.3308103382587433,
0.5727074146270752
-0.8144026398658752,
-0.4473532736301422,
-0.190983384847641,
0.31646281480789185
],
"scale":[
-0.003610247978940606,
-0.003582216566428542,
-0.002201348775997758
-0.0022013490088284016
],
"translation":[
-0.009595382958650589,
@@ -1058,6 +1073,166 @@
-0.045792993158102036
]
},
{
"mesh":25,
"name":"Sphere.001",
"rotation":[
0.7071068286895752,
0,
0,
0.7071068286895752
],
"scale":[
0.0033437993843108416,
0.0018933492247015238,
0.0026772490236908197
],
"translation":[
-0.01023787073791027,
0.002657234901562333,
-0.0012814961373806
]
},
{
"mesh":25,
"name":"Sphere.008",
"rotation":[
0.5,
0.5,
-0.5,
0.4999999701976776
],
"scale":[
0.0033437993843108416,
0.0018933492247015238,
0.0026772490236908197
],
"translation":[
-0.044048383831977844,
0.002657234901562333,
0.03200124576687813
]
},
{
"mesh":25,
"name":"Sphere.009",
"rotation":[
0.5,
0.5,
-0.5,
0.4999999701976776
],
"scale":[
0.0033437993843108416,
0.0018933492247015238,
0.0026772490236908197
],
"translation":[
0.004850704222917557,
0.002657234901562333,
0.01692376472055912
]
},
{
"mesh":25,
"name":"Sphere.010",
"rotation":[
0.7071068286895752,
0,
0,
0.7071068286895752
],
"scale":[
0.0033437993843108416,
0.0018933492247015238,
0.0026772490236908197
],
"translation":[
0.07054690271615982,
0.002657234901562333,
-0.04978448897600174
]
},
{
"mesh":25,
"name":"Sphere.011",
"rotation":[
0.5,
0.5,
-0.5,
0.4999999701976776
],
"scale":[
0.0033437993843108416,
0.0018933492247015238,
0.0026772490236908197
],
"translation":[
0.03449374809861183,
0.002657234901562333,
-0.04158128798007965
]
},
{
"mesh":25,
"name":"Sphere.012",
"rotation":[
0.5,
0.5,
-0.5,
0.4999999701976776
],
"scale":[
0.0033437993843108416,
0.0018933492247015238,
0.0026772490236908197
],
"translation":[
0.0856354832649231,
0.002657234901562333,
-0.02710219845175743
]
},
{
"mesh":25,
"name":"Sphere.013",
"rotation":[
0.7071068286895752,
0,
0,
0.7071068286895752
],
"scale":[
0.0033437993843108416,
0.0018933492247015238,
0.0026772490236908197
],
"translation":[
0.07874570041894913,
0.002657234901562333,
-0.00033884868025779724
]
},
{
"mesh":25,
"name":"Sphere.014",
"rotation":[
0.5,
0.5,
-0.5,
0.4999999701976776
],
"scale":[
0.0033437993843108416,
0.0018933492247015238,
0.0026772490236908197
],
"translation":[
0.0856354832649231,
0.002657234901562333,
-0.04287939518690109
]
},
{
"mesh":37,
"name":"Circle.002",
@@ -1142,7 +1317,7 @@
1
],
"translation":[
0.0839901715517044,
0.08539150655269623,
0.0004999616649001837,
-0.0214134082198143
]
@@ -1286,7 +1461,7 @@
],
"translation":[
-0.044300541281700134,
0.005469377618283033,
0.003274786053225398,
0.03818664327263832
]
},
@@ -1360,7 +1535,7 @@
],
"translation":[
0.00538861146196723,
0.005456879269331694,
0.0020697901491075754,
0.0008814841858111322
]
},
@@ -1414,7 +1589,7 @@
],
"translation":[
-0.04402609169483185,
0.005469372496008873,
0.0020822833757847548,
0.00013192872575018555
]
},
@@ -1509,7 +1684,7 @@
"translation":[
0.07345359772443771,
0.0027638087049126625,
-0.05261143296957016
-0.05062336102128029
]
},
{
@@ -1528,8 +1703,8 @@
],
"translation":[
0.08524549007415771,
0.005318331997841597,
-0.051953308284282684
0.0023972420021891594,
-0.04996523633599281
]
},
{
@@ -1549,7 +1724,7 @@
"translation":[
0.07182701677083969,
0.0005243827472440898,
-0.052252672612667084
-0.05026460066437721
]
},
{
@@ -1564,7 +1739,7 @@
"translation":[
0.03458728641271591,
0.0029167381580919027,
-0.04451630637049675
-0.04306700453162193
]
},
{
@@ -1577,8 +1752,8 @@
],
"translation":[
0.03583082556724548,
0.005376724526286125,
-0.05042971298098564
0.0013983789831399918,
-0.048980411142110825
]
},
{
@@ -1598,7 +1773,105 @@
"translation":[
0.04634865000844002,
0.0010609966702759266,
-0.051983579993247986
-0.05053427815437317
]
},
{
"mesh":56,
"name":"Circle.012",
"scale":[
0.800000011920929,
0.800000011920929,
0.800000011920929
],
"translation":[
-0.04402609169483185,
0.0006713897455483675,
0.01722167618572712
]
},
{
"mesh":49,
"name":"Circle.034",
"scale":[
0.800000011920929,
0.800000011920929,
0.800000011920929
],
"translation":[
-0.027252083644270897,
0.003274786053225398,
0.03818664327263832
]
},
{
"mesh":49,
"name":"Circle.036",
"scale":[
0.800000011920929,
0.800000011920929,
0.800000011920929
],
"translation":[
-0.011415235698223114,
0.003274786053225398,
0.03818664327263832
]
},
{
"mesh":56,
"name":"Circle.037",
"scale":[
0.800000011920929,
0.800000011920929,
0.800000011920929
],
"translation":[
-0.02775517851114273,
0.0006713897455483675,
-0.00160285085439682
]
},
{
"mesh":56,
"name":"Circle.014",
"scale":[
0.800000011920929,
0.800000011920929,
0.800000011920929
],
"translation":[
0.03449495509266853,
0.0006713897455483675,
-0.025325963273644447
]
},
{
"mesh":49,
"name":"Circle.038",
"scale":[
0.800000011920929,
0.800000011920929,
0.800000011920929
],
"translation":[
0.06272707879543304,
0.003274786053225398,
-0.0008780453354120255
]
},
{
"mesh":56,
"name":"Circle.040",
"scale":[
0.5869826674461365,
0.5869826674461365,
0.5869826674461365
],
"translation":[
0.05302959680557251,
0.0006713897455483675,
-0.0497237890958786
]
},
{
@@ -3214,8 +3487,8 @@
},
{
"mimeType":"image/jpeg",
"name":"Active_ground 8",
"uri":"Active_ground%208.jpg"
"name":"Active_ground 10",
"uri":"Active_ground%2010.jpg"
},
{
"mimeType":"image/png",
+1
View File
@@ -410,6 +410,7 @@ pivot_offset = Vector2(960, 477.5)
texture = ExtResource("23_mfqh2")
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="StopPhase" unique_id=1499304863]
z_index = 100
position = Vector2(671, 364)
sprite_frames = ExtResource("24_u10lt")
animation = &"stop-phase"
Binary file not shown.
+9 -11
View File
@@ -1366,10 +1366,7 @@ offset_bottom = 56.0
grow_horizontal = 0
text = "⚙"
[node name="TouchControls" type="CanvasLayer" parent="." unique_id=1390485948]
script = ExtResource("touch_manager")
[node name="TouchControls" type="Control" parent="TouchControls" unique_id=1539594058]
[node name="TouchControls" type="Control" parent="." unique_id=1539594058]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
@@ -1379,8 +1376,9 @@ grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
theme = ExtResource("18_pm3ni")
script = ExtResource("touch_manager")
[node name="VirtualJoystick" type="Control" parent="TouchControls/TouchControls" unique_id=1983608919]
[node name="VirtualJoystick" type="Control" parent="TouchControls" unique_id=1983608919]
visible = false
layout_mode = 1
anchors_preset = 2
@@ -1393,7 +1391,7 @@ offset_bottom = -120.0
grow_vertical = 0
script = ExtResource("virtual_joystick")
[node name="PowerBarBtn" type="VBoxContainer" parent="TouchControls/TouchControls" unique_id=278736451]
[node name="PowerBarBtn" type="VBoxContainer" parent="TouchControls" unique_id=278736451]
layout_mode = 0
offset_left = 47.858246
offset_top = 98.014656
@@ -1402,7 +1400,7 @@ offset_bottom = 265.01465
rotation = -0.10297442
theme_override_constants/separation = 10
[node name="AttackModeBtn" type="Button" parent="TouchControls/TouchControls/PowerBarBtn" unique_id=1380511463]
[node name="AttackModeBtn" type="Button" parent="TouchControls/PowerBarBtn" unique_id=1380511463]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
@@ -1412,7 +1410,7 @@ flat = true
icon_alignment = 1
expand_icon = true
[node name="TektonGrabBtn" type="Button" parent="TouchControls/TouchControls/PowerBarBtn" unique_id=2097928368]
[node name="TektonGrabBtn" type="Button" parent="TouchControls/PowerBarBtn" unique_id=2097928368]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
@@ -1421,7 +1419,7 @@ flat = true
icon_alignment = 1
expand_icon = true
[node name="InteractionBtn" type="VBoxContainer" parent="TouchControls/TouchControls" unique_id=1738242916]
[node name="InteractionBtn" type="VBoxContainer" parent="TouchControls" unique_id=1738242916]
layout_mode = 0
offset_left = 131.0
offset_top = 86.999985
@@ -1430,7 +1428,7 @@ offset_bottom = 254.0
rotation = -0.10297442
theme_override_constants/separation = 10
[node name="GrabBtn" type="Button" parent="TouchControls/TouchControls/InteractionBtn" unique_id=914810452]
[node name="GrabBtn" type="Button" parent="TouchControls/InteractionBtn" unique_id=914810452]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
@@ -1440,7 +1438,7 @@ flat = true
icon_alignment = 1
expand_icon = true
[node name="PutBtn" type="Button" parent="TouchControls/TouchControls/InteractionBtn" unique_id=1027790362]
[node name="PutBtn" type="Button" parent="TouchControls/InteractionBtn" unique_id=1027790362]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
+1 -1
View File
@@ -142,7 +142,7 @@ transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 1
visible = false
billboard = 1
sprite_frames = ExtResource("10_y4r1p")
animation = &"stop-phase"
animation = &"wall-initiator"
[node name="receiver_skill_stunned" type="AnimatedSprite3D" parent="." unique_id=56953581]
transform = Transform3D(0.5, 0, 0, 0, -2.1855694e-08, -0.5, 0, 0.5, -2.1855694e-08, 0, 1.5653763, 0)
+2 -2
View File
@@ -185,9 +185,9 @@ func _update_stop_timer_visuals():
stop_timer_node.visible = true
if current_phase == Phase.GO:
# GO Phase: All dim unless in last 6 seconds (lights up 6, 4, 2s)
# GO Phase: All dim unless in last 3 seconds (lights up 3, 2, 1s)
for i in range(stop_segments.size()):
var threshold = 6.0 - (i * 2.0)
var threshold = 3.0 - (i * 1.0)
if phase_timer <= threshold:
stop_segments[i].add_theme_stylebox_override("panel", lit_style)
else:
+19 -33
View File
@@ -1,4 +1,4 @@
extends CanvasLayer
extends Control
# TouchControlsManager - Manages mobile touch controls including virtual joystick and action buttons
@@ -102,20 +102,9 @@ func _on_player_child_to_find_powerup(node):
func _create_touch_ui():
print("[TouchControls] Creating/Finding touch UI...")
# Use layer 10 - above regular UI but below pause menu
layer = 10
# Check if container already exists (added in scene)
var container = get_node_or_null("TouchControls")
if not container:
# Create main container if missing
container = Control.new()
container.name = "TouchControls"
container.set_anchors_preset(Control.PRESET_FULL_RECT)
container.mouse_filter = Control.MOUSE_FILTER_PASS # Pass input to children
add_child(container)
else:
print("[TouchControls] Found existing TouchControls container")
var container = self
# Helper to find or create control
var find_or_create_joystick = func():
@@ -149,29 +138,26 @@ func _create_touch_ui():
# --- Actions Containers ---
power_bar_container = container.get_node_or_null("PowerBarBtn")
if not power_bar_container:
power_bar_container = container.get_node_or_null("ActionsBtn") # Fallback
interaction_container = container.get_node_or_null("InteractionBtn")
# Create containers if missing (runtime dynamic creation)
if not power_bar_container:
power_bar_container = Control.new()
power_bar_container.name = "PowerBarBtn"
power_bar_container.set_anchors_preset(Control.PRESET_FULL_RECT)
power_bar_container.mouse_filter = Control.MOUSE_FILTER_PASS
container.add_child(power_bar_container)
else:
print("[TouchControls] Found existing PowerBarBtn container")
if not interaction_container:
interaction_container = Control.new()
interaction_container.name = "InteractionBtn"
interaction_container.set_anchors_preset(Control.PRESET_FULL_RECT)
interaction_container.mouse_filter = Control.MOUSE_FILTER_PASS
container.add_child(interaction_container)
else:
print("[TouchControls] Found existing InteractionBtn container")
#if not power_bar_container:
#power_bar_container = Control.new()
#power_bar_container.name = "PowerBarBtn"
#power_bar_container.set_anchors_preset(Control.PRESET_FULL_RECT)
#power_bar_container.mouse_filter = Control.MOUSE_FILTER_PASS
#container.add_child(power_bar_container)
#else:
#print("[TouchControls] Found existing PowerBarBtn container")
#
#if not interaction_container:
#interaction_container = Control.new()
#interaction_container.name = "InteractionBtn"
#interaction_container.set_anchors_preset(Control.PRESET_FULL_RECT)
#interaction_container.mouse_filter = Control.MOUSE_FILTER_PASS
#container.add_child(interaction_container)
#else:
#print("[TouchControls] Found existing InteractionBtn container")
# Style/Align Containers
if power_bar_container is BoxContainer: