From 20a708651fc9aea6a0576e22bbfddb05f4ca934f Mon Sep 17 00:00:00 2001 From: mehbark Date: Sun, 4 May 2025 18:45:26 -0400 Subject: [PATCH] scene-based levels edited in godot --- board.gd | 40 +++------------- level/level_00.tscn | 97 +++++++++++++++++++++++++++++++++++++++ level/level_01.tscn | 101 ++++++++++++++++++++++++++++++++++++++++ level/level_02.tscn | 85 ++++++++++++++++++++++++++++++++++ level/level_03.tscn | 107 +++++++++++++++++++++++++++++++++++++++++++ level/level_1.tscn | 11 ----- levels.txt | 50 -------------------- main.gd | 26 +++++------ main.tscn | 5 +- piece.gd | 11 +++-- piece/ball.tscn | 1 + piece/floor_ice.tscn | 1 + piece/goal.tscn | 1 + piece/player.tscn | 1 + piece/wall.tscn | 1 + project.godot | 3 +- 16 files changed, 424 insertions(+), 117 deletions(-) create mode 100644 level/level_00.tscn create mode 100644 level/level_01.tscn create mode 100644 level/level_02.tscn create mode 100644 level/level_03.tscn delete mode 100644 level/level_1.tscn delete mode 100644 levels.txt diff --git a/board.gd b/board.gd index 183748d..6163d54 100644 --- a/board.gd +++ b/board.gd @@ -1,20 +1,19 @@ class_name Board extends Node3D -@export var dims: Vector2i +var dims: Vector2i -# idea: board has very little logic, delegates to something else -# l8r tho - -# literally just linearly search to find pieces at a position -# children +func _ready(): + for piece in pieces(): + dims.x = max(dims.x, piece.lpos.x) + dims.y = max(dims.y, piece.lpos.y) # for zooming out to see the whole puzzle func top_left_aabb() -> AABB: return AABB(position-Vector3(1,0,1), Vector3.ONE*0.1) func bottom_right_aabb() -> AABB: - return AABB(position + Vector3(dims.x, 0, dims.y), Vector3.ONE*0.1) + return AABB(position + Vector3(dims.x, 0, dims.y) + Vector3(1,0,2), Vector3.ONE*0.1) # todo: Array[Piece] func pieces() -> Array: @@ -57,33 +56,6 @@ func add_pieces(piece: Array[Piece]): for p in piece: add_piece(p) -static func from_string(src: String) -> Board: - var lines := src.lstrip("\n").rstrip("\n").split("\n") - - var width := 0 - for line in lines: - width = max(width, line.length()) - - var dims := Vector2i(width, lines.size()) - - var board := Board.new() - board.dims = dims - - for y in range(lines.size()): - var line := lines[y] - for x in range(line.length()): - var c := line[x] - var pos := Vector2i(x, y) - match c: - ".": board.add_piece(Piece.goal(pos)) - "+": board.add_pieces([Piece.goal(pos), Piece.player(pos)]) - "o": board.add_piece(Piece.ball(pos)) - "O": assert(false) - "@": board.add_piece(Piece.player(pos)) - "#": board.add_piece(Piece.wall(pos)) - "_": board.add_piece(Piece.floor_ice(pos)) - return board - func do_step(): for piece in pieces(): piece.do_step(self) diff --git a/level/level_00.tscn b/level/level_00.tscn new file mode 100644 index 0000000..f603f3d --- /dev/null +++ b/level/level_00.tscn @@ -0,0 +1,97 @@ +[gd_scene load_steps=6 format=3 uid="uid://de1snxsqng03d"] + +[ext_resource type="Script" uid="uid://c8ywa33v3jq7t" path="res://board.gd" id="1_4ytxd"] +[ext_resource type="PackedScene" uid="uid://bkaa4sl1n2f5w" path="res://piece/wall.tscn" id="2_hctjl"] +[ext_resource type="PackedScene" uid="uid://bghr6ew34loyb" path="res://piece/ball.tscn" id="3_cvw8f"] +[ext_resource type="PackedScene" uid="uid://cnjmu3qesbndk" path="res://piece/player.tscn" id="4_b7tgh"] +[ext_resource type="PackedScene" uid="uid://uf8vnylfqal1" path="res://piece/goal.tscn" id="5_p5icy"] + +[node name="Level1" type="Node3D"] +script = ExtResource("1_4ytxd") +metadata/_custom_type_script = "uid://c8ywa33v3jq7t" + +[node name="Wall" parent="." instance=ExtResource("2_hctjl")] + +[node name="Wall2" parent="." instance=ExtResource("2_hctjl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 0.6, 0.5) + +[node name="Wall3" parent="." instance=ExtResource("2_hctjl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0.6, 0.5) + +[node name="Wall4" parent="." instance=ExtResource("2_hctjl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.5, 0.6, 0.5) + +[node name="Wall5" parent="." instance=ExtResource("2_hctjl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 0.6, 0.5) + +[node name="Wall6" parent="." instance=ExtResource("2_hctjl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.5, 0.6, 0.5) + +[node name="Wall7" parent="." instance=ExtResource("2_hctjl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, 0.6, 0.5) + +[node name="Wall8" parent="." instance=ExtResource("2_hctjl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, 0.6, 1.5) + +[node name="Wall9" parent="." instance=ExtResource("2_hctjl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, 0.6, 2.5) + +[node name="Wall10" parent="." instance=ExtResource("2_hctjl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, 0.6, 3.5) + +[node name="Wall11" parent="." instance=ExtResource("2_hctjl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.5, 0.6, 3.5) + +[node name="Wall12" parent="." instance=ExtResource("2_hctjl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 0.6, 3.5) + +[node name="Wall13" parent="." instance=ExtResource("2_hctjl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 0.6, 4.5) + +[node name="Wall14" parent="." instance=ExtResource("2_hctjl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 0.6, 5.5) + +[node name="Wall15" parent="." instance=ExtResource("2_hctjl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 0.6, 6.5) + +[node name="Wall16" parent="." instance=ExtResource("2_hctjl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.5, 0.6, 6.5) + +[node name="Wall17" parent="." instance=ExtResource("2_hctjl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0.6, 6.5) + +[node name="Wall18" parent="." instance=ExtResource("2_hctjl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 0.6, 6.5) + +[node name="Wall19" parent="." instance=ExtResource("2_hctjl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.6, 6.5) + +[node name="Wall20" parent="." instance=ExtResource("2_hctjl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.6, 5.5) + +[node name="Wall21" parent="." instance=ExtResource("2_hctjl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.6, 4.5) + +[node name="Wall22" parent="." instance=ExtResource("2_hctjl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.6, 3.5) + +[node name="Wall23" parent="." instance=ExtResource("2_hctjl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.6, 2.5) + +[node name="Wall24" parent="." instance=ExtResource("2_hctjl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.6, 1.5) + +[node name="Ball" parent="." instance=ExtResource("3_cvw8f")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 0.3, 2.5) + +[node name="Ball2" parent="." instance=ExtResource("3_cvw8f")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0.3, 3.5) + +[node name="Player" parent="." instance=ExtResource("4_b7tgh")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 1, 2.5) + +[node name="Goal" parent="." instance=ExtResource("5_p5icy")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0, 5.5) + +[node name="Goal2" parent="." instance=ExtResource("5_p5icy")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.5, 0, 2.5) diff --git a/level/level_01.tscn b/level/level_01.tscn new file mode 100644 index 0000000..6cd9ee7 --- /dev/null +++ b/level/level_01.tscn @@ -0,0 +1,101 @@ +[gd_scene load_steps=7 format=3 uid="uid://crka6v44sy30g"] + +[ext_resource type="Script" uid="uid://c8ywa33v3jq7t" path="res://board.gd" id="1_ij31a"] +[ext_resource type="PackedScene" uid="uid://bkaa4sl1n2f5w" path="res://piece/wall.tscn" id="2_v6ry1"] +[ext_resource type="PackedScene" uid="uid://bghr6ew34loyb" path="res://piece/ball.tscn" id="3_y6g1l"] +[ext_resource type="PackedScene" uid="uid://cnjmu3qesbndk" path="res://piece/player.tscn" id="4_dqkq3"] +[ext_resource type="PackedScene" uid="uid://uf8vnylfqal1" path="res://piece/goal.tscn" id="5_rvgtg"] +[ext_resource type="PackedScene" uid="uid://cyi67vbw8e0iy" path="res://piece/floor_ice.tscn" id="6_v6ry1"] + +[node name="Level1" type="Node3D"] +script = ExtResource("1_ij31a") +metadata/_custom_type_script = "uid://c8ywa33v3jq7t" + +[node name="Wall" parent="." instance=ExtResource("2_v6ry1")] + +[node name="Wall2" parent="." instance=ExtResource("2_v6ry1")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 0.6, 0.5) + +[node name="Wall3" parent="." instance=ExtResource("2_v6ry1")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0.6, 0.5) + +[node name="Wall4" parent="." instance=ExtResource("2_v6ry1")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.5, 0.6, 0.5) + +[node name="Wall5" parent="." instance=ExtResource("2_v6ry1")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 0.6, 0.5) + +[node name="Wall6" parent="." instance=ExtResource("2_v6ry1")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.5, 0.6, 0.5) + +[node name="Wall7" parent="." instance=ExtResource("2_v6ry1")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, 0.6, 0.5) + +[node name="Wall8" parent="." instance=ExtResource("2_v6ry1")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, 0.6, 1.5) + +[node name="Wall9" parent="." instance=ExtResource("2_v6ry1")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, 0.6, 2.5) + +[node name="Wall10" parent="." instance=ExtResource("2_v6ry1")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, 0.6, 3.5) + +[node name="Wall11" parent="." instance=ExtResource("2_v6ry1")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.5, 0.6, 3.5) + +[node name="Wall12" parent="." instance=ExtResource("2_v6ry1")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 0.6, 3.5) + +[node name="Wall13" parent="." instance=ExtResource("2_v6ry1")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 0.6, 4.5) + +[node name="Wall14" parent="." instance=ExtResource("2_v6ry1")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 0.6, 5.5) + +[node name="Wall15" parent="." instance=ExtResource("2_v6ry1")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 0.6, 6.5) + +[node name="Wall16" parent="." instance=ExtResource("2_v6ry1")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.5, 0.6, 6.5) + +[node name="Wall17" parent="." instance=ExtResource("2_v6ry1")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0.6, 6.5) + +[node name="Wall18" parent="." instance=ExtResource("2_v6ry1")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 0.6, 6.5) + +[node name="Wall19" parent="." instance=ExtResource("2_v6ry1")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.6, 6.5) + +[node name="Wall20" parent="." instance=ExtResource("2_v6ry1")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.6, 5.5) + +[node name="Wall21" parent="." instance=ExtResource("2_v6ry1")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.6, 4.5) + +[node name="Wall22" parent="." instance=ExtResource("2_v6ry1")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.6, 3.5) + +[node name="Wall23" parent="." instance=ExtResource("2_v6ry1")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.6, 2.5) + +[node name="Wall24" parent="." instance=ExtResource("2_v6ry1")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.6, 1.5) + +[node name="Ball" parent="." instance=ExtResource("3_y6g1l")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 0.3, 2.5) + +[node name="Ball2" parent="." instance=ExtResource("3_y6g1l")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0.254827, 3.5) + +[node name="Player" parent="." instance=ExtResource("4_dqkq3")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 1, 2.5) + +[node name="Goal" parent="." instance=ExtResource("5_rvgtg")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0, 5.5) + +[node name="Goal2" parent="." instance=ExtResource("5_rvgtg")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.5, 0, 2.5) + +[node name="FloorIce" parent="." instance=ExtResource("6_v6ry1")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0, 4.5) diff --git a/level/level_02.tscn b/level/level_02.tscn new file mode 100644 index 0000000..bc074f9 --- /dev/null +++ b/level/level_02.tscn @@ -0,0 +1,85 @@ +[gd_scene load_steps=6 format=3 uid="uid://qwsvaao1ro8v"] + +[ext_resource type="Script" uid="uid://c8ywa33v3jq7t" path="res://board.gd" id="1_ijmwx"] +[ext_resource type="PackedScene" uid="uid://bkaa4sl1n2f5w" path="res://piece/wall.tscn" id="2_0wnyk"] +[ext_resource type="PackedScene" uid="uid://bghr6ew34loyb" path="res://piece/ball.tscn" id="3_eh72w"] +[ext_resource type="PackedScene" uid="uid://cnjmu3qesbndk" path="res://piece/player.tscn" id="4_80pda"] +[ext_resource type="PackedScene" uid="uid://uf8vnylfqal1" path="res://piece/goal.tscn" id="5_pj7np"] + +[node name="Level1" type="Node3D"] +script = ExtResource("1_ijmwx") +metadata/_custom_type_script = "uid://c8ywa33v3jq7t" + +[node name="Wall" parent="." instance=ExtResource("2_0wnyk")] + +[node name="Wall2" parent="." instance=ExtResource("2_0wnyk")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 0.600054, 0.5) + +[node name="Wall3" parent="." instance=ExtResource("2_0wnyk")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0.600054, 0.5) + +[node name="Wall4" parent="." instance=ExtResource("2_0wnyk")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.5, 0.600054, 0.5) + +[node name="Wall5" parent="." instance=ExtResource("2_0wnyk")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 0.600054, 0.5) + +[node name="Wall13" parent="." instance=ExtResource("2_0wnyk")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 0.600054, 1.5) + +[node name="Wall14" parent="." instance=ExtResource("2_0wnyk")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 0.600054, 2.5) + +[node name="Wall16" parent="." instance=ExtResource("2_0wnyk")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.5, 0.600054, 2.5) + +[node name="Wall17" parent="." instance=ExtResource("2_0wnyk")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.5, 0.600054, 3.5) + +[node name="Wall18" parent="." instance=ExtResource("2_0wnyk")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.5, 0.600054, 4.5) + +[node name="Wall19" parent="." instance=ExtResource("2_0wnyk")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.5, 0.600054, 5.5) + +[node name="Wall20" parent="." instance=ExtResource("2_0wnyk")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 0.600054, 5.5) + +[node name="Wall21" parent="." instance=ExtResource("2_0wnyk")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.5, 0.600054, 5.5) + +[node name="Wall6" parent="." instance=ExtResource("2_0wnyk")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.600054, 4.5) + +[node name="Wall9" parent="." instance=ExtResource("2_0wnyk")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.600054, 3.5) + +[node name="Wall11" parent="." instance=ExtResource("2_0wnyk")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.600054, 2.5) + +[node name="Wall12" parent="." instance=ExtResource("2_0wnyk")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.600054, 1.5) + +[node name="Wall7" parent="." instance=ExtResource("2_0wnyk")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 0.600054, 4.5) + +[node name="Wall8" parent="." instance=ExtResource("2_0wnyk")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0.600054, 4.5) + +[node name="Wall10" parent="." instance=ExtResource("2_0wnyk")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0.600054, 5.5) + +[node name="Ball" parent="." instance=ExtResource("3_eh72w")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.5, 0.3, 4.5) + +[node name="Ball2" parent="." instance=ExtResource("3_eh72w")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 0.3, 3.5) + +[node name="Goal" parent="." instance=ExtResource("5_pj7np")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 0.057544, 4.5) + +[node name="Ball3" parent="." instance=ExtResource("3_eh72w")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0.3, 2.5) + +[node name="Player" parent="." instance=ExtResource("4_80pda")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 1, 1.5) diff --git a/level/level_03.tscn b/level/level_03.tscn new file mode 100644 index 0000000..aa4b491 --- /dev/null +++ b/level/level_03.tscn @@ -0,0 +1,107 @@ +[gd_scene load_steps=7 format=3 uid="uid://cx46h6v1oxnxr"] + +[ext_resource type="Script" uid="uid://c8ywa33v3jq7t" path="res://board.gd" id="1_6umy4"] +[ext_resource type="PackedScene" uid="uid://bkaa4sl1n2f5w" path="res://piece/wall.tscn" id="2_4ebh2"] +[ext_resource type="PackedScene" uid="uid://bghr6ew34loyb" path="res://piece/ball.tscn" id="3_yrd6d"] +[ext_resource type="PackedScene" uid="uid://uf8vnylfqal1" path="res://piece/goal.tscn" id="4_2agqu"] +[ext_resource type="PackedScene" uid="uid://cnjmu3qesbndk" path="res://piece/player.tscn" id="5_ykc5s"] +[ext_resource type="PackedScene" uid="uid://cyi67vbw8e0iy" path="res://piece/floor_ice.tscn" id="6_4ebh2"] + +[node name="Level1" type="Node3D"] +script = ExtResource("1_6umy4") +metadata/_custom_type_script = "uid://c8ywa33v3jq7t" + +[node name="Wall" parent="." instance=ExtResource("2_4ebh2")] + +[node name="Wall21" parent="." instance=ExtResource("2_4ebh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.600054, 1.5) + +[node name="Wall2" parent="." instance=ExtResource("2_4ebh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 0.600054, 0.5) + +[node name="Wall3" parent="." instance=ExtResource("2_4ebh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0.600054, 0.5) + +[node name="Wall4" parent="." instance=ExtResource("2_4ebh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.5, 0.600054, 0.5) + +[node name="Wall5" parent="." instance=ExtResource("2_4ebh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 0.600054, 0.5) + +[node name="Wall6" parent="." instance=ExtResource("2_4ebh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.5, 0.600054, 0.5) + +[node name="Wall7" parent="." instance=ExtResource("2_4ebh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, 0.600054, 0.5) + +[node name="Wall8" parent="." instance=ExtResource("2_4ebh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.5, 0.600054, 0.5) + +[node name="Wall9" parent="." instance=ExtResource("2_4ebh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8.5, 0.600054, 0.5) + +[node name="Wall10" parent="." instance=ExtResource("2_4ebh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.5, 0.600054, 0.5) + +[node name="Wall11" parent="." instance=ExtResource("2_4ebh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.600054, 2.5) + +[node name="Wall22" parent="." instance=ExtResource("2_4ebh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 11.5, 0.600054, 0.5) + +[node name="Wall23" parent="." instance=ExtResource("2_4ebh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 11.5, 0.600054, 1.5) + +[node name="Wall24" parent="." instance=ExtResource("2_4ebh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 11.5, 0.600054, 2.5) + +[node name="Wall12" parent="." instance=ExtResource("2_4ebh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 0.600054, 2.5) + +[node name="Wall13" parent="." instance=ExtResource("2_4ebh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0.600054, 2.5) + +[node name="Wall14" parent="." instance=ExtResource("2_4ebh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.5, 0.600054, 2.5) + +[node name="Wall15" parent="." instance=ExtResource("2_4ebh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 0.600054, 2.5) + +[node name="Wall16" parent="." instance=ExtResource("2_4ebh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.5, 0.600054, 2.5) + +[node name="Wall17" parent="." instance=ExtResource("2_4ebh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, 0.600054, 2.5) + +[node name="Wall25" parent="." instance=ExtResource("2_4ebh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.5, 0.600054, 0.5) + +[node name="Wall26" parent="." instance=ExtResource("2_4ebh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.5, 0.600054, 2.5) + +[node name="Wall18" parent="." instance=ExtResource("2_4ebh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.5, 0.600054, 2.5) + +[node name="Wall19" parent="." instance=ExtResource("2_4ebh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8.5, 0.600054, 2.5) + +[node name="Wall20" parent="." instance=ExtResource("2_4ebh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.5, 0.600054, 2.5) + +[node name="Player" parent="." instance=ExtResource("5_ykc5s")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 1, 1.5) + +[node name="Ball" parent="." instance=ExtResource("3_yrd6d")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 0.3, 1.5) + +[node name="Goal" parent="." instance=ExtResource("4_2agqu")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.5, 0.057544, 1.5) + +[node name="Ball2" parent="." instance=ExtResource("3_yrd6d")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.5, 0.3, 1.5) + +[node name="FloorIce" parent="." instance=ExtResource("6_4ebh2")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8.5, 0, 1.5) + +[node name="Goal2" parent="." instance=ExtResource("4_2agqu")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.5, 0.057544, 1.5) diff --git a/level/level_1.tscn b/level/level_1.tscn deleted file mode 100644 index cc72c06..0000000 --- a/level/level_1.tscn +++ /dev/null @@ -1,11 +0,0 @@ -[gd_scene load_steps=3 format=3 uid="uid://de1snxsqng03d"] - -[ext_resource type="Script" uid="uid://c8ywa33v3jq7t" path="res://board.gd" id="1_lx8gb"] -[ext_resource type="PackedScene" uid="uid://bkaa4sl1n2f5w" path="res://piece/wall.tscn" id="2_lx8gb"] - -[node name="Level1" type="Node3D"] -script = ExtResource("1_lx8gb") -metadata/_custom_type_script = "uid://c8ywa33v3jq7t" - -[node name="Wall" parent="." instance=ExtResource("2_lx8gb")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0, 0.5) diff --git a/levels.txt b/levels.txt deleted file mode 100644 index 0885f0c..0000000 --- a/levels.txt +++ /dev/null @@ -1,50 +0,0 @@ -; legend: -; # - wall -; @ - player -; o - ball -; O - big ball (more momentum! l8r) -; . - goal -; space - default, rough floor (-1 dlvel) -; _ - ice (0 dlvel) - -; cool idea for first two levels: -; first level just plays like slightly weird sokoban -; second level is the same layout but the *floor* is different -; TODO: multiple levels (could just be stacked on top) -; TODO: notation for ball on ice -; TODO: levels.gd - -; 1 - -####### -# # -#@ o.# -# o ### -# # -# . # -##### - -; 2 - -####### -# # -#@ o.# -# o ### -# _ # -# . # -##### - -; 3 (diagonal movement should definitely be a sick twist for l8r) - -##### -#@ # -# o ## -# o# -###o.# - #### - -; 4 pool - -############# -# @ o. o_ . # -############# diff --git a/main.gd b/main.gd index 94c37e4..d84268e 100644 --- a/main.gd +++ b/main.gd @@ -8,10 +8,15 @@ extends Node3D @onready var camera: Camera3D = $Camera var hist := UndoRedo.new() -@onready var board: Board = $Board +var board: Board var player: Piece -var level_num := 0 -var levels_src: PackedStringArray +var level_num := -1 +var levels: Array[PackedScene] = [ + preload("res://level/level_00.tscn"), + preload("res://level/level_01.tscn"), + preload("res://level/level_02.tscn"), + preload("res://level/level_03.tscn"), +] var time := 0 var advancing := false @@ -21,8 +26,6 @@ var advancing := false @onready var sounds_redo := audio_stream_randomizer_from_dir("res://sfx/redo") func _ready() -> void: - var file := FileAccess.open("res://levels.txt", FileAccess.READ) - levels_src = file.get_as_text().split("\n\n") advance_level() func _process(delta: float) -> void: @@ -132,24 +135,21 @@ func won() -> bool: func advance_level(): hist.clear_history() advancing = true - if level_num != 0: + if level_num >= 0: print("level won") await get_tree().create_timer(0.5).timeout advancing = false time = 0 level_num += 1 - if level_num >= levels_src.size(): + if level_num >= levels.size(): print("you win") return - while levels_src[level_num].contains(";") or ("@" not in levels_src[level_num] and "+" not in levels_src[level_num]): - level_num += 1 - print(levels_src[level_num]) - board.queue_free() - board = Board.from_string(levels_src[level_num]) + if board: board.queue_free() + board = levels[level_num].instantiate() + add_child(board) for piece in board.pieces(): if piece.type == Piece.Type.Player: player = piece - add_child(board) $TopLeft.aabb = board.top_left_aabb() $BottomRight.aabb = board.bottom_right_aabb() var center := (board.top_left_aabb().position + board.bottom_right_aabb().position)/2 diff --git a/main.tscn b/main.tscn index 738c639..8ce4793 100644 --- a/main.tscn +++ b/main.tscn @@ -1,7 +1,6 @@ -[gd_scene load_steps=9 format=3 uid="uid://lrk2whqxl0w0"] +[gd_scene load_steps=8 format=3 uid="uid://lrk2whqxl0w0"] [ext_resource type="Script" uid="uid://c707s0tgd88pg" path="res://main.gd" id="1_ig7tw"] -[ext_resource type="PackedScene" uid="uid://de1snxsqng03d" path="res://level/level_1.tscn" id="2_lquwl"] [ext_resource type="Texture2D" uid="uid://crahyipmcudoy" path="res://ui/undo.png" id="3_lquwl"] [ext_resource type="Texture2D" uid="uid://dyj5el5iro1cb" path="res://ui/redo.png" id="4_7mycd"] [ext_resource type="Texture2D" uid="uid://cbb1q0usxd6ex" path="res://ui/restart.png" id="5_272bh"] @@ -20,8 +19,6 @@ ambient_light_color = Color(1, 1, 1, 1) [node name="Main" type="Node3D"] script = ExtResource("1_ig7tw") -[node name="Board" parent="." instance=ExtResource("2_lquwl")] - [node name="Camera" type="Camera3D" parent="."] transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 1.5, 0) fov = 30.0 diff --git a/piece.gd b/piece.gd index b993c5c..ee5149d 100644 --- a/piece.gd +++ b/piece.gd @@ -19,6 +19,8 @@ enum Type { @export_range(0.1, 50) var anim_speed := 10.0 @export_range(0.1, 50) var anim_speed_slow := 2.0 +#TODO: {un,}do_bump animation method (good visual clarity) + ## logical position var lpos: Vector2i: get: @@ -26,7 +28,8 @@ var lpos: Vector2i: set(val): position = target_pos start_pos = position - target_pos = Vector3(val.x, position.y, val.y) + # we offset by 0.5 to be in the middle of the square (for easier editing) + target_pos = Vector3(val.x + 0.5, position.y, val.y + 0.5) anim_progress = 0 ## logical velocity @@ -46,9 +49,9 @@ func do_step(board: Board): var move := lvel.clampi(-1, 1) var new_pos := lpos + move if board.solid_at(new_pos): - var ball := board.type_at(new_pos, Piece.Type.Ball) - if ball: - ball.do_push(lvel-move).call() + var ball_here := board.type_at(new_pos, Piece.Type.Ball) + if ball_here: + ball_here.do_push(lvel-move).call() lvel = -move else: lpos = lpos diff --git a/piece/ball.tscn b/piece/ball.tscn index 61b2301..8ac652e 100644 --- a/piece/ball.tscn +++ b/piece/ball.tscn @@ -4,6 +4,7 @@ [ext_resource type="Script" uid="uid://bq3a5hhccxndn" path="res://piece.gd" id="2_c3ygy"] [node name="Ball" type="MeshInstance3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.3, 0.5) mesh = ExtResource("1_qixli") script = ExtResource("2_c3ygy") type = 2 diff --git a/piece/floor_ice.tscn b/piece/floor_ice.tscn index fca98a6..5f9ca54 100644 --- a/piece/floor_ice.tscn +++ b/piece/floor_ice.tscn @@ -4,6 +4,7 @@ [ext_resource type="Script" uid="uid://bq3a5hhccxndn" path="res://piece.gd" id="2_lpfou"] [node name="FloorIce" type="MeshInstance3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0, 0.5) mesh = ExtResource("1_2idvc") script = ExtResource("2_lpfou") type = 4 diff --git a/piece/goal.tscn b/piece/goal.tscn index d61ee42..8fee14c 100644 --- a/piece/goal.tscn +++ b/piece/goal.tscn @@ -4,6 +4,7 @@ [ext_resource type="Script" uid="uid://bq3a5hhccxndn" path="res://piece.gd" id="2_nqrds"] [node name="Goal" type="MeshInstance3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.057544, 0.5) mesh = ExtResource("1_ek53k") script = ExtResource("2_nqrds") type = 1 diff --git a/piece/player.tscn b/piece/player.tscn index b17da05..f229c2c 100644 --- a/piece/player.tscn +++ b/piece/player.tscn @@ -4,6 +4,7 @@ [ext_resource type="Script" uid="uid://bq3a5hhccxndn" path="res://piece.gd" id="2_5o3x0"] [node name="Player" type="MeshInstance3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 1, 0.5) mesh = ExtResource("1_3owwe") script = ExtResource("2_5o3x0") type = 3 diff --git a/piece/wall.tscn b/piece/wall.tscn index 2e3d88b..5fc75e9 100644 --- a/piece/wall.tscn +++ b/piece/wall.tscn @@ -4,6 +4,7 @@ [ext_resource type="Script" uid="uid://bq3a5hhccxndn" path="res://piece.gd" id="2_j8o2k"] [node name="Wall" type="MeshInstance3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.600054, 0.5) mesh = ExtResource("1_ostjl") script = ExtResource("2_j8o2k") metadata/_custom_type_script = "uid://bq3a5hhccxndn" diff --git a/project.godot b/project.godot index 157adb9..a3dc510 100644 --- a/project.godot +++ b/project.godot @@ -10,7 +10,8 @@ config_version=5 [application] -config/name="sokoban poc" +config/name="rolltime" +config/description="it's rolltime" run/main_scene="uid://lrk2whqxl0w0" config/features=PackedStringArray("4.4", "GL Compatibility") config/icon="res://icon.svg"