
This is a version of Lights Out on a Cairo Grid.
Note: You need the Unity Web Plugin to play this example.
[button url=”https://gamelogic.co.za/examples/grids/monster-cairo/”]PLAY GAME[/button]
Source Code
public class LightsOutCairo: GLMonoBehaviour, IResetable
{
public SplicedCell cellPrefab;
public GameObject root;
private Vector2 cellDimensions = new Vector2(128+4, 128+4);
private CairoGrid grid;
private IMap3D map;
private Color offColor = ExampleUtils.colors[4];
private Color onColor = ExampleUtils.colors[6];
public void Start()
{
Reset();
}
public void Update()
{
if (Input.GetMouseButtonDown(0))
{
Vector3 worldPosition = ExampleUtils.ScreenToWorld_NGUI(root, Input.mousePosition);
var gridPoint = map[worldPosition];
if (grid.Contains(gridPoint))
{
ToggleCellAt(gridPoint);
}
}
}
public void Reset()
{
root.transform.DestroyChildren();
BuildGrid();
InitGame();
}
private void BuildGrid()
{
grid = CairoGrid.Default(4, 6);
map = new CairoMap(cellDimensions)
.WithWindow(ExampleUtils.ScreenRect)
.AlignMiddelCenter(grid)
.AnchorCellMiddelCenter()
.To3DXY();
foreach (var point in grid)
{
SplicedCell cell = Instantiate(cellPrefab);
Vector3 worldPoint = map[point];
cell.transform.parent = root.transform;
cell.transform.localScale = Vector3.one;
cell.transform.localPosition = worldPoint;
cell.SetColor(offColor);
cell.SetText("");
cell.SetOrientation(point.I);
grid[point] = cell;
}
}
private void InitGame()
{
//Initialiase with random pattern
grid.SampleRandom(9).ForEach(ToggleCellAt);
}
private void ToggleCellAt(CairoPoint gridPoint)
{
foreach (var point in grid.GetNeighbors(gridPoint))
{
grid[point].HighlightOn = !grid[point].HighlightOn;
grid[point].SetColor(grid[point].HighlightOn ? onColor : offColor);
}
}
}


Pingback: Grids Version 1.2 Now Available in the Asset Store | Gamelogic