Added Tile collision detection
This commit is contained in:
79
GameBoard.cs
Normal file
79
GameBoard.cs
Normal file
@@ -0,0 +1,79 @@
|
||||
using Godot;
|
||||
|
||||
public partial class GameBoard : Node2D
|
||||
{
|
||||
private PuzzleTile[,] _grid = new PuzzleTile[5, 4];
|
||||
|
||||
private PuzzleTile _activeTile;
|
||||
|
||||
// FIX 1: Use GD.Load and explicitly cast it to (PackedScene)
|
||||
private PackedScene _tileScene = (PackedScene)GD.Load("res://PuzzleTile.tscn");
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
// FIX 2: Explicitly cast the returned Node to (PuzzleTile)
|
||||
_activeTile = (PuzzleTile)GetNode("PuzzleTile");
|
||||
_activeTile.GridX = 0;
|
||||
_activeTile.GridY = 0;
|
||||
|
||||
_grid[0, 0] = _activeTile;
|
||||
|
||||
SpawnObstacle(4, 0);
|
||||
}
|
||||
|
||||
private void SpawnObstacle(int x, int y)
|
||||
{
|
||||
// FIX 3: Explicitly cast the instantiated object to (PuzzleTile)
|
||||
PuzzleTile obstacle = (PuzzleTile)_tileScene.Instantiate();
|
||||
AddChild(obstacle);
|
||||
|
||||
obstacle.GridX = x;
|
||||
obstacle.GridY = y;
|
||||
obstacle.Position = new Vector2(x * 128, y * 128);
|
||||
obstacle.Modulate = new Color(1, 0, 0);
|
||||
|
||||
_grid[x, y] = obstacle;
|
||||
}
|
||||
|
||||
public override void _Process(double delta)
|
||||
{
|
||||
if (_activeTile == null || _activeTile.IsMoving) return;
|
||||
|
||||
Vector2 direction = Vector2.Zero;
|
||||
if (Input.IsActionJustPressed("ui_right")) direction.X = 1;
|
||||
else if (Input.IsActionJustPressed("ui_left")) direction.X = -1;
|
||||
else if (Input.IsActionJustPressed("ui_down")) direction.Y = 1;
|
||||
else if (Input.IsActionJustPressed("ui_up")) direction.Y = -1;
|
||||
|
||||
if (direction != Vector2.Zero)
|
||||
{
|
||||
CalculateSlide(_activeTile, (int)direction.X, (int)direction.Y);
|
||||
}
|
||||
}
|
||||
|
||||
private void CalculateSlide(PuzzleTile tile, int dirX, int dirY)
|
||||
{
|
||||
int testX = tile.GridX;
|
||||
int testY = tile.GridY;
|
||||
|
||||
while (true)
|
||||
{
|
||||
int nextX = testX + dirX;
|
||||
int nextY = testY + dirY;
|
||||
|
||||
if (nextX < 0 || nextX >= 5 || nextY < 0 || nextY >= 4) break;
|
||||
|
||||
if (_grid[nextX, nextY] != null) break;
|
||||
|
||||
testX = nextX;
|
||||
testY = nextY;
|
||||
}
|
||||
|
||||
if (testX == tile.GridX && testY == tile.GridY) return;
|
||||
|
||||
_grid[tile.GridX, tile.GridY] = null;
|
||||
_grid[testX, testY] = tile;
|
||||
|
||||
tile.SlideTo(testX, testY);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user