#Room chance system for 2D game.

3 messages · Page 1 of 1 (latest)

icy matrix
#
#room_manager.gd
extends Node

func load_room(room: PackedScene, door: String, player: CharacterBody2D):
    if get_child_count() > 0:
        var old_room = get_child(0)
        old_room.queue_free()
    var new_room = room.instantiate()
    add_child(new_room)
    for child in new_room.get_children():
        if child.is_in_group('door'):
            child.door_used.connect(Callable(self, "load_room"))
    var target_door = new_room.find_child(door)
    if target_door:
        var marker = target_door.get_node('Marker2D')
        player.global_position = marker.global_position
    else:
        print("Can't find door!")```
#
#player.gd
extends CharacterBody2D

const SPEED = 300.0
var current_door = null

func _process(delta: float) -> void:
    if Input.is_action_just_pressed("interact"):
        if current_door != null:
            current_door.send_info()
            
func _physics_process(delta: float) -> void:
    var direction := Input.get_axis("ui_left", "ui_right")
    if direction:
        velocity.x = direction * SPEED
    else:
        velocity.x = move_toward(velocity.x, 0, SPEED)

    move_and_slide()

#
#main_scene.gd
extends Node

@export var start_room: PackedScene
@export var spawnpoint: String
@onready var room_manager: Node = $RoomManager
@onready var player: CharacterBody2D = $Player

func _ready() -> void:
    if start_room:
        room_manager.load_room(start_room,spawnpoint,player)