嘗試做 Dungeon Editor 的時候.
從 OOP 的層面想, 每個 block 需要知道每個鄰近的 block 是甚麼所以弄了一個 list 把 26 個 block 都放進去.
#region variable
List<IBlock> mNeighbor = new List<IBlock>(26);
#endregion
#region getter/setter
// Upper level
// 00,01,02
// 03,04,05
// 06,07,08
public bool IsEmptyUNW {get{return ReferenceEquals(null,mNeighbor[0]);}}
public bool IsEmptyUN {get{return ReferenceEquals(null,mNeighbor[1]);}}
public bool IsEmptyUNE {get{return ReferenceEquals(null,mNeighbor[2]);}}
public bool IsEmptyUW {get{return ReferenceEquals(null,mNeighbor[3]);}}
public bool IsEmptyU {get{return ReferenceEquals(null,mNeighbor[4]);}}
public bool IsEmptyUE {get{return ReferenceEquals(null,mNeighbor[5]);}}
public bool IsEmptyUSW {get{return ReferenceEquals(null,mNeighbor[6]);}}
public bool IsEmptyUS {get{return ReferenceEquals(null,mNeighbor[7]);}}
public bool IsEmptyUSE {get{return ReferenceEquals(null,mNeighbor[8]);}}
// Current level
// 09,10,11
// 12, ,13
// 14,15,16
public bool IsEmptyNW {get{return ReferenceEquals(null,mNeighbor[9]);}}
public bool IsEmptyN {get{return ReferenceEquals(null,mNeighbor[10]);}}
public bool IsEmptyNE {get{return ReferenceEquals(null,mNeighbor[11]);}}
public bool IsEmptyW {get{return ReferenceEquals(null,mNeighbor[12]);}}
public bool IsEmpty {get{return transform.childCount==0;}}
public bool IsEmptyE {get{return ReferenceEquals(null,mNeighbor[13]);}}
public bool IsEmptySW {get{return ReferenceEquals(null,mNeighbor[14]);}}
public bool IsEmptyS {get{return ReferenceEquals(null,mNeighbor[15]);}}
public bool IsEmptySE {get{return ReferenceEquals(null,mNeighbor[16]);}}
// Lower level
// 17,18,19
// 20,21,22
// 23,24,25
public bool IsEmptyLNW {get{return ReferenceEquals(null,mNeighbor[17]);}}
public bool IsEmptyLN {get{return ReferenceEquals(null,mNeighbor[18]);}}
public bool IsEmptyLNE {get{return ReferenceEquals(null,mNeighbor[19]);}}
public bool IsEmptyLW {get{return ReferenceEquals(null,mNeighbor[20]);}}
public bool IsEmptyL {get{return ReferenceEquals(null,mNeighbor[21]);}}
public bool IsEmptyLE {get{return ReferenceEquals(null,mNeighbor[22]);}}
public bool IsEmptyLSW {get{return ReferenceEquals(null,mNeighbor[23]);}}
public bool IsEmptyLS {get{return ReferenceEquals(null,mNeighbor[24]);}}
public bool IsEmptyLSE {get{return ReferenceEquals(null,mNeighbor[25]);}}
這是一個不成熟的 mindset 弄出來的東東. 26 個 list 即代表有 26*4byte = 104byte 的資訊.有 100 個 block 就有 1kb 多的資料…
基本上要做到同樣效果可以經旁邊的 block 用類似 link list 的方式回傳給 target , 目的地的資料.