Added level 7
This commit is contained in:
@@ -28,6 +28,16 @@ func _input(event: InputEvent) -> void:
|
||||
pause_menu.show()
|
||||
|
||||
|
||||
func _complete_level(player_position: Vector2) -> void:
|
||||
SoundManager.play_sfx_stream(SoundManager.sfx_stream_level_completed, player_position)
|
||||
get_tree().paused = true
|
||||
completion_menu.show()
|
||||
|
||||
if SaveManager.completed_levels <= LevelManager.current_level_index:
|
||||
SaveManager.completed_levels = LevelManager.current_level_index + 1
|
||||
SaveManager.save()
|
||||
|
||||
|
||||
func _on_player_dead() -> void:
|
||||
get_tree().paused = true
|
||||
game_over_menu.show()
|
||||
@@ -35,11 +45,4 @@ func _on_player_dead() -> void:
|
||||
|
||||
func _on_level_end_entered(body: Node2D) -> void:
|
||||
if body is Player:
|
||||
var player_position := player.global_position
|
||||
SoundManager.play_sfx_stream(SoundManager.sfx_stream_level_completed, player_position)
|
||||
get_tree().paused = true
|
||||
completion_menu.show()
|
||||
|
||||
if SaveManager.completed_levels <= LevelManager.current_level_index:
|
||||
SaveManager.completed_levels = LevelManager.current_level_index + 1
|
||||
SaveManager.save()
|
||||
_complete_level(player.global_position)
|
||||
|
||||
@@ -4,10 +4,10 @@
|
||||
[ext_resource type="PackedScene" uid="uid://dtcad8tdx78tg" path="res://game/characters/player.tscn" id="2_r0ht6"]
|
||||
[ext_resource type="PackedScene" uid="uid://dqu87loahl7wn" path="res://game/tiles/walls.tscn" id="3_3fw0b"]
|
||||
[ext_resource type="Texture2D" uid="uid://due8mmt5ww1sf" path="res://images/level/walls.png" id="3_fnnmn"]
|
||||
[ext_resource type="Material" uid="uid://dojhoc6ljpt1a" path="res://game/materials/gray_walls.tres" id="3_pi5fd"]
|
||||
[ext_resource type="Material" uid="uid://d2o2o1w8kb51g" path="res://game/materials/white_walls.tres" id="5_6b8cu"]
|
||||
[ext_resource type="Material" uid="uid://dojhoc6ljpt1a" path="res://game/materials/walls_gray.tres" id="3_pi5fd"]
|
||||
[ext_resource type="Material" uid="uid://d2o2o1w8kb51g" path="res://game/materials/walls_white.tres" id="5_6b8cu"]
|
||||
[ext_resource type="PackedScene" uid="uid://nfgx201cn4ti" path="res://game/tiles/traps.tscn" id="5_b7vts"]
|
||||
[ext_resource type="Material" uid="uid://bhksbugqhxxa0" path="res://game/materials/black_walls.tres" id="6_x8k35"]
|
||||
[ext_resource type="Material" uid="uid://bhksbugqhxxa0" path="res://game/materials/walls_black.tres" id="6_x8k35"]
|
||||
[ext_resource type="PackedScene" uid="uid://dsts4y32slhnc" path="res://game/menu/pause_menu.tscn" id="7_l0xih"]
|
||||
[ext_resource type="PackedScene" uid="uid://84lhc3yn8vub" path="res://game/menu/game_over_menu.tscn" id="8_b7vts"]
|
||||
[ext_resource type="PackedScene" uid="uid://bareycqj42c6e" path="res://game/menu/completion_menu.tscn" id="11_3fw0b"]
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
[ext_resource type="PackedScene" uid="uid://mpsu4g2b5h3a" path="res://game/levels/abstract_level.tscn" id="1_15okj"]
|
||||
[ext_resource type="PackedScene" uid="uid://cojxqx5al7kyv" path="res://game/doors/locked_door.tscn" id="2_4ocoy"]
|
||||
[ext_resource type="Texture2D" uid="uid://dfeeppi0orneg" path="res://images/level/moon.png" id="2_ia26y"]
|
||||
[ext_resource type="Material" uid="uid://dojhoc6ljpt1a" path="res://game/materials/gray_walls.tres" id="2_tuvkr"]
|
||||
[ext_resource type="Material" uid="uid://dojhoc6ljpt1a" path="res://game/materials/walls_gray.tres" id="2_tuvkr"]
|
||||
[ext_resource type="PackedScene" uid="uid://b7mhdrj3b6loq" path="res://game/doors/door.tscn" id="3_crrvt"]
|
||||
[ext_resource type="Texture2D" uid="uid://du56n63yrot7d" path="res://images/level/tree.png" id="3_o0jti"]
|
||||
[ext_resource type="Texture2D" uid="uid://d3346lrt1c1oh" path="res://images/level/outdoor.png" id="3_wi6ud"]
|
||||
|
||||
@@ -0,0 +1,148 @@
|
||||
extends AbstractLevel
|
||||
|
||||
|
||||
const CUTSCENE_CAMERA_TIME = 5
|
||||
const CUTSCENE_HAZE_TIME = 0.1
|
||||
|
||||
const CUTSCENE_HAZE_TIME_BY_PHASE : Dictionary[int, float] = {
|
||||
1: CUTSCENE_HAZE_TIME,
|
||||
3: CUTSCENE_HAZE_TIME,
|
||||
5: CUTSCENE_HAZE_TIME,
|
||||
7: CUTSCENE_HAZE_TIME,
|
||||
}
|
||||
|
||||
|
||||
var _cutscene_phase := 0
|
||||
var _player_walk_speed : int
|
||||
var _cutscene_player_speed_factor := 0.5
|
||||
|
||||
var _function_by_phase : Dictionary[int, Callable] = {
|
||||
1: _do_cutscene_phase_one,
|
||||
4: _do_cutscene_phase_four,
|
||||
6: _do_cutscene_phase_six,
|
||||
7: _do_cutscene_phase_seven,
|
||||
}
|
||||
|
||||
|
||||
@onready var cutscene_camera : Camera2D = $Cutscene/Camera2D
|
||||
@onready var cutscene_haze : Polygon2D = $%CutsceneHaze
|
||||
@onready var cutscene_thanks : Label = $CanvasLayer/MarginContainer/ThanksLabel
|
||||
|
||||
@onready var cutscene_haze_timer : Timer = $Cutscene/HazeTimer
|
||||
@onready var cutscene_player_timer : Timer = $Cutscene/PlayerTimer
|
||||
@onready var cutscene_enemy_timer : Timer = $Cutscene/EnemyTimer
|
||||
@onready var cutscene_end_timer : Timer = $Cutscene/EndTimer
|
||||
|
||||
@onready var cutscene_fake_player : AnimatedSprite2D = $Cutscene/FakePlayer
|
||||
@onready var cutscene_fake_enemy : AnimatedSprite2D = $Cutscene/FakeEnemy
|
||||
|
||||
@onready var enemy_waves_by_phase : Dictionary[int, Node2D] = {
|
||||
3: $Cutscene/EnemyWaves/WaveOne,
|
||||
5: $Cutscene/EnemyWaves/WaveTwo,
|
||||
7: $Cutscene/EnemyWaves/WaveThree,
|
||||
}
|
||||
|
||||
@onready var cutscene_room_center : Vector2 = $Cutscene/RoomCenter.position
|
||||
@onready var PLAYER_TARGET_POSITION_BY_PHASE : Dictionary[int, Vector2] = {
|
||||
1: $Cutscene/PlayerTargetPositions/PhaseOne.global_position,
|
||||
2: $Cutscene/PlayerTargetPositions/PhaseTwo.global_position,
|
||||
3: $Cutscene/PlayerTargetPositions/PhaseThree.global_position,
|
||||
4: $Cutscene/PlayerTargetPositions/PhaseFour.global_position,
|
||||
5: $Cutscene/PlayerTargetPositions/PhaseFive.global_position,
|
||||
6: $Cutscene/FakeEnemy.global_position,
|
||||
}
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
super._ready()
|
||||
_player_walk_speed = player.max_speed
|
||||
cutscene_haze.hide()
|
||||
cutscene_fake_player.hide()
|
||||
cutscene_fake_enemy.hide()
|
||||
cutscene_thanks.hide()
|
||||
for phase in enemy_waves_by_phase:
|
||||
enemy_waves_by_phase[phase].hide()
|
||||
|
||||
|
||||
func _show_cutscene_haze(time: float) -> void:
|
||||
SoundManager.play_sfx_stream(SoundManager.sfx_stream_haze, cutscene_room_center)
|
||||
cutscene_haze.show()
|
||||
cutscene_haze_timer.start(time)
|
||||
|
||||
|
||||
func _next_cutscene_phase() -> void:
|
||||
_cutscene_phase += 1
|
||||
|
||||
if _function_by_phase.has(_cutscene_phase):
|
||||
_function_by_phase[_cutscene_phase].call()
|
||||
|
||||
if CUTSCENE_HAZE_TIME_BY_PHASE.has(_cutscene_phase):
|
||||
_show_cutscene_haze(CUTSCENE_HAZE_TIME_BY_PHASE[_cutscene_phase])
|
||||
|
||||
if enemy_waves_by_phase.has(_cutscene_phase):
|
||||
enemy_waves_by_phase[_cutscene_phase].show()
|
||||
|
||||
if PLAYER_TARGET_POSITION_BY_PHASE.has(_cutscene_phase):
|
||||
var target_pos := PLAYER_TARGET_POSITION_BY_PHASE[_cutscene_phase]
|
||||
var time := _get_player_move_time(cutscene_fake_player.position, target_pos)
|
||||
var tween : Tween = create_tween()
|
||||
tween.tween_property(cutscene_fake_player, "position", target_pos, time)
|
||||
tween.finished.connect(_next_cutscene_phase)
|
||||
|
||||
|
||||
func _do_cutscene_phase_one() -> void:
|
||||
player.queue_free()
|
||||
cutscene_camera.position = player.position
|
||||
cutscene_camera.enabled = true
|
||||
cutscene_camera.make_current()
|
||||
cutscene_fake_player.show()
|
||||
cutscene_fake_player.play(Player.ANIMATION_WALK_RIGHT, _cutscene_player_speed_factor)
|
||||
var tween : Tween = create_tween()
|
||||
tween.set_ease(Tween.EASE_IN_OUT)
|
||||
tween.set_trans(Tween.TRANS_QUAD)
|
||||
tween.tween_property(cutscene_camera, "position", cutscene_room_center, CUTSCENE_CAMERA_TIME)
|
||||
|
||||
|
||||
func _do_cutscene_phase_four() -> void:
|
||||
cutscene_fake_player.play(Player.ANIMATION_WALK_LEFT,_cutscene_player_speed_factor)
|
||||
|
||||
|
||||
func _do_cutscene_phase_six() -> void:
|
||||
_cutscene_player_speed_factor = 0.25
|
||||
cutscene_fake_player.play(Player.ANIMATION_WALK_RIGHT, _cutscene_player_speed_factor)
|
||||
|
||||
|
||||
func _do_cutscene_phase_seven() -> void:
|
||||
cutscene_fake_player.play("look_around", 0.5)
|
||||
cutscene_player_timer.start()
|
||||
|
||||
|
||||
func _get_player_move_time(initial_pos: Vector2, target_pos: Vector2) -> float:
|
||||
var distance := initial_pos.distance_to(target_pos)
|
||||
return distance / (_player_walk_speed * _cutscene_player_speed_factor)
|
||||
|
||||
|
||||
func _on_level_end_entered(body: Node2D) -> void:
|
||||
if body is Player:
|
||||
_next_cutscene_phase()
|
||||
|
||||
|
||||
func _on_haze_timer_timeout() -> void:
|
||||
cutscene_haze.hide()
|
||||
|
||||
|
||||
func _on_player_timer_timeout() -> void:
|
||||
_show_cutscene_haze(CUTSCENE_HAZE_TIME)
|
||||
cutscene_fake_player.queue_free()
|
||||
cutscene_fake_enemy.show()
|
||||
cutscene_fake_enemy.play("look_around", 0.5)
|
||||
cutscene_enemy_timer.start()
|
||||
|
||||
|
||||
func _on_enemy_timer_timeout() -> void:
|
||||
cutscene_thanks.show()
|
||||
cutscene_end_timer.start()
|
||||
|
||||
|
||||
func _on_end_timer_timeout() -> void:
|
||||
_complete_level(cutscene_room_center)
|
||||
@@ -0,0 +1 @@
|
||||
uid://lxye5wqo5suq
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user