Added controlable movement platform

This commit is contained in:
2026-06-19 22:03:35 +03:00
parent 2b12373ed8
commit 24481b1f33
6 changed files with 68 additions and 28 deletions
+13 -13
View File
@@ -268,12 +268,12 @@ animations = [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_v0w7w")
}],
"loop": true,
"loop": 1,
"name": &"color_switching",
"speed": 10.0
}, {
"frames": [],
"loop": true,
"loop": 1,
"name": &"default",
"speed": 5.0
}, {
@@ -308,7 +308,7 @@ animations = [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_ml711")
}],
"loop": true,
"loop": 1,
"name": &"hiding",
"speed": 10.0
}, {
@@ -331,7 +331,7 @@ animations = [{
"duration": 3.0,
"texture": SubResource("AtlasTexture_uxm1i")
}],
"loop": true,
"loop": 1,
"name": &"moving_down_active",
"speed": 10.0
}, {
@@ -339,7 +339,7 @@ animations = [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_yj8cj")
}],
"loop": true,
"loop": 1,
"name": &"moving_down_static",
"speed": 10.0
}, {
@@ -362,7 +362,7 @@ animations = [{
"duration": 3.0,
"texture": SubResource("AtlasTexture_w5ro3")
}],
"loop": true,
"loop": 1,
"name": &"moving_left_active",
"speed": 10.0
}, {
@@ -370,7 +370,7 @@ animations = [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_5xqsc")
}],
"loop": true,
"loop": 1,
"name": &"moving_left_static",
"speed": 10.0
}, {
@@ -393,7 +393,7 @@ animations = [{
"duration": 3.0,
"texture": SubResource("AtlasTexture_qiapf")
}],
"loop": true,
"loop": 1,
"name": &"moving_right_active",
"speed": 10.0
}, {
@@ -401,7 +401,7 @@ animations = [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_s6swh")
}],
"loop": true,
"loop": 1,
"name": &"moving_right_static",
"speed": 10.0
}, {
@@ -424,7 +424,7 @@ animations = [{
"duration": 3.0,
"texture": SubResource("AtlasTexture_n8r07")
}],
"loop": true,
"loop": 1,
"name": &"moving_up_active",
"speed": 10.0
}, {
@@ -432,7 +432,7 @@ animations = [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_vri0m")
}],
"loop": true,
"loop": 1,
"name": &"moving_up_static",
"speed": 10.0
}, {
@@ -467,7 +467,7 @@ animations = [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_egipa")
}],
"loop": true,
"loop": 1,
"name": &"self_moving",
"speed": 10.0
}, {
@@ -484,7 +484,7 @@ animations = [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_txrl7")
}],
"loop": true,
"loop": 1,
"name": &"timer",
"speed": 10.0
}]
+28 -10
View File
@@ -21,10 +21,14 @@ const ANIMATION_MAP : Dictionary[Type, Dictionary] = {
@export var is_loop := false
@export var type := Type.SelfMoving
@export var path : Path2D
@export var path_follow : PathFollow2D
@export_range(0, 25, 0.1) var speed : float = 10.0
@export var type := Type.SelfMoving:
set(value):
type = value
if is_node_ready():
_initialize_platform()
var is_moving := false
@@ -32,13 +36,26 @@ var is_reverse := false
var tween: Tween
@onready var restart_timer : Timer = $RestartTimer
@onready var invert_timer : Timer = $InvertTimer
func _ready() -> void:
super._ready()
_initialize_platform()
func toggle() -> void:
if type == Type.SelfMoving: return
if is_moving:
_stop_movement()
else:
_start_movement()
func _initialize_platform() -> void:
if not Engine.is_editor_hint() and type == Type.SelfMoving:
start_movement()
_start_movement()
else:
_select_animation()
@@ -49,12 +66,12 @@ func _select_animation() -> void:
icon_sprite.play(ANIMATION_SELF_MOVING)
return
var direction : String = ANIMATION_MAP[type][is_reverse]
var direction : String = ANIMATION_MAP[type][not is_reverse]
var suffix := ANIMATION_ACTIVE_SUFFIX if is_moving else ANIMATION_STATIC_SUFFIX
icon_sprite.play(ANIMATION_MOVING_PREFIX + direction + suffix)
func start_movement() -> void:
func _start_movement() -> void:
is_moving = true
if tween and tween.is_running():
tween.kill()
@@ -67,22 +84,23 @@ func start_movement() -> void:
tween = create_tween()
var target_ratio := 0.0 if is_reverse else 1.0
tween.tween_property(path_follow, "progress_ratio", target_ratio, duration)
tween.finished.connect(_restart_movement)
tween.finished.connect(_invert_movement)
func stop_movement() -> void:
func _stop_movement() -> void:
is_moving = false
if tween and tween.is_running():
tween.kill()
if not invert_timer.is_stopped():
invert_timer.stop()
_select_animation()
func _restart_movement() -> void:
is_moving = false
func _invert_movement() -> void:
if is_loop:
path_follow.progress_ratio = 0
else:
is_reverse = not is_reverse
_select_animation()
restart_timer.start()
invert_timer.start()
+4 -4
View File
@@ -23,8 +23,8 @@ size = Vector2(16, 7)
[node name="MovingPlatform" unique_id=137546339 instance=ExtResource("1_aar0q")]
script = ExtResource("2_c250g")
is_loop = false
type = 0
speed = 10.0
type = 0
[node name="Sprite2D" parent="." index="0" unique_id=264863796]
texture = SubResource("ViewportTexture_aar0q")
@@ -34,13 +34,13 @@ material = SubResource("ShaderMaterial_c250g")
[node name="IconSprite" parent="SubViewport" parent_id_path=PackedInt32Array(226200089) index="1" unique_id=1917841765]
animation = &"self_moving"
frame_progress = 0.80246073
frame_progress = 0.14216548
[node name="CollisionShape2D" parent="." index="2" unique_id=175449124]
shape = SubResource("RectangleShape2D_7t213")
[node name="RestartTimer" type="Timer" parent="." index="3" unique_id=1793755125]
[node name="InvertTimer" type="Timer" parent="." index="3" unique_id=1793755125]
wait_time = 3.0
one_shot = true
[connection signal="timeout" from="RestartTimer" to="." method="start_movement"]
[connection signal="timeout" from="InvertTimer" to="." method="_start_movement"]