package dev.llan.model.board;
import dev.llan.model.Game;
import dev.llan.model.GameContainer;
import dev.llan.model.board.Tile.TileType;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
class GridTest {
private Grid grid;
@BeforeEach
void setUp() {
GameContainer.getInstance().initGame();
Game game = GameContainer.getInstance().getCurrentGame();
grid = game.getMap().getGrid();
}
@Test
void validPosition() {
assertTrue(grid.validPosition(new Point(3, 3)));
grid.tileAt(new Point(1, 2)).setType(TileType.UNMOVABLE);
grid.tileAt(new Point(1, 3)).setType(TileType.INTERACTABLE);
grid.tileAt(new Point(1, 4)).setType(TileType.OCCUPIED);
assertFalse(grid.validPosition(new Point(1, 2)));
assertFalse(grid.validPosition(new Point(1, 3)));
assertFalse(grid.validPosition(new Point(1, 4)));
}
@Test
void getMovementCost() {
Point parent = new Point(0, 0);
Point adjacent = new Point(1, 0);
Point diagonal = new Point(1, 1);
assertEquals(1.0, grid.getMovementCost(adjacent, parent), 0.0001);
assertEquals(1.414, grid.getMovementCost(diagonal, parent), 0.01);
}
@Test
void updateVisibilities() {
Point center = new Point(5, 25);
double radius = 5.0;
grid.updateVisibilities(center, radius);
List<Point> withinRadius = center.findWithin(grid, radius, true);
for (Point point : withinRadius) {
assertTrue(grid.tileAt(point).isVisible());
}
}
@Test
void testClone() {
Grid clone = grid.clone();
Point point = new Point(1, 0);
assertNotSame(grid, clone);
assertNotSame(grid.tileAt(point), clone.tileAt(point));
assertEquals(grid.getColSize(), clone.getColSize());
assertEquals(grid.getRowSize(), clone.getRowSize());
assertEquals(grid.tileAt(point).isVisible(), clone.tileAt(point).isVisible());
assertEquals(grid.tileAt(point).getType(), clone.tileAt(point).getType());
}
}