many small changes, and few big ones
This commit is contained in:
parent
e8985f4e79
commit
a3ca623258
32 changed files with 391 additions and 247 deletions
83
core/globals/levels_core.gd
Normal file
83
core/globals/levels_core.gd
Normal file
|
@ -0,0 +1,83 @@
|
|||
extends Node
|
||||
|
||||
class Entrypoint extends Object:
|
||||
var scene_name: String
|
||||
var player_position: Vector2
|
||||
var keep_velocity: bool
|
||||
var initial_velocity: Vector2
|
||||
var lock_player: bool
|
||||
func _init(
|
||||
scene_name_: String,
|
||||
player_position_: Vector2,
|
||||
# keep player velocity
|
||||
# if player velocity is zero, use initial_velocity
|
||||
keep_velocity_: bool = true,
|
||||
# initial player velocity
|
||||
initial_velocity_: Vector2 = Vector2.ZERO,
|
||||
# lock player movement
|
||||
lock_player_: bool = false
|
||||
) -> void:
|
||||
self.scene_name = scene_name_
|
||||
self.player_position = player_position_
|
||||
self.keep_velocity = keep_velocity_
|
||||
self.initial_velocity = initial_velocity_
|
||||
self.lock_player = lock_player_
|
||||
|
||||
# load that stuff
|
||||
|
||||
var current_scene_name: String = ""
|
||||
|
||||
func _pre_load_checks() -> bool:
|
||||
if NodeRegistry.level_root_container == null:
|
||||
push_error("Can't load level, level_root_container is not registered yet.")
|
||||
return false
|
||||
if NodeRegistry.player == null:
|
||||
push_error("Can't load entrypoint, player is not registered yet.")
|
||||
return false
|
||||
return true
|
||||
|
||||
func load_scene(scn_name: String, force_reload: bool = false) -> bool:
|
||||
# returns true on success
|
||||
if current_scene_name == scn_name and not force_reload:
|
||||
return true # nothing to do :)
|
||||
if not _pre_load_checks():
|
||||
return false
|
||||
if not scn_name in LevelsDef.SCENES:
|
||||
push_error("Level " + scn_name + " doesn't exist.")
|
||||
return false
|
||||
unload_scene()
|
||||
var scn: Node2D = load(LevelsDef.SCENES[scn_name]).instantiate()
|
||||
NodeRegistry.level_root_container.add_child(scn)
|
||||
return true
|
||||
|
||||
func unload_scene():
|
||||
if NodeRegistry.level_root_container != null:
|
||||
for c in NodeRegistry.level_root_container.get_children():
|
||||
c.queue_free()
|
||||
|
||||
func load_entrypoint(ep_name: String) -> bool: # returns true on success
|
||||
if not ep_name in LevelsDef.ENTRYPOINTS:
|
||||
push_error("Entrypoint " + ep_name + " doesn't exist.")
|
||||
return false
|
||||
if not _pre_load_checks():
|
||||
return false
|
||||
var e: Entrypoint = LevelsDef.ENTRYPOINTS[ep_name]
|
||||
if load_scene(e.scene_name):
|
||||
NodeRegistry.player.position = e.player_position
|
||||
NodeRegistry.player.camera.call_deferred("reset_smoothing")
|
||||
if not e.keep_velocity or NodeRegistry.player.velocity == Vector2.ZERO:
|
||||
NodeRegistry.player.velocity = e.initial_velocity
|
||||
if e.lock_player:
|
||||
NodeRegistry.player.locked = true
|
||||
Gamestate.last_entrypoint = ep_name
|
||||
Gamestate.save_slot() # save game
|
||||
return true
|
||||
else:
|
||||
return false
|
||||
|
||||
func load_menu():
|
||||
if not _pre_load_checks():
|
||||
return false
|
||||
unload_scene()
|
||||
NodeRegistry.player.position = Vector2(0, 129)
|
||||
return load_scene("menu", true)
|
Reference in a new issue