mirror of
https://github.com/HarmonyHoney/ROTA.git
synced 2026-07-17 16:46:17 +00:00
DoorUnlock Cutscene looking fancy!!^.^
This commit is contained in:
parent
22746111c0
commit
7cfd1930ed
7 changed files with 108 additions and 35 deletions
|
|
@ -23,6 +23,8 @@ func _exit_tree():
|
|||
Shared.doors.erase(self)
|
||||
|
||||
func _ready():
|
||||
if Engine.editor_hint: return
|
||||
|
||||
# set is_locked if scene not found
|
||||
var f = File.new()
|
||||
arrow.is_locked = !f.file_exists(scene_path)
|
||||
|
|
|
|||
|
|
@ -23,9 +23,7 @@ func _ready():
|
|||
door_name = Shared.map_name + ":" + name
|
||||
|
||||
is_cutscene = gem_count > 0 and !Shared.doors_unlocked.has(door_name)
|
||||
if door_mat:
|
||||
for i in 2:
|
||||
door_mat.set_shader_param(["gem_col", "gem_fill"][i] , colors[(0 if is_cutscene else 2) + i])
|
||||
gem_color(!is_cutscene)
|
||||
|
||||
label.modulate.a = 0.0
|
||||
|
||||
|
|
@ -77,3 +75,8 @@ func activate():
|
|||
func on_enter():
|
||||
if !Shared.doors_unlocked.has(door_name):
|
||||
Shared.doors_unlocked.append(door_name)
|
||||
|
||||
func gem_color(is_gold := false):
|
||||
if door_mat:
|
||||
for i in 2:
|
||||
door_mat.set_shader_param(["gem_col", "gem_fill"][i] , colors[(2 if is_gold else 0) + i])
|
||||
|
|
|
|||
|
|
@ -41,7 +41,6 @@ node_path = NodePath("..")
|
|||
[node name="Arrow" parent="." index="1"]
|
||||
col_size = Vector2( 100, 100 )
|
||||
image_pos = Vector2( 0, -150 )
|
||||
is_locked = true
|
||||
|
||||
[node name="Sprites" type="Node2D" parent="." index="2"]
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
[gd_scene load_steps=24 format=2]
|
||||
[gd_scene load_steps=26 format=2]
|
||||
|
||||
[ext_resource path="res://src/autoload/Audio.gd" type="Script" id=1]
|
||||
[ext_resource path="res://media/audio/sfx/coin1.wav" type="AudioStream" id=2]
|
||||
|
|
@ -19,10 +19,12 @@
|
|||
[ext_resource path="res://media/audio/sfx/player_land.wav" type="AudioStream" id=17]
|
||||
[ext_resource path="res://media/audio/sfx/player_jump.wav" type="AudioStream" id=18]
|
||||
[ext_resource path="res://media/audio/sfx/btn3.wav" type="AudioStream" id=19]
|
||||
[ext_resource path="res://media/audio/sfx/piano_high.wav" type="AudioStream" id=20]
|
||||
[ext_resource path="res://media/audio/music/ost1.mp3" type="AudioStream" id=21]
|
||||
[ext_resource path="res://media/audio/music/ost3.mp3" type="AudioStream" id=22]
|
||||
[ext_resource path="res://media/audio/music/ost4.mp3" type="AudioStream" id=23]
|
||||
[ext_resource path="res://media/audio/music/ost2.mp3" type="AudioStream" id=24]
|
||||
[ext_resource path="res://media/audio/sfx/guitar_pluck.wav" type="AudioStream" id=25]
|
||||
|
||||
[node name="Audio" type="Node"]
|
||||
pause_mode = 2
|
||||
|
|
@ -76,6 +78,14 @@ bus = "SFX"
|
|||
stream = ExtResource( 6 )
|
||||
bus = "SFX"
|
||||
|
||||
[node name="Piano" type="AudioStreamPlayer" parent="Gem"]
|
||||
stream = ExtResource( 20 )
|
||||
bus = "SFX"
|
||||
|
||||
[node name="Socket" type="AudioStreamPlayer" parent="Gem"]
|
||||
stream = ExtResource( 25 )
|
||||
bus = "SFX"
|
||||
|
||||
[node name="Clock" type="Node" parent="."]
|
||||
|
||||
[node name="Collect" type="AudioStreamPlayer" parent="Clock"]
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ func _process(delta):
|
|||
emit_signal("moved")
|
||||
|
||||
func set_target_node(arg):
|
||||
if is_instance_valid(target_node): target_node.disconnect("turn_cam", self, "turn")
|
||||
if is_instance_valid(target_node) and target_node.has_signal("turn_cam"): target_node.disconnect("turn_cam", self, "turn")
|
||||
target_node = arg
|
||||
if is_instance_valid(target_node) and target_node.has_signal("turn_cam"): target_node.connect("turn_cam", self, "turn")
|
||||
|
||||
|
|
|
|||
|
|
@ -25,8 +25,9 @@ script = ExtResource( 4 )
|
|||
|
||||
[node name="DoorUnlock" type="Node" parent="."]
|
||||
script = ExtResource( 5 )
|
||||
turn_speed = 3.0
|
||||
|
||||
[node name="Gem" parent="DoorUnlock" instance=ExtResource( 7 )]
|
||||
|
||||
[node name="Gems" type="Node2D" parent="DoorUnlock"]
|
||||
z_index = 48
|
||||
z_as_relative = false
|
||||
|
|
|
|||
|
|
@ -5,72 +5,130 @@ onready var gems_node := $Gems
|
|||
onready var gems := []
|
||||
|
||||
export var radius := 150.0
|
||||
export var turn_speed := 1.0
|
||||
export var turn_speed := 3.0
|
||||
|
||||
var door
|
||||
var gem_count = 0
|
||||
|
||||
var clock := 0.0
|
||||
var time := 10.0
|
||||
var step := 0
|
||||
signal done
|
||||
|
||||
var gem_ease := EaseMover.new(2.0)
|
||||
|
||||
var gem_offset := 0.3
|
||||
export var gem_offset := 0.2
|
||||
var gem_time := 1.0
|
||||
|
||||
var gem_last := 0.0
|
||||
var gem_step := 0.0
|
||||
|
||||
var gem_shrink := Vector2(50, 0.5)
|
||||
var socket_pos := Vector2.ZERO
|
||||
|
||||
var socket_ease := EaseMover.new(1.0)
|
||||
var click_ease := EaseMover.new(0.5)
|
||||
|
||||
|
||||
func _ready():
|
||||
set_physics_process(false)
|
||||
|
||||
gem.visible = false
|
||||
gem.scale = Vector2.ZERO
|
||||
for i in 50:
|
||||
gems_node.add_child(gem.duplicate())
|
||||
gems = gems_node.get_children()
|
||||
|
||||
gem.z_index = gems_node.z_index + 1
|
||||
gem.z_as_relative = false
|
||||
|
||||
func _physics_process(delta):
|
||||
clock += delta
|
||||
|
||||
gem_last = gem_step
|
||||
gem_step = floor(clock / gem_offset)
|
||||
|
||||
var shrink = clamp(clock - gem_shrink.x, 0.0, gem_shrink.y) / gem_shrink.y
|
||||
|
||||
if gem_step != gem_last and gem_step < gem_count:
|
||||
Audio.play("gem_piano", 0.5 + (gem_step * 0.1))
|
||||
|
||||
for i in gems.size():
|
||||
var f = clock - (gem_offset * i)
|
||||
var frac = clamp(f, 0.0, gem_time) / gem_time
|
||||
var under = abs(min(f, 0.0))
|
||||
|
||||
var a = (TAU * (float(i) / float(gem_count))) + ((clock + under) * turn_speed)
|
||||
var pos = Vector2(radius, 0).rotated(a)
|
||||
var pos = Vector2(radius * (1.0 - shrink) * -sign(turn_speed), 0).rotated(a)
|
||||
gems[i].position = gems_node.to_local(Shared.player.global_position).linear_interpolate(pos, frac)
|
||||
gems[i].scale = Vector2.ONE * ease(frac, 0.5)
|
||||
gems[i].scale = Vector2.ONE * ease(frac - shrink, 0.5)
|
||||
|
||||
gem.scale = Vector2.ONE * lerp(0.0, 2.5, shrink)
|
||||
|
||||
if step == 2:
|
||||
gem.global_position = gems_node.global_position.linear_interpolate(socket_pos, socket_ease.count(delta))
|
||||
elif step == 3:
|
||||
click_ease.count(delta)
|
||||
var w = ease(abs(wrapf(click_ease.frac() * 2.0, -1.0, 1.0)), -5)
|
||||
gem.scale = Vector2.ONE * lerp(2.5, 2.2, w)
|
||||
|
||||
if clock > time:
|
||||
step += 1
|
||||
|
||||
match step:
|
||||
1:
|
||||
time += 2.0
|
||||
Audio.play("clock_collect", 0.8, 1.2)
|
||||
#door.is_fade = true
|
||||
Cam.target_node = gem
|
||||
2:
|
||||
time += socket_ease.time
|
||||
socket_ease.clock = 0.0
|
||||
gems_node.visible = false
|
||||
3:
|
||||
time += click_ease.time
|
||||
click_ease.clock = 0.0
|
||||
Audio.play("gem_show", 0.2, 0.4)
|
||||
4:
|
||||
door.gem_color(true)
|
||||
gem.visible = false
|
||||
|
||||
emit_signal("done")
|
||||
set_physics_process(false)
|
||||
|
||||
func act(d):
|
||||
if !is_instance_valid(d): return
|
||||
door = d
|
||||
|
||||
Cutscene.is_playing = true
|
||||
|
||||
gems_node.global_position = d.global_position + Shared.rot(Vector2(0, -300), d.dir)
|
||||
gems_node.global_position = door.global_position + Shared.rot(Vector2(0, -300), door.dir)
|
||||
gem.position = gems_node.position
|
||||
socket_pos = door.global_position + Shared.rot(Vector2(0, -10), door.dir)
|
||||
|
||||
Cam.target_node = null
|
||||
Cam.target_pos = d.global_position.linear_interpolate(gems_node.global_position, 2.0 / 3.0)
|
||||
Cam.target_pos = door.global_position.linear_interpolate(gems_node.global_position, 2.0 / 3.0)
|
||||
Cam.start_zoom(0)
|
||||
|
||||
gem_count = d.gem_count
|
||||
d.is_cutscene = false
|
||||
|
||||
for i in gems.size():
|
||||
gems[i].visible = i < gem_count
|
||||
|
||||
if i < gem_count:
|
||||
gems[i].position = Vector2(radius, 0).rotated(TAU * (float(i) / float(gem_count)))
|
||||
|
||||
clock = 0.0
|
||||
set_physics_process(true)
|
||||
|
||||
yield(get_tree().create_timer(2.0), "timeout")
|
||||
|
||||
|
||||
d.is_fade = true
|
||||
gem_count = door.gem_count
|
||||
door.is_cutscene = false
|
||||
UI.up.show = false
|
||||
|
||||
Audio.play("gem_collect", 0.6, 0.8)
|
||||
yield(get_tree().create_timer(3.0), "timeout")
|
||||
gem.visible = true
|
||||
gem.scale = Vector2.ZERO
|
||||
gems_node.visible = true
|
||||
for i in gems.size():
|
||||
gems[i].visible = i < gem_count
|
||||
gems[i].scale = Vector2.ZERO
|
||||
|
||||
clock = 0.0
|
||||
step = 0
|
||||
time = (gem_count * gem_offset) + gem_time
|
||||
gem_shrink.x = time
|
||||
if randf() > 0.5: turn_speed = -turn_speed
|
||||
|
||||
set_physics_process(true)
|
||||
yield(self, "done")
|
||||
|
||||
Cam.target_node = Shared.player
|
||||
|
||||
set_physics_process(false)
|
||||
Cutscene.is_playing = false
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue