Add Entrypoint.keep_velocity and optimize level/entrypoint loading code

This commit is contained in:
ChaoticByte 2024-10-02 22:18:52 +02:00
parent 49fce1d69d
commit c6b91c31f2
No known key found for this signature in database

View file

@ -5,30 +5,37 @@ const mainmenu_player_pos: Vector2 = Vector2(0, 128 + 32)
class Entrypoint extends Object: class Entrypoint extends Object:
var scene_name: String var scene_name: String
var player_position: Vector2 var player_position: Vector2
var keep_velocity: bool
var initial_velocity: Vector2 var initial_velocity: Vector2
func _init( func _init(
scene_name_: String, scene_name_: String,
player_position_: Vector2, 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 initial_velocity_: Vector2 = Vector2.ZERO
) -> void: ) -> void:
self.scene_name = scene_name_ self.scene_name = scene_name_
self.player_position = player_position_ self.player_position = player_position_
self.keep_velocity = keep_velocity_
self.initial_velocity = initial_velocity_ self.initial_velocity = initial_velocity_
const SCENES = { const SCENES = {
"intro": "uid://c6w7lrydi43ts", "intro": "uid://c6w7lrydi43ts",
"test": "uid://dqf665b540tfg", "test": "uid://dqf665b540tfg",
} }
var ENTRYPOINTS = {
"intro_start": Entrypoint.new("intro", Vector2.ZERO),
"test": Entrypoint.new("test", Vector2.ZERO),
}
var MENU_SCENE: PackedScene = preload("res://menu/menu.tscn") var MENU_SCENE: PackedScene = preload("res://menu/menu.tscn")
var ENTRYPOINTS = {
"intro_start": Entrypoint.new("intro", Vector2(0, 0)),
"test": Entrypoint.new("test", Vector2(0, 200), false, Vector2(0, -500)),
}
# load that stuff # load that stuff
var current_scene_name: String = ""
func _pre_load_checks() -> bool: func _pre_load_checks() -> bool:
if NodeRegistry.level_root_container == null: if NodeRegistry.level_root_container == null:
push_error("Can't load level, level_root is not registered yet.") push_error("Can't load level, level_root is not registered yet.")
@ -38,7 +45,10 @@ func _pre_load_checks() -> bool:
return false return false
return true return true
func load_scene(scn_name: String) -> bool: # returns true on success 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(): if not _pre_load_checks():
return false return false
if not scn_name in SCENES: if not scn_name in SCENES:
@ -61,9 +71,11 @@ func load_entrypoint(ep_name: String) -> bool: # returns true on success
if not _pre_load_checks(): if not _pre_load_checks():
return false return false
var e: Entrypoint = ENTRYPOINTS[ep_name] var e: Entrypoint = ENTRYPOINTS[ep_name]
var loaded = false
if load_scene(e.scene_name): if load_scene(e.scene_name):
NodeRegistry.player.position = e.player_position NodeRegistry.player.position = e.player_position
NodeRegistry.player.velocity = e.initial_velocity if not e.keep_velocity or NodeRegistry.player.velocity == Vector2.ZERO:
NodeRegistry.player.velocity = e.initial_velocity
Gamestate.last_entrypoint = ep_name Gamestate.last_entrypoint = ep_name
Gamestate.save_slot() # save game Gamestate.save_slot() # save game
return true return true