2 Commits

Author SHA1 Message Date
ruslan 24481b1f33 Added controlable movement platform 2026-06-19 22:03:35 +03:00
ruslan 2b12373ed8 Minor fix 2026-06-17 22:04:06 +03:00
8 changed files with 85 additions and 36 deletions
+1 -1
View File
@@ -12,8 +12,8 @@ const ANIMATION_NAME = "final_cutscene"
func _ready() -> void:
super._ready()
animation_player.play("hide_cutscene_elements")
super._ready()
func _on_level_end_entered(body: Node2D) -> void:
File diff suppressed because one or more lines are too long
+2
View File
@@ -8,3 +8,5 @@ func _ready() -> void:
$Objects/LeverPlatform.switching.connect($Platforms/ColorSwitchingPlatform.toggle)
$Objects/LeverPlatform.switching.connect($ConnectionCables/ConnectionCablePlatform.toggle)
$Objects/LeverMoving.switching.connect($Platforms/SelfMovingPlatform.toggle)
+20
View File
@@ -6,6 +6,7 @@
[ext_resource type="PackedScene" uid="uid://dq3080605jqta" path="res://game/objects/interactive/connection_cable.tscn" id="3_a50fq"]
[ext_resource type="PackedScene" uid="uid://b3kyqvuxmfn8f" path="res://game/objects/decorative/fireplace.tscn" id="3_tuvkr"]
[ext_resource type="PackedScene" uid="uid://jab32eoyc523" path="res://game/platform/moving_platform.tscn" id="4_h1708"]
[ext_resource type="Shader" uid="uid://dbsrm43wcolg4" path="res://game/shaders/connection_cable.gdshader" id="4_lxcjr"]
[ext_resource type="PackedScene" uid="uid://g0n5npbt3hb2" path="res://game/doors/circle_door.tscn" id="4_yrqjd"]
[ext_resource type="PackedScene" uid="uid://cojxqx5al7kyv" path="res://game/doors/locked_door.tscn" id="5_1skah"]
[ext_resource type="PackedScene" uid="uid://bwmd8w677p7k3" path="res://game/platform/color_switching_platform.tscn" id="5_a50fq"]
@@ -26,6 +27,20 @@
[ext_resource type="PackedScene" uid="uid://cutjutvd8dqqc" path="res://game/characters/enemies/black_cultist.tscn" id="19_ohfy3"]
[ext_resource type="PackedScene" uid="uid://bv2gahb4wxgb1" path="res://game/characters/enemies/white_cultist.tscn" id="20_rt0xo"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_lxcjr"]
resource_local_to_scene = true
shader = ExtResource("4_lxcjr")
shader_parameter/glow_interval = 1.0
shader_parameter/glow_radius = 1.0
shader_parameter/travel_time = 5.0
[sub_resource type="ShaderMaterial" id="ShaderMaterial_te8eb"]
resource_local_to_scene = true
shader = ExtResource("4_lxcjr")
shader_parameter/glow_interval = 1.0
shader_parameter/glow_radius = 1.0
shader_parameter/travel_time = 5.0
[sub_resource type="Curve2D" id="Curve2D_h1708"]
_data = {
"points": PackedVector2Array(0, 0, 0, 0, 229, -75, 0, 0, 0, 0, 47, -75)
@@ -36,10 +51,12 @@ point_count = 2
script = ExtResource("2_a2sw7")
[node name="ConnectionCableDoor" parent="ConnectionCables" parent_id_path=PackedInt32Array(279521385) index="0" unique_id=1234500644 instance=ExtResource("3_a50fq")]
material = SubResource("ShaderMaterial_lxcjr")
position = Vector2(208, 13)
points = PackedVector2Array(0, 0, 92, 0, 92, -49, 199, -49)
[node name="ConnectionCablePlatform" parent="ConnectionCables" parent_id_path=PackedInt32Array(279521385) index="1" unique_id=561577961 instance=ExtResource("3_a50fq")]
material = SubResource("ShaderMaterial_te8eb")
position = Vector2(520, -35)
points = PackedVector2Array(0, 0, 0, -76, -454, -76, -454, 3)
@@ -113,6 +130,9 @@ position = Vector2(208, 8)
[node name="LeverPlatform" parent="Objects" parent_id_path=PackedInt32Array(1320033435) index="6" unique_id=705939742 instance=ExtResource("13_00l78")]
position = Vector2(520, -40)
[node name="LeverMoving" parent="Objects" parent_id_path=PackedInt32Array(1320033435) index="7" unique_id=1003631621 instance=ExtResource("13_00l78")]
position = Vector2(155, 8)
[node name="BookPickup" parent="Pickups" parent_id_path=PackedInt32Array(1113969064) index="0" unique_id=261982174 instance=ExtResource("7_fq0h3")]
position = Vector2(1216, 86)
+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"]
+1 -1
View File
@@ -16,7 +16,7 @@ compatibility/default_parent_skeleton_in_mesh_instance_3d=true
config/name="Cult Manor"
run/main_scene="uid://c4iica45gnke0"
config/features=PackedStringArray("4.6", "GL Compatibility")
config/features=PackedStringArray("4.7", "GL Compatibility")
boot_splash/bg_color=Color(0, 0, 0, 1)
boot_splash/show_image=false
config/icon="uid://cfhk8xk856i1u"