Add Entrypoint.keep_velocity and optimize level/entrypoint loading code
This commit is contained in:
parent
49fce1d69d
commit
c6b91c31f2
1 changed files with 20 additions and 8 deletions
|
@ -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,8 +71,10 @@ 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
|
||||||
|
if not e.keep_velocity or NodeRegistry.player.velocity == Vector2.ZERO:
|
||||||
NodeRegistry.player.velocity = e.initial_velocity
|
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
|
||||||
|
|
Reference in a new issue