full microban poc
This commit is contained in:
parent
425053b4b2
commit
3ed232370a
3 changed files with 1860 additions and 20 deletions
2
board.gd
2
board.gd
|
|
@ -11,7 +11,7 @@ extends Node3D
|
||||||
|
|
||||||
# for zooming out to see the whole puzzle
|
# for zooming out to see the whole puzzle
|
||||||
func top_left_aabb() -> AABB:
|
func top_left_aabb() -> AABB:
|
||||||
return AABB(position, Vector3.ONE*0.1)
|
return AABB(position-Vector3(1,0,1), Vector3.ONE*0.1)
|
||||||
|
|
||||||
func bottom_right_aabb() -> AABB:
|
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.ONE*0.1)
|
||||||
|
|
|
||||||
56
main.gd
56
main.gd
|
|
@ -1,20 +1,12 @@
|
||||||
extends Node3D
|
extends Node3D
|
||||||
|
|
||||||
var microban_1 := "
|
|
||||||
####
|
|
||||||
# .#
|
|
||||||
# ###
|
|
||||||
#*@ #
|
|
||||||
# $ #
|
|
||||||
# ###
|
|
||||||
####
|
|
||||||
"
|
|
||||||
|
|
||||||
@onready var camera: Camera3D = $Camera
|
@onready var camera: Camera3D = $Camera
|
||||||
|
|
||||||
var hist := UndoRedo.new()
|
var hist := UndoRedo.new()
|
||||||
@onready var board := Board.from_string(microban_1)
|
@onready var board := Board.from_string("")
|
||||||
var player: Piece
|
var player: Piece
|
||||||
|
var level_num := -1
|
||||||
|
var levels_src: PackedStringArray
|
||||||
|
|
||||||
@onready var sound: AudioStreamPlayer = $Sound
|
@onready var sound: AudioStreamPlayer = $Sound
|
||||||
@onready var sounds_hit := audio_stream_randomizer_from_dir("res://sfx/hit")
|
@onready var sounds_hit := audio_stream_randomizer_from_dir("res://sfx/hit")
|
||||||
|
|
@ -22,18 +14,14 @@ var player: Piece
|
||||||
@onready var sounds_redo := audio_stream_randomizer_from_dir("res://sfx/redo")
|
@onready var sounds_redo := audio_stream_randomizer_from_dir("res://sfx/redo")
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
add_child(board)
|
var file := FileAccess.open("res://microban-1.txt", FileAccess.READ)
|
||||||
for piece in board.pieces():
|
levels_src = file.get_as_text().split("\n\n")
|
||||||
if piece.type == Piece.Type.Player:
|
advance_level()
|
||||||
player = piece
|
|
||||||
$TopLeft.aabb = board.top_left_aabb()
|
|
||||||
$BottomRight.aabb = board.bottom_right_aabb()
|
|
||||||
camera.position = Vector3(player.position.x, camera.position.y, player.position.z)
|
|
||||||
|
|
||||||
func _process(delta: float) -> void:
|
func _process(delta: float) -> void:
|
||||||
if $TopLeft.is_on_screen() and $BottomRight.is_on_screen():
|
if $TopLeft.is_on_screen() and $BottomRight.is_on_screen():
|
||||||
return
|
return
|
||||||
camera.position.y += delta
|
camera.position.y += 10*delta
|
||||||
|
|
||||||
func _input(event: InputEvent) -> void:
|
func _input(event: InputEvent) -> void:
|
||||||
if event.is_action_pressed("u", true, true):
|
if event.is_action_pressed("u", true, true):
|
||||||
|
|
@ -77,6 +65,36 @@ func step(move: Vector2i):
|
||||||
else:
|
else:
|
||||||
sound.stream = sounds_hit
|
sound.stream = sounds_hit
|
||||||
sound.play()
|
sound.play()
|
||||||
|
|
||||||
|
if won() or Input.is_action_pressed("restart"):
|
||||||
|
advance_level()
|
||||||
|
|
||||||
|
func won() -> bool:
|
||||||
|
for piece in board.pieces():
|
||||||
|
if piece.type == Piece.Type.Goal:
|
||||||
|
var covered := board.any_at(piece.lpos, func(p): return p.type == Piece.Type.Box)
|
||||||
|
if !covered:
|
||||||
|
return false
|
||||||
|
return true
|
||||||
|
|
||||||
|
func advance_level():
|
||||||
|
level_num += 1
|
||||||
|
if level_num >= levels_src.size():
|
||||||
|
print("you win")
|
||||||
|
return
|
||||||
|
while "@" not in levels_src[level_num] and "+" not in levels_src[level_num]:
|
||||||
|
level_num += 1
|
||||||
|
board.queue_free()
|
||||||
|
board = Board.from_string(levels_src[level_num])
|
||||||
|
var wall_count := 0
|
||||||
|
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
|
||||||
|
camera.position = Vector3(center.x, 2, center.z)
|
||||||
|
|
||||||
func audio_stream_randomizer_from_dir(dir: String) -> AudioStreamRandomizer:
|
func audio_stream_randomizer_from_dir(dir: String) -> AudioStreamRandomizer:
|
||||||
var stream := AudioStreamRandomizer.new()
|
var stream := AudioStreamRandomizer.new()
|
||||||
|
|
|
||||||
1822
microban-1.txt
Normal file
1822
microban-1.txt
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue