Skip to content

Instantly share code, notes, and snippets.

@ryanmeier
Created August 14, 2014 22:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ryanmeier/c531c57cffc644edcb39 to your computer and use it in GitHub Desktop.
Save ryanmeier/c531c57cffc644edcb39 to your computer and use it in GitHub Desktop.
using System;
using System.Collections.Specialized;
using System.Xml.Serialization;
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
[Serializable]
public class GameBoardData
{
[SerializeField]
private int sizeX;
[SerializeField]
private int sizeY;
[XmlIgnore]
public int SizeX
{
get { return sizeX; }
set
{
int oldSizeX = sizeX;
sizeX = value;
if (oldSizeX != sizeX) ResizeTilesArray(oldSizeX, SizeY);
}
}
[XmlIgnore]
public int SizeY
{
get { return sizeY; }
set
{
int oldSizeY = sizeY;
sizeY = value;
if (oldSizeY != sizeY) ResizeTilesArray(SizeX, oldSizeY);
}
}
#region XML Serialization Specific Properties
public int SerializeSizeX
{
get { return sizeX; }
set { sizeX = value; }
}
public int SerializeSizeY
{
get { return sizeY; }
set { sizeY = value; }
}
#endregion
public List<GameBoardTile> tiles;
public GameBoardData()
{
if (tiles == null)
{
tiles = new List<GameBoardTile>();
}
}
public void Clear()
{
Fill(GameBoardTile.EMPTY);
}
public void Load(GameBoard board)
{
if (board != null && board.tiles != null)
{
SizeX = board.SizeX;
SizeY = board.SizeY;
for (int i = 0; i < board.tiles.Count; i++)
{
tiles[i] = board.tiles[i];
}
}
}
#region Advanced Functions
public void Fill(GameBoardTile tileType)
{
for (int i = 0; i < tiles.Count; i++)
{
tiles[i] = tileType;
}
}
public void FillColumn(int x, GameBoardTile tileType)
{
for (int y = 0; y < SizeY; y++)
{
SetTileValue(x, y, tileType);
}
}
public void FillRow(int y, GameBoardTile tileType)
{
for (int x = 0; x < SizeX; x++)
{
SetTileValue(x, y, tileType);
}
}
#endregion
#region Utility
public GameBoardTile GetTileValue(int x, int y)
{
return GetTileValue(tiles, x, y, SizeX, SizeY);
}
GameBoardTile GetTileValue(List<GameBoardTile> list, int x, int y, int lengthX, int lengthY)
{
int index = x * lengthY + y;
if (index >= list.Count || index < 0)
{
return GameBoardTile.EMPTY;
}
return list[index];
}
public void SetTileValue(int x, int y, GameBoardTile value)
{
SetTileValue(tiles, x, y, value, SizeX, SizeY);
}
void SetTileValue(List<GameBoardTile> list, int x, int y, GameBoardTile value, int lengthX, int lengthY)
{
int index = x * lengthY + y;
list[index] = value;
}
public void ResizeTilesArray(int oldX, int oldY)
{
if (tiles != null && oldX == SizeX && oldY == SizeY)
{
return;
}
List<GameBoardTile> oldTiles = tiles;
tiles = new List<GameBoardTile>();
for (int x = 0; x < SizeX; x++)
{
for (int y = 0; y < SizeY; y++)
{
GameBoardTile tileValue = GameBoardTile.EMPTY;
if (oldTiles != null && x < oldX && y < oldY)
{
tileValue = GetTileValue(oldTiles, x, y, oldX, oldY);
}
tiles.Add(tileValue);
}
}
}
#endregion
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment