This commit is contained in:
Andriy Yednarovych
2026-02-22 19:26:26 +01:00
parent fd1ff19c4c
commit e877c5f058
211 changed files with 9385 additions and 0 deletions

62
levels/areas/01.tscn Normal file

File diff suppressed because one or more lines are too long

30
levels/areas/02.tscn Normal file

File diff suppressed because one or more lines are too long

23
levels/areas/03.tscn Normal file

File diff suppressed because one or more lines are too long

44
levels/dungeons/d01.tscn Normal file

File diff suppressed because one or more lines are too long

292
levels/dungeons/d02.tscn Normal file

File diff suppressed because one or more lines are too long

39
levels/dungeons/d03.tscn Normal file

File diff suppressed because one or more lines are too long

18
levels/dungeons/d04.tscn Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,95 @@
@tool
class_name LevelTransation extends Area2D
enum SIDE {
LEFT,
RIGHT,
TOP,
BOTTOM
}
@export_file("*.tscn") var level
@export var target_area: String = "LevelManager"
@export var center_player := false
@export_category("Collision Area Settings")
@export_range(1, 12, 1, "or_greater")
var size: int = 2 :
set(new_size):
size = new_size
update_area()
@export var side: SIDE = SIDE.LEFT :
set(new_side):
side = new_side
update_area()
@export var snap_to_grid: bool = false :
set(new_snap_to_grid):
snap_to_grid = new_snap_to_grid
update_snap_to_grid()
@onready var collision_shape: CollisionShape2D = $CollisionShape2D
func _ready() -> void:
update_area()
if Engine.is_editor_hint():
return
monitoring = false
place_player()
await LevelManager.level_loaded
monitoring = true
body_entered.connect(on_enter)
func update_area() -> void:
var new_rect: Vector2 = Vector2(32, 32)
var new_position: Vector2 = Vector2.ZERO
if side == SIDE.TOP:
new_rect.x *= size
new_position.y -= 16
elif side == SIDE.BOTTOM:
new_rect.x *= size
new_position.y += 16
elif side == SIDE.LEFT:
new_rect.y *= size
new_position.x -= 16
elif side == SIDE.RIGHT:
new_rect.y *= size
new_position.x += 16
if collision_shape == null:
collision_shape = get_node("CollisionShape2D")
collision_shape.shape.size = new_rect
collision_shape.position = new_position
func update_snap_to_grid() -> void:
position.x = round(position.x / 16) * 16
position.y = round(position.y / 16) * 16
func on_enter(_node: Node2D) -> void:
LevelManager.load_new_level(level, target_area, get_offset())
func place_player() -> void:
if name != LevelManager.target_transition:
return
PlayerManager.set_player_position(global_position + LevelManager.position_offset)
func get_offset() -> Vector2:
var offset := Vector2.ZERO
var player_pos := PlayerManager.player.global_position
if side == SIDE.LEFT or side == SIDE.RIGHT:
if center_player:
offset.y = 0
else:
offset.y = player_pos.y - global_position.y
offset.x = 16
if side == SIDE.LEFT:
offset.x *= -1
else:
if center_player:
offset.x = 0
else:
offset.x = player_pos.x - global_position.x
offset.y = 16
if side == SIDE.TOP:
offset.y *= -1
return offset

View File

@@ -0,0 +1 @@
uid://xve4bvfude5f

View File

@@ -0,0 +1,18 @@
[gd_scene format=3 uid="uid://cpf3fr32ediqk"]
[ext_resource type="Script" uid="uid://xve4bvfude5f" path="res://levels/level_transition.gd" id="1_hvuti"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_smikd"]
resource_local_to_scene = true
size = Vector2(32, 64)
[node name="LevelManager" type="Area2D" unique_id=438390501]
collision_layer = 0
monitorable = false
script = ExtResource("1_hvuti")
level = "<null>"
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=930732106]
position = Vector2(-16, 0)
shape = SubResource("RectangleShape2D_smikd")
debug_color = Color(0.64724547, 0.33917212, 0.98769504, 0.41960785)

14
levels/player_spawn.tscn Normal file
View File

@@ -0,0 +1,14 @@
[gd_scene format=3 uid="uid://dao452qs5wu63"]
[ext_resource type="Script" uid="uid://ymk7h2a2b06t" path="res://levels/scripts/player_spawn.gd" id="1_2efx6"]
[ext_resource type="Texture2D" uid="uid://cge4rwsf016ej" path="res://player/sprites/PlayerSprite02.png" id="1_j6jwq"]
[node name="PlayerSpawn" type="Node2D" unique_id=792855586]
script = ExtResource("1_2efx6")
[node name="PlayerSprite" type="Sprite2D" parent="." unique_id=752985470]
modulate = Color(0.0627451, 0.49803922, 0.7254902, 0.30980393)
position = Vector2(0, -20)
texture = ExtResource("1_j6jwq")
hframes = 16
vframes = 3

10
levels/scripts/level.gd Normal file
View File

@@ -0,0 +1,10 @@
class_name Level extends Node2D
func _ready() -> void:
y_sort_enabled = true
PlayerManager.set_as_parent(self)
LevelManager.level_load_started.connect(free_level)
func free_level() -> void:
PlayerManager.unparent_player(self)
queue_free()

View File

@@ -0,0 +1 @@
uid://curqsb603j1yj

View File

@@ -0,0 +1,9 @@
extends Node2D
func _ready() -> void:
visible = false
if !PlayerManager.player_spawned:
PlayerManager.set_player_position(global_position)
PlayerManager.player_spawned = true

View File

@@ -0,0 +1 @@
uid://ymk7h2a2b06t