Skip to content

Instantly share code, notes, and snippets.

@MalcolmMacDonald
Created May 22, 2024 17:23
Show Gist options
  • Select an option

  • Save MalcolmMacDonald/7ec6f0ec7ca498b9cc25e4ba5399d190 to your computer and use it in GitHub Desktop.

Select an option

Save MalcolmMacDonald/7ec6f0ec7ca498b9cc25e4ba5399d190 to your computer and use it in GitHub Desktop.
#region
using System.Collections.Generic;
using System.Linq;
using NUnit.Framework;
using UnityEngine;
#endregion
namespace Tests
{
public class SokobanGridServiceTests : SokobanElementTests
{
[Test]
[SokobanTest(2, 2, 1)]
public void Movement()
{
var testElement = CreateElement(Vector3Int.zero, Vector3Int.up);
bool movedPiece = gridService.MoveElement(testElement, new Vector3Int(1, 0, 0), Vector3Int.zero);
Assert.That(movedPiece);
Assert.That(testElement.CurrentPosition==new Vector3Int(1, 0, 0));
}
[Test]
[SokobanTest(1, 1, 1)]
public void WallCollision()
{
var testElement = CreateElement(Vector3Int.zero, Vector3Int.zero);
bool movedPiece = gridService.MoveElement(testElement, new Vector3Int(-1, 0, 0), Vector3Int.zero);
Assert.That(!movedPiece);
}
[Test]
[SokobanTest(1, 3, 1)]
public void Falling()
{
var testElement = CreateElement(Vector3Int.up * 2);
gridService.MakeElementsFall();
Assert.That(testElement.CurrentPosition==new Vector3Int(0, 0, 0));
}
[Test]
[SokobanTest(3, 1, 1)]
public void Pushing()
{
var testElement = CreateElement(Vector3Int.zero);
var testElement2 = CreateElement(Vector3Int.right);
bool movedPiece = gridService.MoveElement(testElement, Vector3Int.right, Vector3Int.zero);
Assert.That(movedPiece);
Assert.That(testElement.CurrentPosition==new Vector3Int(1, 0, 0));
Assert.That(testElement2.CurrentPosition==new Vector3Int(2, 0, 0));
}
[Test]
[SokobanTest(3, 3, 1)]
public void SteppingUp()
{
var testElement = CreateElement(Vector3Int.zero, Vector3Int.zero, Vector3Int.up);
var stairElement = CreateElement(Vector3Int.right);
bool movedPiece = gridService.MoveElement(testElement, new Vector3Int(1, 1, 0), Vector3Int.zero);
Assert.That(movedPiece);
gridService.MakeElementsFall();
Assert.That(testElement.CurrentPosition==new Vector3Int(1, 1, 0));
gridService.MoveElement(testElement, new Vector3Int(1, 0, 0), Vector3Int.zero);
gridService.MakeElementsFall();
Assert.That(testElement.CurrentPosition==new Vector3Int(2, 0, 0));
}
[Test]
[SokobanTest(2, 1, 1)]
public void OccupyingSameCell()
{
var testElement = CreateElement(Vector3Int.zero, new WalledCell(Vector3Int.zero, WallDirection.None, false));
var testElement2 = CreateElement(Vector3Int.right, new WalledCell(Vector3Int.zero, WallDirection.None, false));
Assert.That(!gridService.MoveElement(testElement, Vector3Int.right, Vector3Int.zero));
gridService.SetPieceContainableMask(testElement2.sokobanPieceID, PieceType.Furniture);
Assert.That(gridService.MoveElement(testElement, Vector3Int.right, Vector3Int.zero));
Assert.That(testElement.CurrentPosition==new Vector3Int(1, 0, 0));
Assert.That(testElement2.CurrentPosition==new Vector3Int(1, 0, 0));
gridService.cachedSokobanGrid.GetPiecesAt(testElement.CurrentPosition, out IReadOnlyList<SokobanPiece> pieces);
Assert.That(pieces.Contains(testElement.SokobanPiece));
Assert.That(pieces.Contains(testElement2.SokobanPiece));
}
[Test]
[SokobanTest(1, 2, 1)]
public void SupportedByWall()
{
var supportingElement = CreateElement(Vector3Int.zero, new WalledCell(Vector3Int.zero, WallDirection.Up, false));
var supportedElement = CreateElement(Vector3Int.up, new WalledCell(Vector3Int.zero, WallDirection.None, false));
Assert.That(!gridService.CanMoveBetweenCells(supportedElement.SokobanPiece, Vector3Int.up, Vector3Int.zero));
gridService.MakeElementsFall();
Assert.That(supportedElement.CurrentPosition==new Vector3Int(0, 1, 0));
}
[Test]
[SokobanTest(3, 1, 1)]
public void CanMove()
{
var pieceA = CreateElement(Vector3Int.zero);
var pieceB = CreateElementWithoutAwake(Vector3Int.right, new WalledCell(Vector3Int.zero, WallDirection.Up, false));
pieceB.containablePieceTypeMask = PieceType.Furniture | PieceType.Player;
pieceB.Awake();
Assert.IsTrue(gridService.CanMoveBetweenCells(pieceA.SokobanPiece, Vector3Int.zero, Vector3Int.right));
Assert.IsTrue(gridService.MoveElement(pieceA, Vector3Int.right, Vector3Int.zero));
Assert.IsTrue(gridService.MoveElement(pieceA, Vector3Int.right, Vector3Int.right));
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment