diff --git a/board.gd b/board.gd index 353cb30..fbb73e4 100644 --- a/board.gd +++ b/board.gd @@ -49,8 +49,8 @@ func type_at(pos: Vector2i, type: Piece.Type) -> Piece: func solid_at(pos: Vector2i) -> bool: return any_at(pos, func(p): return p.type == Piece.Type.Wall or p.type == Piece.Type.Ball or p.type == Piece.Type.Player) -func passable_at(pos: Vector2i) -> bool: - return not solid_at(pos) +func passable_at(pos: Vector2i, for_player := false) -> bool: + return not solid_at(pos) and not (for_player and type_at(pos, Piece.Type.PlayerBarrier)) func remove_piece(piece: Piece): remove_child(piece) diff --git a/level/player_barrier_01.tscn b/level/player_barrier_01.tscn new file mode 100644 index 0000000..627c3c0 --- /dev/null +++ b/level/player_barrier_01.tscn @@ -0,0 +1,95 @@ +[gd_scene load_steps=7 format=3 uid="uid://dl5w8rbk60gwm"] + +[ext_resource type="Script" uid="uid://c8ywa33v3jq7t" path="res://board.gd" id="1_tgj2k"] +[ext_resource type="PackedScene" uid="uid://bkaa4sl1n2f5w" path="res://piece/wall.tscn" id="2_s4for"] +[ext_resource type="PackedScene" uid="uid://bghr6ew34loyb" path="res://piece/ball.tscn" id="3_pphtv"] +[ext_resource type="PackedScene" uid="uid://cnjmu3qesbndk" path="res://piece/player.tscn" id="4_lac8a"] +[ext_resource type="PackedScene" uid="uid://uf8vnylfqal1" path="res://piece/goal.tscn" id="5_p20hb"] +[ext_resource type="PackedScene" uid="uid://bxgv16ue166pp" path="res://piece/player_barrier.tscn" id="6_s4for"] + +[node name="Level1" type="Node3D"] +script = ExtResource("1_tgj2k") +metadata/_custom_type_script = "uid://c8ywa33v3jq7t" + +[node name="Wall" parent="." instance=ExtResource("2_s4for")] + +[node name="Wall2" parent="." instance=ExtResource("2_s4for")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 0.6, 0.5) + +[node name="Wall3" parent="." instance=ExtResource("2_s4for")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0.6, 0.5) + +[node name="Wall4" parent="." instance=ExtResource("2_s4for")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.5, 0.6, 0.5) + +[node name="Wall5" parent="." instance=ExtResource("2_s4for")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 0.6, 0.5) + +[node name="Wall6" parent="." instance=ExtResource("2_s4for")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.5, 0.6, 0.5) + +[node name="Wall7" parent="." instance=ExtResource("2_s4for")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, 0.6, 0.5) + +[node name="Wall10" parent="." instance=ExtResource("2_s4for")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.600054, 4.5) + +[node name="Wall11" parent="." instance=ExtResource("2_s4for")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 0.6, 4.5) + +[node name="Wall12" parent="." instance=ExtResource("2_s4for")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0.6, 4.5) + +[node name="Wall13" parent="." instance=ExtResource("2_s4for")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.5, 0.6, 4.5) + +[node name="Wall14" parent="." instance=ExtResource("2_s4for")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 0.6, 4.5) + +[node name="Wall15" parent="." instance=ExtResource("2_s4for")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.5, 0.6, 4.5) + +[node name="Wall16" parent="." instance=ExtResource("2_s4for")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, 0.6, 4.5) + +[node name="Wall8" parent="." instance=ExtResource("2_s4for")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, 0.6, 1.5) + +[node name="Wall9" parent="." instance=ExtResource("2_s4for")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, 0.6, 2.5) + +[node name="Wall17" parent="." instance=ExtResource("2_s4for")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, 0.6, 3.5) + +[node name="Wall23" parent="." instance=ExtResource("2_s4for")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.6, 2.5) + +[node name="Wall25" parent="." instance=ExtResource("2_s4for")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.6, 3.5) + +[node name="Wall24" parent="." instance=ExtResource("2_s4for")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.6, 1.5) + +[node name="Ball" parent="." instance=ExtResource("3_pphtv")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0.3, 1.5) + +[node name="Player" parent="." instance=ExtResource("4_lac8a")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 1, 1.5) + +[node name="Goal2" parent="." instance=ExtResource("5_p20hb")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.5, 0, 1.5) + +[node name="PlayerBarrier" parent="." instance=ExtResource("6_s4for")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 0.5, 3.5) + +[node name="PlayerBarrier2" parent="." instance=ExtResource("6_s4for")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0.5, 2.5) + +[node name="PlayerBarrier3" parent="." instance=ExtResource("6_s4for")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.5, 0.5, 1.5) + +[node name="PlayerBarrier4" parent="." instance=ExtResource("6_s4for")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.5, 0.5, 2.5) + +[node name="PlayerBarrier5" parent="." instance=ExtResource("6_s4for")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0.5, 3.5) diff --git a/main.gd b/main.gd index 7491c37..98d4b3d 100644 --- a/main.gd +++ b/main.gd @@ -16,11 +16,7 @@ var player: Piece var level_num := -1 # TODO: instead of dumb numbered levels, GIVE THEM GOOD NAMES AND MANUALLY ORDER THEM! 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"), - preload("res://level/level_04.tscn"), + preload("res://level/player_barrier_01.tscn"), ] # TODO: screen transition to hide awkward animations lol var time := 0: @@ -117,12 +113,12 @@ func step(move: Vector2i): var pos := player.lpos var ball := board.find_piece_at(pos + move, func(p): return p.type == Piece.Type.Ball) - if board.passable_at(pos + move): + if board.passable_at(pos + move, true): hist.create_action("move") hist.add_do_method(player.do_move(move)) hist.add_undo_method(player.undo_move()) hist.commit_action() - elif ball != null: + elif not board.type_at(pos+move, Piece.Type.PlayerBarrier) and ball != null: hist.create_action("push") hist.add_do_method(ball.do_push(move)) hist.add_do_method(player.do_bump(move)) diff --git a/model/arrow.res b/model/arrow.res index a492a92..d766517 100644 Binary files a/model/arrow.res and b/model/arrow.res differ diff --git a/model/player_barrier.tres b/model/player_barrier.tres new file mode 100644 index 0000000..c915209 --- /dev/null +++ b/model/player_barrier.tres @@ -0,0 +1,9 @@ +[gd_resource type="BoxMesh" load_steps=2 format=3 uid="uid://bvfmi7q57va1u"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_wvmwf"] +transparency = 4 +albedo_color = Color(0.819608, 0.254902, 0.321569, 0.47451) + +[resource] +material = SubResource("StandardMaterial3D_wvmwf") +size = Vector3(0.95, 0.5, 0.95) diff --git a/piece.gd b/piece.gd index f932492..b5e1bc8 100644 --- a/piece.gd +++ b/piece.gd @@ -13,6 +13,7 @@ enum Type { Ball, Player, FloorIce, + PlayerBarrier, } ## squares per second @@ -141,4 +142,5 @@ func _process(_delta: float) -> void: speedometer.text = format_vel(lvel_displayed) if arrow: arrow.visible = lvel_displayed != Vector2i.ZERO - rotation.y = (1.0*lvel_displayed.clampi(-1,1)).angle_to(Vector2.UP) + if lvel != Vector2i.ZERO: + rotation.y = (1.0*lvel_displayed.clampi(-1,1)).angle_to(Vector2.UP) diff --git a/piece/player_barrier.tscn b/piece/player_barrier.tscn new file mode 100644 index 0000000..a07a052 --- /dev/null +++ b/piece/player_barrier.tscn @@ -0,0 +1,11 @@ +[gd_scene load_steps=3 format=3 uid="uid://bxgv16ue166pp"] + +[ext_resource type="BoxMesh" uid="uid://bvfmi7q57va1u" path="res://model/player_barrier.tres" id="1_y608q"] +[ext_resource type="Script" uid="uid://bq3a5hhccxndn" path="res://piece.gd" id="2_xveqp"] + +[node name="PlayerBarrier" type="MeshInstance3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0.5, 0.5) +mesh = ExtResource("1_y608q") +script = ExtResource("2_xveqp") +type = 5 +metadata/_custom_type_script = "uid://bq3a5hhccxndn"