platformer-game-test/src/GameWorld/Levels/Level.gd

80 lines
1.9 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
var level_coords :=Vector2.ZERO
export(Vector2) var prev_level = null
export var camer_limits := {
"top": 0,
"right": 400,
"bottom": 400,
"left": 0,
}
func _ready():
pass
func _set_active(activated:bool, prev_level_:Vector2):
is_active_level = activated
self.prev_level = prev_level_
if activated:
for warp in _get_all_warps():
warp.connect("player_entered", self, "_on_WarpZone_player_entered")
emit_signal("level_ready")
func set_player(player:Player, is_entering:bool, spesific_position=null):
_player = player
_camera = _player.get_camera()
_set_camera_limits()
_set_player_position(is_entering, spesific_position)
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, spesific_position=null):
if spesific_position != null:
_player.position = spesific_position
else:
_player.position = level_entry_point if is_entering else level_exit_point
_player.face_player(is_entering)
_player.respawn_position = _player.position
func _on_WarpZone_player_entered(is_exit, to_coords, position) -> void:
print("_on_WarpZone_player_entered is_exit=%s to_coord=%s position=%s" % [is_exit, to_coords, position])
self.is_active_level = false;
emit_signal("level_exited", is_exit, to_coords)
pass # Replace with function body.
func _get_all_warps():
var warps := []
for node in get_children():
if node.is_in_group("WarpZones"):
warps.push_back(node)
return warps