mirror of
https://github.com/HarmonyHoney/ROTA.git
synced 2026-07-17 16:46:17 +00:00
Cutscene WIP! EaseMover/Wipe cleanup (=
This commit is contained in:
parent
43359fec63
commit
528cc2c0d7
22 changed files with 187 additions and 312 deletions
|
|
@ -44,10 +44,10 @@ var is_turn := false
|
|||
|
||||
var pickup_angle := 12.0
|
||||
|
||||
onready var push_ease := EaseMover.new(null, 0.2)
|
||||
onready var turn_ease := EaseMover.new(null, 0.2)
|
||||
onready var respawn_ease := EaseMover.new(null, 1.0)
|
||||
onready var pickup_ease := EaseMover.new(null, 0.2)
|
||||
onready var push_ease := EaseMover.new(0.2)
|
||||
onready var turn_ease := EaseMover.new(0.2)
|
||||
onready var respawn_ease := EaseMover.new(1.0)
|
||||
onready var pickup_ease := EaseMover.new(0.2)
|
||||
|
||||
var velocity := 0.0
|
||||
export var start_velocity := 100.0
|
||||
|
|
|
|||
|
|
@ -8,21 +8,24 @@ export var from_back := Color("af00ff")
|
|||
export var to_fill := Color("fffb00")
|
||||
export var to_back := Color("ffdd00")
|
||||
|
||||
var fade_ease = EaseMover.new(0.7)
|
||||
var is_change := false
|
||||
var fade_easy = EaseMover.new()
|
||||
var is_fade := false
|
||||
|
||||
func _physics_process(delta):
|
||||
if is_change:
|
||||
if !fade_ease.is_complete:
|
||||
fade_ease.count(delta)
|
||||
gem_back.color = from_back.linear_interpolate(to_back, fade_ease.smooth())
|
||||
gem_fill.color = from_fill.linear_interpolate(to_fill, fade_ease.smooth())
|
||||
else:
|
||||
is_change = false
|
||||
if is_fade:
|
||||
fade_easy.count(delta)
|
||||
gem_back.color = from_back.linear_interpolate(to_back, fade_easy.smooth())
|
||||
gem_fill.color = from_fill.linear_interpolate(to_fill, fade_easy.smooth())
|
||||
if fade_easy.clock == 0 or fade_easy.is_complete:
|
||||
is_fade = false
|
||||
|
||||
func set_color(is_collected := true):
|
||||
gem_back.color = to_back if is_collected else from_back
|
||||
gem_fill.color = to_fill if is_collected else from_fill
|
||||
|
||||
func fade_color(is_collected := true):
|
||||
is_change = true
|
||||
func fade_color(arg := true):
|
||||
is_fade = true
|
||||
fade_easy.show = arg
|
||||
fade_easy.clock = 0 if arg else fade_easy.time
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ onready var sprites = $Sprites
|
|||
onready var gem := $Sprites/Gem
|
||||
onready var area = $Area2D
|
||||
onready var start_pos := position
|
||||
var shine_easy := EaseMover.new(0.8)
|
||||
|
||||
var player = null
|
||||
var is_collected := false
|
||||
|
|
@ -26,6 +27,10 @@ func _ready():
|
|||
sprites.modulate = Color(c,c,c, 0.2)
|
||||
|
||||
func _physics_process(delta):
|
||||
if shine_easy.clock > 0:
|
||||
shine_easy.count(delta, false)
|
||||
sprites.scale = Vector2.ONE * lerp(1.0, 1.8, shine_easy.smooth())
|
||||
|
||||
# follow player
|
||||
if is_collected and player != null and is_follow:
|
||||
var target = player.position + player.rot(Vector2.UP * 20)
|
||||
|
|
@ -36,15 +41,16 @@ func turning(angle):
|
|||
|
||||
func pickup(ply):
|
||||
if is_collected: return
|
||||
player = ply
|
||||
is_collected = true
|
||||
area.set_deferred("monitorable", false)
|
||||
|
||||
player = ply
|
||||
start_pos = position
|
||||
#area.monitorable = false
|
||||
|
||||
area.set_deferred("monitorable", false)
|
||||
Audio.play(Audio.gem_collect)
|
||||
|
||||
func cheat_code(cheat):
|
||||
if "konami" in cheat:
|
||||
pass#pickup(Shared.player)
|
||||
|
||||
func shine():
|
||||
shine_easy.clock = shine_easy.time
|
||||
Audio.play(Audio.gem_show)
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ var box : Box = null
|
|||
var is_deploy := false
|
||||
var last_deploy := false
|
||||
|
||||
var easy := EaseMover.new(0.3)
|
||||
var easy := EaseMover.new()
|
||||
|
||||
var _delta := 1.0 / 60.0
|
||||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ onready var anim : AnimationPlayer = $AnimationPlayer
|
|||
onready var sprites := $Sprites
|
||||
onready var spr_root := $Sprites/Root
|
||||
onready var spr_body := $Sprites/Root/Body
|
||||
var spr_easy := EaseMover.new()
|
||||
|
||||
onready var spr_hand_l := $Sprites/Hands/Left
|
||||
onready var spr_hand_r := $Sprites/Hands/Right
|
||||
|
|
@ -123,6 +124,7 @@ func _enter_tree():
|
|||
MenuPause.connect("closed", self, "unpause")
|
||||
UI.connect("dialog_closed", self, "unpause")
|
||||
Shared.connect("scene_changed", self, "scene")
|
||||
Wipe.connect("start", self, "wipe_start")
|
||||
|
||||
func _ready():
|
||||
set_hair_back()
|
||||
|
|
@ -135,6 +137,9 @@ func _ready():
|
|||
l.bezier_track_set_key_value(2, i, -l.bezier_track_get_key_value(2, i))
|
||||
anim.add_animation("idle_left", l)
|
||||
|
||||
func wipe_start(arg):
|
||||
spr_easy.show = arg
|
||||
|
||||
func scene():
|
||||
# go to last door
|
||||
if is_instance_valid(Shared.door_in):
|
||||
|
|
@ -166,6 +171,8 @@ func scene():
|
|||
func _physics_process(delta):
|
||||
if Engine.editor_hint: return
|
||||
|
||||
sprites.modulate.a = spr_easy.count(delta)
|
||||
|
||||
if is_dead:
|
||||
sprites.position += rot(velocity) * delta
|
||||
sprites.rotate(deg2rad(-dir_x * 240) * delta)
|
||||
|
|
@ -239,6 +246,7 @@ func _physics_process(delta):
|
|||
|
||||
# finished
|
||||
if goal_step > 2:
|
||||
goal_step = 0
|
||||
is_goal = false
|
||||
goal.gem.z_as_relative = false
|
||||
goal.is_follow = true
|
||||
|
|
@ -678,7 +686,6 @@ func release_anim():
|
|||
rel.bezier_track_set_key_value(rh, 0, spr_hand_r.position.x)
|
||||
rel.bezier_track_set_key_value(rh + 1, 0, spr_hand_r.position.y)
|
||||
|
||||
anim.add_animation("release", rel)
|
||||
anim.play("release")
|
||||
|
||||
func enter_door():
|
||||
|
|
|
|||
|
|
@ -479,7 +479,7 @@ end_cap_mode = 2
|
|||
|
||||
[node name="Torso" type="Line2D" parent="Sprites/Root/Body/Fit"]
|
||||
position = Vector2( 0, -9.5 )
|
||||
points = PoolVector2Array( 0, 0, 0, 20 )
|
||||
points = PoolVector2Array( 0, -5, 0, 20 )
|
||||
width = 25.0
|
||||
width_curve = SubResource( 13 )
|
||||
default_color = Color( 1, 1, 1, 1 )
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ func _ready():
|
|||
if Engine.editor_hint: return
|
||||
|
||||
CheatCode.connect("activate", self, "cheat_code")
|
||||
if arrow.is_locked:
|
||||
if !arrow.is_locked:
|
||||
arrow.is_locked = Shared.gem_count < gem_count
|
||||
|
||||
func set_gem(arg := gem_count):
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
[ext_resource path="res://media/image/door/door.png" type="Texture" id=2]
|
||||
[ext_resource path="res://src/actor/door/DoorLittle.gd" type="Script" id=3]
|
||||
[ext_resource path="res://src/actor/Clock.tscn" type="PackedScene" id=4]
|
||||
[ext_resource path="res://src/actor/Gem.tscn" type="PackedScene" id=6]
|
||||
[ext_resource path="res://src/actor/Gem.gd" type="Script" id=5]
|
||||
|
||||
[node name="Door" instance=ExtResource( 1 )]
|
||||
script = ExtResource( 3 )
|
||||
|
|
@ -15,8 +15,17 @@ scale = Vector2( 0.1, 0.1 )
|
|||
[node name="Door" type="Sprite" parent="Sprites" index="0"]
|
||||
texture = ExtResource( 2 )
|
||||
|
||||
[node name="Gem" parent="." index="3" instance=ExtResource( 6 )]
|
||||
[node name="Gem" type="Node2D" parent="." index="3"]
|
||||
position = Vector2( 0, -5 )
|
||||
script = ExtResource( 5 )
|
||||
|
||||
[node name="Back" type="Polygon2D" parent="Gem" index="0"]
|
||||
color = Color( 0.686275, 0, 1, 1 )
|
||||
polygon = PoolVector2Array( -30, 0, 0, -30, 30, 0, 0, 30 )
|
||||
|
||||
[node name="Fill" type="Polygon2D" parent="Gem/Back" index="0"]
|
||||
color = Color( 1, 0, 0.913725, 1 )
|
||||
polygon = PoolVector2Array( -20, 0, 0, -20, 20, 0, 0, 20 )
|
||||
|
||||
[node name="Clock" parent="." index="4" instance=ExtResource( 4 )]
|
||||
visible = false
|
||||
|
|
|
|||
|
|
@ -30,6 +30,11 @@ var zoom_steps := 2
|
|||
|
||||
var rot_offset := Vector2.ZERO
|
||||
|
||||
var is_pan := false
|
||||
var pan_ease := EaseMover.new(1.0)
|
||||
signal pan_complete
|
||||
|
||||
|
||||
func _enter_tree():
|
||||
Shared.connect("scene_changed", self, "scene_changed")
|
||||
|
||||
|
|
@ -41,25 +46,32 @@ func _input(event):
|
|||
start_zoom(zoom_step + 1)
|
||||
|
||||
func _process(delta):
|
||||
# zoom
|
||||
if is_zoom:
|
||||
zoom = Vector2.ONE * lerp(zoom_from, zoom_to, zoom_ease.count(delta))
|
||||
if zoom_ease.is_complete:
|
||||
is_zoom = false
|
||||
|
||||
# rotation
|
||||
if is_rotating:
|
||||
if turn_ease.clock < turn_ease.time:
|
||||
rotation = lerp_angle(turn_from, turn_to, turn_ease.count(delta))
|
||||
emit_signal("turning", rotation)
|
||||
|
||||
# track target
|
||||
if is_instance_valid(target_node):
|
||||
target_pos = target_node.global_position
|
||||
|
||||
# position
|
||||
if is_moving:
|
||||
global_position = global_position.linear_interpolate(target_pos + turn_offset.rotated(rotation), 0.08)
|
||||
|
||||
# zoom
|
||||
if is_zoom:
|
||||
zoom = Vector2.ONE * lerp(zoom_from, zoom_to, zoom_ease.count(delta))
|
||||
if zoom_ease.is_complete:
|
||||
is_zoom = false
|
||||
if is_pan:
|
||||
global_position = pan_ease.move(delta)
|
||||
if pan_ease.is_complete:
|
||||
emit_signal("pan_complete")
|
||||
#print("pan_complete")
|
||||
is_pan = false
|
||||
else:
|
||||
# track target
|
||||
if is_instance_valid(target_node):
|
||||
target_pos = target_node.global_position
|
||||
|
||||
# position
|
||||
if is_moving:
|
||||
global_position = global_position.linear_interpolate(target_pos + turn_offset.rotated(rotation), 0.08)
|
||||
|
||||
func turn(arg):
|
||||
turn_from = rotation
|
||||
|
|
@ -99,3 +111,11 @@ func snap_to(pos, turn):
|
|||
reset_smoothing()
|
||||
force_update_scroll()
|
||||
force_update_transform()
|
||||
|
||||
func pan(pos : Vector2):
|
||||
pan_ease.clock = 0
|
||||
is_pan = true
|
||||
target_pos = pos
|
||||
pan_ease.from = global_position
|
||||
pan_ease.to = target_pos
|
||||
pan_ease.time = lerp(0.3, 1.0, clamp(pan_ease.from.distance_to(pan_ease.to) / 100.0, 0, 20) / 20)
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ Vector2(1920, 1080), Vector2(2560, 1440), Vector2(3840, 2160)]
|
|||
var is_demo := false
|
||||
|
||||
func _ready():
|
||||
Wipe.connect("wipe_out", self, "wipe_out")
|
||||
Wipe.connect("complete", self, "wipe_complete")
|
||||
#set_volume(0, 50)
|
||||
set_volume(1, 50)
|
||||
set_volume(2, 50)
|
||||
|
|
@ -204,10 +204,11 @@ func wipe_scene(arg, last := csfn):
|
|||
|
||||
return false
|
||||
|
||||
func wipe_out():
|
||||
func wipe_complete(arg):
|
||||
if is_wipe:
|
||||
Wipe.start(true)
|
||||
is_wipe = false
|
||||
change_scene()
|
||||
Wipe.start(true)
|
||||
|
||||
func reset():
|
||||
wipe_scene(csfn)
|
||||
|
|
@ -216,10 +217,8 @@ func change_scene():
|
|||
is_wipe = false
|
||||
boxes.clear()
|
||||
|
||||
Cutscene.end_all()
|
||||
emit_signal("scene_before")
|
||||
|
||||
|
||||
is_reload = next_scene == csfn
|
||||
if is_reload:
|
||||
get_tree().reload_current_scene()
|
||||
|
|
|
|||
|
|
@ -1,45 +1,37 @@
|
|||
extends CanvasLayer
|
||||
|
||||
onready var sprite : Sprite = $Sprite
|
||||
onready var mat : ShaderMaterial = sprite.material
|
||||
onready var audio := $AudioStreamPlayer
|
||||
onready var mat : ShaderMaterial = $Sprite.material
|
||||
|
||||
signal wipe_in
|
||||
signal wipe_out
|
||||
|
||||
signal start_wipe_in
|
||||
signal start_wipe_out
|
||||
signal start
|
||||
signal complete
|
||||
|
||||
var is_wipe := false
|
||||
var is_in := false
|
||||
|
||||
var clock := 0.0
|
||||
var time := 0.5
|
||||
var radius := 0.71
|
||||
var easy = EaseMover.new()
|
||||
|
||||
func _ready():
|
||||
sprite.visible = false
|
||||
|
||||
func _process(delta):
|
||||
if is_wipe:
|
||||
clock = clamp(clock + (-delta if is_in else delta), 0, time)
|
||||
var s = smoothstep(0, 1, clock / time)
|
||||
mat.set_shader_param("radius", easy.count(delta, !is_in) * radius)
|
||||
|
||||
mat.set_shader_param("radius", lerp(0, radius, s))
|
||||
|
||||
if (clock == 0 and is_in) or (clock == time and !is_in):
|
||||
if (easy.clock == 0 and is_in) or (easy.clock == easy.time and !is_in):
|
||||
is_wipe = false
|
||||
sprite.visible = false
|
||||
emit_signal("wipe_in") if is_in else emit_signal("wipe_out")
|
||||
emit_signal("complete", is_in)
|
||||
|
||||
func start(arg := false):
|
||||
is_in = arg
|
||||
is_wipe = true
|
||||
sprite.visible = true
|
||||
clock = time if is_in else 0
|
||||
emit_signal("start_wipe_in") if is_in else emit_signal("start_wipe_out")
|
||||
easy.clock = easy.time if is_in else 0
|
||||
emit_signal("start", is_in)
|
||||
|
||||
if !is_in:
|
||||
audio.pitch_scale = rand_range(0.9, 1.1)
|
||||
audio.play()
|
||||
|
||||
|
|
|
|||
|
|
@ -10,11 +10,11 @@ var node
|
|||
|
||||
var is_complete setget , get_complete
|
||||
|
||||
func _init(_node := node, _time := time, _from := from, _to := to):
|
||||
node = _node
|
||||
func _init(_time := time, _from := from, _to := to, _node := node):
|
||||
time = _time
|
||||
from = _from
|
||||
to = _to
|
||||
node = _node
|
||||
|
||||
func count(delta, arg := show):
|
||||
clock = clamp(clock + (delta if arg else -delta), 0, time)
|
||||
|
|
@ -24,7 +24,7 @@ func move(delta, arg := show):
|
|||
count(delta, arg)
|
||||
current = from.linear_interpolate(to, smooth())
|
||||
|
||||
if node:
|
||||
if is_instance_valid(node):
|
||||
node.rect_position = current
|
||||
|
||||
return current
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@ var is_show_goal := false
|
|||
|
||||
onready var gem_collect := $GemCollect
|
||||
var is_collect := false
|
||||
|
||||
onready var clock_collect := $Clock
|
||||
var is_clock := false
|
||||
|
||||
onready var start_game := $StartGame
|
||||
|
|
@ -15,32 +17,22 @@ var is_start_game := false
|
|||
func _enter_tree():
|
||||
Shared.connect("scene_changed", self, "scene_changed")
|
||||
|
||||
func start():
|
||||
is_playing = true
|
||||
Cam.set_process_input(false)
|
||||
Shared.map_clock = 0.0
|
||||
|
||||
func end():
|
||||
is_playing = false
|
||||
Cam.set_process_input(true)
|
||||
|
||||
func end_all():
|
||||
for i in [gem_collect, goal_show, start_game]:
|
||||
if i.is_playing:
|
||||
i.end()
|
||||
|
||||
func scene_changed():
|
||||
if is_playing: return
|
||||
|
||||
if is_show_goal:
|
||||
is_show_goal = false
|
||||
if is_instance_valid(Shared.goal):
|
||||
Cutscene.goal_show.begin()
|
||||
|
||||
elif is_collect or Cutscene.is_clock:
|
||||
Cutscene.is_collect = false
|
||||
Cutscene.is_clock = false
|
||||
if is_instance_valid(Shared.door_in):
|
||||
Cutscene.gem_collect.begin()
|
||||
|
||||
goal_show.act()
|
||||
|
||||
elif is_collect:
|
||||
is_collect = false
|
||||
gem_collect.act()
|
||||
|
||||
# elif is_clock:
|
||||
# is_clock = false
|
||||
# if is_instance_valid(Shared.door_in):
|
||||
# gem_collect.begin()
|
||||
|
||||
elif is_start_game:
|
||||
Cutscene.is_start_game = false
|
||||
Cutscene.start_game.begin()
|
||||
is_start_game = false
|
||||
start_game.act()
|
||||
|
|
|
|||
|
|
@ -8,11 +8,13 @@
|
|||
[node name="Cutscene" type="Node"]
|
||||
script = ExtResource( 1 )
|
||||
|
||||
[node name="GemCollect" type="Node" parent="."]
|
||||
script = ExtResource( 2 )
|
||||
[node name="StartGame" type="Node" parent="."]
|
||||
script = ExtResource( 6 )
|
||||
|
||||
[node name="GoalShow" type="Node" parent="."]
|
||||
script = ExtResource( 3 )
|
||||
|
||||
[node name="StartGame" type="Node" parent="."]
|
||||
script = ExtResource( 6 )
|
||||
[node name="GemCollect" type="Node" parent="."]
|
||||
script = ExtResource( 2 )
|
||||
|
||||
[node name="Clock" type="Node" parent="."]
|
||||
|
|
|
|||
|
|
@ -1,87 +1,24 @@
|
|||
extends Node
|
||||
|
||||
var is_playing := false
|
||||
var step := 0
|
||||
var clock := 0.0
|
||||
var easy := EaseMover.new(0.5)
|
||||
var is_clock := false
|
||||
var is_collect := false
|
||||
|
||||
var door_dest
|
||||
var player
|
||||
|
||||
func _ready():
|
||||
set_physics_process(false)
|
||||
|
||||
func _physics_process(delta):
|
||||
clock += delta
|
||||
func act():
|
||||
Cutscene.is_playing = true
|
||||
Shared.player.spr_easy.show = false
|
||||
yield(Wipe, "complete")
|
||||
|
||||
match step:
|
||||
0:
|
||||
if clock > 0.15:
|
||||
next_step()
|
||||
easy.clock = 0
|
||||
Audio.play(Audio.gem_collect, 0.8)
|
||||
|
||||
if is_collect:
|
||||
UI.up.show = true
|
||||
|
||||
if is_clock:
|
||||
UI.down.show = true
|
||||
else:
|
||||
door_dest.gem.fade_color()
|
||||
1:
|
||||
if is_clock:
|
||||
door_dest.clock.scale = Vector2.ONE * easy.count(delta)
|
||||
door_dest.gem.scale = Vector2.ONE * (1 - easy.smooth())
|
||||
|
||||
door_dest.clock.rotation_degrees = easy.smooth() * 720
|
||||
door_dest.gem.rotation_degrees = easy.smooth() * -720
|
||||
|
||||
if clock > 1.0:
|
||||
next_step()
|
||||
easy.clock = 0
|
||||
UI.gem_label.text = str(Shared.gem_count)
|
||||
UI.clock_label.text = str(Shared.clock_rank)
|
||||
2:
|
||||
player.visible = true
|
||||
player.modulate.a = easy.count(delta)
|
||||
|
||||
if clock > 0.5:
|
||||
end()
|
||||
|
||||
func next_step():
|
||||
clock = 0.0
|
||||
step += 1
|
||||
|
||||
func begin():
|
||||
player = Shared.player
|
||||
door_dest = Shared.door_in
|
||||
print(Shared.door_in)
|
||||
|
||||
for i in [player, door_dest]:
|
||||
if !is_instance_valid(i):
|
||||
return
|
||||
|
||||
is_playing = true
|
||||
Cutscene.start()
|
||||
is_clock = Cutscene.is_clock
|
||||
is_collect = Cutscene.is_collect
|
||||
|
||||
set_physics_process(true)
|
||||
clock = 0.0
|
||||
step = 0
|
||||
|
||||
player.visible = false
|
||||
if is_clock:
|
||||
door_dest.clock.scale = Vector2.ZERO
|
||||
door_dest.gem.visible = true
|
||||
else:
|
||||
door_dest.gem.set_color(false)
|
||||
|
||||
func end():
|
||||
is_playing = false
|
||||
Cutscene.end()
|
||||
set_physics_process(false)
|
||||
Audio.play(Audio.gem_collect, 0.8)
|
||||
UI.up.show = true
|
||||
yield(get_tree().create_timer(1.0), "timeout")
|
||||
|
||||
UI.gem_label.text = str(Shared.gem_count)
|
||||
yield(get_tree().create_timer(0.5), "timeout")
|
||||
Shared.player.spr_easy.show = true
|
||||
UI.up.show = false
|
||||
UI.down.show = false
|
||||
Cutscene.is_playing = false
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,82 +1,20 @@
|
|||
extends Node
|
||||
|
||||
var is_playing := false
|
||||
var step := 0
|
||||
var clock := 0.0
|
||||
|
||||
var player
|
||||
var goal
|
||||
|
||||
var cam_from := Vector2.ZERO
|
||||
var cam_to := Vector2.ZERO
|
||||
var cam_time := 1.0
|
||||
|
||||
func _ready():
|
||||
set_physics_process(false)
|
||||
|
||||
func _physics_process(delta):
|
||||
clock += delta
|
||||
func act():
|
||||
if !is_instance_valid(Shared.goal): return
|
||||
|
||||
match step:
|
||||
0:
|
||||
if clock > 0.3:
|
||||
next_step()
|
||||
cam_target(goal.global_position)
|
||||
1:
|
||||
cam_move()
|
||||
if clock > cam_time:
|
||||
next_step()
|
||||
2:
|
||||
if clock > 0.1:
|
||||
next_step()
|
||||
Audio.play(Audio.gem_show)
|
||||
3:
|
||||
var limit = 0.8
|
||||
var t = min(clock, limit)
|
||||
var s = smoothstep(0, 1, t / limit)
|
||||
goal.scale = Vector2.ONE * lerp(1.8, 1.0, s)
|
||||
|
||||
if clock > limit:
|
||||
next_step()
|
||||
cam_target(player.global_position)
|
||||
4:
|
||||
cam_move()
|
||||
if clock > cam_time:
|
||||
end()
|
||||
|
||||
func next_step():
|
||||
clock = 0.0
|
||||
step += 1
|
||||
|
||||
func begin():
|
||||
player = Shared.player
|
||||
goal = Shared.goal
|
||||
Cutscene.is_playing = true
|
||||
Cam.target_node = null
|
||||
yield(Wipe, "complete")
|
||||
|
||||
for i in [player, goal]:
|
||||
if !is_instance_valid(i):
|
||||
return
|
||||
Cam.pan(Shared.goal.global_position)
|
||||
yield(Cam, "pan_complete")
|
||||
|
||||
is_playing = true
|
||||
Cutscene.start()
|
||||
Cam.set_process(false)
|
||||
Shared.goal.shine()
|
||||
yield(get_tree().create_timer(0.8), "timeout")
|
||||
|
||||
set_physics_process(true)
|
||||
clock = 0.0
|
||||
step = 0
|
||||
|
||||
func end():
|
||||
is_playing = false
|
||||
Cutscene.end()
|
||||
Cam.set_process(true)
|
||||
set_physics_process(false)
|
||||
|
||||
func cam_target(target):
|
||||
cam_from = Cam.global_position
|
||||
cam_to = target
|
||||
Cam.pan(Shared.player.position)
|
||||
yield(Cam, "pan_complete")
|
||||
|
||||
var d = cam_from.distance_to(cam_to) / 100.0
|
||||
cam_time = lerp(0.3, 1.0, clamp(d, 0, 20) / 20)
|
||||
|
||||
func cam_move():
|
||||
var s = smoothstep(0, 1, min(clock, cam_time) / cam_time)
|
||||
Cam.global_position = cam_from.linear_interpolate(cam_to, s)
|
||||
Cam.target_node = Shared.player
|
||||
Cutscene.is_playing = false
|
||||
|
|
|
|||
|
|
@ -1,58 +1,22 @@
|
|||
extends Node
|
||||
|
||||
var is_playing := false
|
||||
var step := 0
|
||||
var clock := 0.0
|
||||
|
||||
var player
|
||||
|
||||
func _ready():
|
||||
set_physics_process(false)
|
||||
|
||||
func _physics_process(delta):
|
||||
clock += delta
|
||||
|
||||
match step:
|
||||
0:
|
||||
if clock > 0.5:
|
||||
next_step()
|
||||
1:
|
||||
if clock > 0.6:
|
||||
next_step()
|
||||
|
||||
Cam.set_process(true)
|
||||
2:
|
||||
if clock > 0.3:
|
||||
end()
|
||||
|
||||
func next_step():
|
||||
clock = 0.0
|
||||
step += 1
|
||||
|
||||
func begin():
|
||||
player = Shared.player
|
||||
if !is_instance_valid(player):
|
||||
return
|
||||
|
||||
is_playing = true
|
||||
Cutscene.start()
|
||||
func act():
|
||||
Cutscene.is_playing = true
|
||||
Cam.set_process(false)
|
||||
player.move_and_collide(Vector2(0, -850))
|
||||
player.anim.play("jump")
|
||||
Cam.position += Vector2(0, -400)
|
||||
#MenuMakeover.outfit(MenuMakeover.pale)
|
||||
|
||||
if is_instance_valid(Shared.player):
|
||||
var p = Shared.player
|
||||
p.move_and_collide(Vector2(0, -850))
|
||||
p.is_floor = false
|
||||
p.has_jumped = true
|
||||
p.anim.play("jump")
|
||||
|
||||
if is_instance_valid(Shared.door_in):
|
||||
Shared.door_in.visible = false
|
||||
Shared.door_in.arrow.is_locked = true
|
||||
|
||||
set_physics_process(true)
|
||||
clock = 0.0
|
||||
step = 0
|
||||
|
||||
func end():
|
||||
is_playing = false
|
||||
Cutscene.end()
|
||||
yield(get_tree().create_timer(1.2), "timeout")
|
||||
Cam.set_process(true)
|
||||
|
||||
set_physics_process(false)
|
||||
|
||||
yield(get_tree().create_timer(0.2), "timeout")
|
||||
Cutscene.is_playing = false
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ sprite_path = NodePath("Images/Petals")
|
|||
[node name="Spring" type="Node2D" parent="."]
|
||||
position = Vector2( 2, 1 )
|
||||
script = ExtResource( 6 )
|
||||
sprites_path = NodePath("../Images")
|
||||
add_vel = 5.0
|
||||
weight = 3.0
|
||||
audio_path = NodePath("../Audio/Hit")
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
extends CanvasLayer
|
||||
|
||||
onready var label := $Label
|
||||
onready var label_ease := EaseMover.new(null, 1.5)
|
||||
onready var label_ease := EaseMover.new(1.5)
|
||||
var is_start := false
|
||||
var is_back := false
|
||||
|
||||
|
|
|
|||
|
|
@ -3,11 +3,11 @@ extends MenuBase
|
|||
onready var hub_label := $Control/Menu/List/Items/Hub
|
||||
|
||||
func _ready():
|
||||
Wipe.connect("start_wipe_out", self, "start_wipe_out")
|
||||
Wipe.connect("wipe_out", self, "wipe_out")
|
||||
Wipe.connect("wipe_in", self, "wipe_in")
|
||||
Wipe.connect("complete", self, "wipe_complete")
|
||||
|
||||
func _input(event):
|
||||
if Wipe.is_wipe: return
|
||||
|
||||
if is_open:
|
||||
if event.is_action_pressed("ui_pause") and !is_sub_menu and (fade_ease.frac() > 0.5):
|
||||
self.is_open = false
|
||||
|
|
@ -32,18 +32,12 @@ func accept():
|
|||
"exit":
|
||||
Shared.wipe_scene(Shared.title_path)
|
||||
|
||||
func start_wipe_out():
|
||||
set_process_input(false)
|
||||
|
||||
func wipe_out():
|
||||
# close menu
|
||||
func wipe_complete(arg):
|
||||
if is_open:
|
||||
# close menu
|
||||
set_open(false, false)
|
||||
fade_ease.clock = 0
|
||||
|
||||
func wipe_in():
|
||||
set_process_input(true)
|
||||
|
||||
func set_open(arg := is_open, is_audio := true):
|
||||
.set_open(arg)
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ extends MenuBase
|
|||
|
||||
onready var control := $Control
|
||||
|
||||
onready var prompt_ease := EaseMover.new($Control/Prompt)
|
||||
onready var prompt_ease := EaseMover.new()
|
||||
var is_prompt := false
|
||||
onready var prompt_key := $Control/Prompt/VBoxContainer/Key
|
||||
onready var prompt_timer_label := $Control/Prompt/VBoxContainer/Timer
|
||||
|
|
@ -16,7 +16,7 @@ export var is_gamepad := false
|
|||
|
||||
onready var header := $Control/Header
|
||||
onready var header_back := $Control/Header/Back
|
||||
onready var header_ease := EaseMover.new(null, 0.2)
|
||||
onready var header_ease := EaseMover.new(0.2)
|
||||
onready var header_track := $Control/Menu/List/Spacer
|
||||
onready var title_label := $Control/Menu/List/Title
|
||||
|
||||
|
|
@ -25,6 +25,7 @@ var defaults := {}
|
|||
func _ready():
|
||||
# get default binds
|
||||
defaults = Shared.default_keys.duplicate()
|
||||
prompt_ease.node = $Control/Prompt
|
||||
|
||||
func _input(event):
|
||||
if !is_open: return
|
||||
|
|
|
|||
10
src/shader/circle.gdshader
Normal file
10
src/shader/circle.gdshader
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
shader_type canvas_item;
|
||||
|
||||
uniform float radius : hint_range(0.0, 1.0) = 0.5;
|
||||
uniform vec4 inside_color : hint_color = vec4(0.0);
|
||||
uniform vec4 outside_color : hint_color = vec4(1.0);
|
||||
|
||||
void fragment(){
|
||||
float dist = distance(vec2(0.5, 0.5), UV);
|
||||
COLOR = mix(inside_color, outside_color, float(dist > radius));
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue