This repository has been archived on 2025-09-28. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
rectangular/core/globals/levels.gd

60 lines
1.4 KiB
GDScript3
Raw Normal View History

extends Node
class Entrypoint extends Object:
var scene_name: String
var player_position: Vector2
var reset_physics: bool
func _init(
scene_name_: String,
player_position_: Vector2,
2024-09-28 14:44:17 +02:00
reset_physics_: bool
) -> void:
self.scene_name = scene_name_
self.player_position = player_position_
2024-09-28 14:44:17 +02:00
self.reset_physics = reset_physics_
const SCENES = {
"intro": "uid://c6w7lrydi43ts"
}
var ENTRYPOINTS = {
"intro_start": Entrypoint.new("intro", Vector2(0, 0), true)
}
# load that stuff
var level_root: Node
var player: Node2D
func load_scene(scn_name: String) -> bool: # returns true on success
if level_root == null:
push_error("Can't load level, level_root is not registered yet.")
return false
if not scn_name in SCENES:
push_error("Level " + scn_name + " doesn't exist.")
return false
unload_scene()
var scn = load(SCENES[scn_name])
level_root.add_child(scn.instantiate())
return true
func unload_scene():
for c in level_root.get_children():
c.queue_free()
func load_entrypoint(ep_name: String) -> bool: # returns true on success
if not ep_name in ENTRYPOINTS:
push_error("Entrypoint " + ep_name + " doesn't exist.")
return false
if player == null:
push_error("Can't load entrypoint, player is not registered yet.")
return false
var e: Entrypoint = ENTRYPOINTS[ep_name]
if load_scene(e.scene_name):
player.position = e.player_position
2024-09-28 14:44:17 +02:00
if e.reset_physics:
player.reset_physics()
return true
else:
return false