mvp player barrier (gr8 for tutorials)

This commit is contained in:
mehbark 2025-05-19 19:41:48 -04:00
parent 2510e99dba
commit 66f9210156
7 changed files with 123 additions and 10 deletions

View file

@ -49,8 +49,8 @@ func type_at(pos: Vector2i, type: Piece.Type) -> Piece:
func solid_at(pos: Vector2i) -> bool: 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) 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: func passable_at(pos: Vector2i, for_player := false) -> bool:
return not solid_at(pos) return not solid_at(pos) and not (for_player and type_at(pos, Piece.Type.PlayerBarrier))
func remove_piece(piece: Piece): func remove_piece(piece: Piece):
remove_child(piece) remove_child(piece)

View file

@ -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)

10
main.gd
View file

@ -16,11 +16,7 @@ var player: Piece
var level_num := -1 var level_num := -1
# TODO: instead of dumb numbered levels, GIVE THEM GOOD NAMES AND MANUALLY ORDER THEM! # TODO: instead of dumb numbered levels, GIVE THEM GOOD NAMES AND MANUALLY ORDER THEM!
var levels: Array[PackedScene] = [ var levels: Array[PackedScene] = [
preload("res://level/level_00.tscn"), preload("res://level/player_barrier_01.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"),
] ]
# TODO: screen transition to hide awkward animations lol # TODO: screen transition to hide awkward animations lol
var time := 0: var time := 0:
@ -117,12 +113,12 @@ func step(move: Vector2i):
var pos := player.lpos var pos := player.lpos
var ball := board.find_piece_at(pos + move, func(p): return p.type == Piece.Type.Ball) 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.create_action("move")
hist.add_do_method(player.do_move(move)) hist.add_do_method(player.do_move(move))
hist.add_undo_method(player.undo_move()) hist.add_undo_method(player.undo_move())
hist.commit_action() hist.commit_action()
elif ball != null: elif not board.type_at(pos+move, Piece.Type.PlayerBarrier) and ball != null:
hist.create_action("push") hist.create_action("push")
hist.add_do_method(ball.do_push(move)) hist.add_do_method(ball.do_push(move))
hist.add_do_method(player.do_bump(move)) hist.add_do_method(player.do_bump(move))

Binary file not shown.

View file

@ -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)

View file

@ -13,6 +13,7 @@ enum Type {
Ball, Ball,
Player, Player,
FloorIce, FloorIce,
PlayerBarrier,
} }
## squares per second ## squares per second
@ -141,4 +142,5 @@ func _process(_delta: float) -> void:
speedometer.text = format_vel(lvel_displayed) speedometer.text = format_vel(lvel_displayed)
if arrow: if arrow:
arrow.visible = lvel_displayed != Vector2i.ZERO arrow.visible = lvel_displayed != Vector2i.ZERO
if lvel != Vector2i.ZERO:
rotation.y = (1.0*lvel_displayed.clampi(-1,1)).angle_to(Vector2.UP) rotation.y = (1.0*lvel_displayed.clampi(-1,1)).angle_to(Vector2.UP)

11
piece/player_barrier.tscn Normal file
View file

@ -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"