85 lines
2.2 KiB
GDScript
85 lines
2.2 KiB
GDScript
extends Node2D
|
|
class_name Level
|
|
|
|
signal level_exited
|
|
signal level_ready
|
|
|
|
var _player:Player
|
|
var _camera:CameraGame
|
|
|
|
var is_active_level := false
|
|
|
|
export var game_state = GameState.States.GAME
|
|
|
|
export var level_entry_point := Vector2.ZERO
|
|
export var level_exit_point := Vector2.ZERO
|
|
|
|
export var exit_area_2d_path : NodePath
|
|
export var enter_area_2d_path : NodePath
|
|
|
|
var _exit_area_2d = null;
|
|
var _enter_area_2d = null;
|
|
|
|
export var camer_limits := {
|
|
"top": 0,
|
|
"right": 400,
|
|
"bottom": 400,
|
|
"left": 0,
|
|
}
|
|
|
|
func _ready():
|
|
self._exit_area_2d = get_node(exit_area_2d_path)
|
|
self._enter_area_2d = get_node(enter_area_2d_path)
|
|
pass
|
|
|
|
|
|
|
|
func _set_active(activated:bool = true):
|
|
is_active_level = activated;
|
|
if activated:
|
|
if _exit_area_2d != null: _exit_area_2d.connect("player_entered", self, "_on_ExitLevelAreaNext_player_entered")
|
|
if _enter_area_2d != null: _enter_area_2d.connect("player_entered", self, "_on_ExitLevelArea_player_entered")
|
|
emit_signal("level_ready")
|
|
|
|
func set_player(player:Player, is_entering:bool):
|
|
_player = player
|
|
_camera = _player.get_camera()
|
|
_set_camera_limits()
|
|
_set_player_position(is_entering)
|
|
add_child(player)
|
|
|
|
func remove_player():
|
|
remove_child(_player)
|
|
_camera = null
|
|
_player = null
|
|
|
|
func _set_camera_limits():
|
|
_camera.limit_top = camer_limits.top
|
|
_camera.limit_right = camer_limits.right
|
|
_camera.limit_bottom = camer_limits.bottom
|
|
_camera.limit_left = camer_limits.left
|
|
|
|
func _set_player_position(is_entering:bool):
|
|
_player.position = level_entry_point if is_entering else level_exit_point
|
|
_player.face_player(is_entering)
|
|
_player.respawn_position = _player.position
|
|
|
|
func set_exit_area_enabled(enabled:bool=true):
|
|
if _exit_area_2d != null: _exit_area_2d.set_block_signals(enabled)
|
|
|
|
func set_enter_area_enabled(enabled:bool=true):
|
|
if _enter_area_2d != null: _enter_area_2d.set_block_signals(enabled)
|
|
|
|
func _on_ExitLevelArea_player_entered(is_exit, zone) -> void:
|
|
print("_on_ExitLevelArea_player_entered")
|
|
self.is_active_level = false;
|
|
emit_signal("level_exited", false)
|
|
pass # Replace with function body.
|
|
|
|
|
|
func _on_ExitLevelAreaNext_player_entered(is_exit, zone) -> void:
|
|
print("_on_ExitLevelAreaNext_player_entered")
|
|
self.is_active_level = false;
|
|
emit_signal("level_exited", true)
|
|
pass # Replace with function body.
|