diff --git a/board.gd b/board.gd index 962d2af..183748d 100644 --- a/board.gd +++ b/board.gd @@ -42,7 +42,7 @@ func type_at(pos: Vector2i, type: Piece.Type) -> Piece: # TODO: ball collisions func solid_at(pos: Vector2i) -> bool: - return any_at(pos, func(p): return p.type == Piece.Type.Wall or p.type == Piece.Type.Ball) + 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) diff --git a/levels.txt b/levels.txt index be860a6..9072620 100644 --- a/levels.txt +++ b/levels.txt @@ -12,6 +12,7 @@ ; 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 @@ -41,3 +42,9 @@ # o# ###o.# #### + +; 4 pool + +############# +# @ o o_ . # +############# diff --git a/main.gd b/main.gd index 12fb0ea..d523100 100644 --- a/main.gd +++ b/main.gd @@ -134,7 +134,7 @@ func advance_level(): advancing = true if level_num != 0: print("level won") - await get_tree().create_timer(2).timeout + await get_tree().create_timer(0.5).timeout advancing = false time = 0 level_num += 1 diff --git a/piece.gd b/piece.gd index 2227135..315bfe6 100644 --- a/piece.gd +++ b/piece.gd @@ -45,14 +45,21 @@ var speedometer: Label3D func do_step(board: Board): if lvel == Vector2i.ZERO: return - if board.solid_at(lpos + lvel.clampi(-1, 1)): - lpos = lpos - lvel -= lvel.clampi(-1, 1) + 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() + lvel = -move + else: + lpos = lpos + lvel -= move return - lpos += lvel.clampi(-1, 1) + lpos = new_pos var on_ice := !!board.type_at(lpos, Piece.Type.FloorIce) if not on_ice: - lvel -= lvel.clampi(-1, 1) + lvel -= move func undo_step() -> Callable: var old_pos := lpos @@ -110,6 +117,9 @@ func _ready() -> void: speedometer.billboard = BaseMaterial3D.BILLBOARD_ENABLED speedometer.no_depth_test = true speedometer.font_size = 64 + var font := SystemFont.new() + font.font_names = PackedStringArray(["monospace"]) + speedometer.font = font add_child(speedometer) #TODO: arrow!