public void InsertObject(BalanceSystemObject obj) { QuadTreeCellBalanceSystem cellAtPos = this.GetCellAtPos(obj.m_GameObject.transform.position); cellAtPos.m_Objects.Add(obj); this.m_ObjCellMap[obj] = cellAtPos; }
public List <BalanceSystemObject> GetObjectsInRadius(Vector3 pos, float radius) { this.m_ObjectsInRadius.Clear(); Vector3 pos2 = pos; pos2.x -= radius; pos2.z -= radius; QuadTreeCellBalanceSystem cellAtPos = this.GetCellAtPos(pos2); Vector3 pos3 = pos; pos3.x += radius; pos3.z += radius; QuadTreeCellBalanceSystem cellAtPos2 = this.GetCellAtPos(pos3); for (int i = cellAtPos.m_X; i <= cellAtPos2.m_X; i++) { for (int j = cellAtPos.m_Y; j <= cellAtPos2.m_Y; j++) { QuadTreeCellBalanceSystem quadTreeCellBalanceSystem = this.m_Cells[i, j]; for (int k = 0; k < quadTreeCellBalanceSystem.m_Objects.Count; k++) { BalanceSystemObject balanceSystemObject = quadTreeCellBalanceSystem.m_Objects[k]; if (balanceSystemObject == null) { Debug.Log("Quad tree GetObjectsInRadius - obj is null : GameObject obj = cell.m_Objects[i];"); } if (balanceSystemObject != null && (balanceSystemObject.m_GameObject.transform.position - pos).magnitude < radius) { this.m_ObjectsInRadius.Add(balanceSystemObject); } } } } return(this.m_ObjectsInRadius); }
public void InsertObject(BalanceSystemObject obj, Vector3 position) { QuadTreeCellBalanceSystem cellAtPos = this.GetCellAtPos(position); if (!cellAtPos.m_Objects.Contains(obj)) { cellAtPos.m_Objects.Add(obj); } this.m_ObjCellMap[obj] = cellAtPos; }
public void RemoveObject(BalanceSystemObject go) { if (!this.m_ObjCellMap.ContainsKey(go)) { DebugUtils.Assert("[QuadTree:RemoveObject] Tree does not contains object - " + go.m_GameObject.name, true, DebugUtils.AssertType.Info); return; } QuadTreeCellBalanceSystem quadTreeCellBalanceSystem = null; if (this.m_ObjCellMap.TryGetValue(go, out quadTreeCellBalanceSystem)) { quadTreeCellBalanceSystem.RemoveObject(go); this.m_ObjCellMap.Remove(go); return; } DebugUtils.Assert(false, true); }
private QuadTreeCellBalanceSystem FindObjectCell(GameObject go) { for (int i = 0; i < this.m_NumCellsX; i++) { for (int j = 0; j < this.m_NumCellsY; j++) { QuadTreeCellBalanceSystem quadTreeCellBalanceSystem = this.m_Cells[i, j]; for (int k = 0; k < quadTreeCellBalanceSystem.m_Objects.Count; k++) { BalanceSystemObject balanceSystemObject = quadTreeCellBalanceSystem.m_Objects[k]; if (go == balanceSystemObject.m_GameObject) { return(quadTreeCellBalanceSystem); } } } } return(null); }
public BalanceSystemObject GetObjectInPos(Vector3 pos) { QuadTreeCellBalanceSystem cellAtPos = this.GetCellAtPos(pos); foreach (BalanceSystemObject balanceSystemObject in cellAtPos.m_Objects) { if (balanceSystemObject.m_GameObject != null) { if (balanceSystemObject.m_GameObject.transform.position == pos) { return(balanceSystemObject); } } else if (balanceSystemObject.m_Position == pos) { return(balanceSystemObject); } } return(null); }
public void Clear() { for (int i = 0; i < this.m_NumCellsX; i++) { for (int j = 0; j < this.m_NumCellsY; j++) { QuadTreeCellBalanceSystem quadTreeCellBalanceSystem = this.m_Cells[i, j]; for (int k = 0; k < quadTreeCellBalanceSystem.m_Objects.Count; k++) { BalanceSystemObject balanceSystemObject = quadTreeCellBalanceSystem.m_Objects[k]; if (balanceSystemObject.m_GameObject) { UnityEngine.Object.Destroy(balanceSystemObject.m_GameObject); balanceSystemObject.m_GameObject = null; } } quadTreeCellBalanceSystem.m_Objects.Clear(); } } this.m_ObjCellMap.Clear(); }
public void DrawDebug() { bool flag = false; bool flag2 = true; bool flag3 = true; for (int i = 0; i < this.m_NumCellsX; i++) { for (int j = 0; j < this.m_NumCellsY; j++) { QuadTreeCellBalanceSystem quadTreeCellBalanceSystem = this.m_Cells[i, j]; if (flag || (flag3 && quadTreeCellBalanceSystem.m_Objects.Count > 0)) { Vector3 zero = Vector3.zero; zero.x = quadTreeCellBalanceSystem.m_Pos.x; zero.z = quadTreeCellBalanceSystem.m_Pos.y; Vector3 end = zero; end.x += quadTreeCellBalanceSystem.m_Size.x; DebugRender.DrawLine(zero, end, Color.white, 0f); end = zero; end.z += quadTreeCellBalanceSystem.m_Size.y; DebugRender.DrawLine(zero, end, Color.white, 0f); } if (flag2) { for (int k = 0; k < quadTreeCellBalanceSystem.m_Objects.Count; k++) { BalanceSystemObject balanceSystemObject = quadTreeCellBalanceSystem.m_Objects[k]; if (balanceSystemObject.m_GameObject != null) { DebugRender.DrawPoint(balanceSystemObject.m_GameObject.transform.position, (!balanceSystemObject.m_GameObject.activeSelf) ? Color.green : Color.red, 0.3f, 0f); } } } } } }
public void SerializeAllObjects(P2PNetworkWriter writer) { using (P2PNetworkWriterSeekHelper p2PNetworkWriterSeekHelper = new P2PNetworkWriterSeekHelper(writer)) { writer.Write(0); int num = 0; for (int i = 0; i < this.m_NumCellsX; i++) { for (int j = 0; j < this.m_NumCellsY; j++) { QuadTreeCellBalanceSystem quadTreeCellBalanceSystem = this.m_Cells[i, j]; for (int k = 0; k < quadTreeCellBalanceSystem.m_Objects.Count; k++) { BalanceSystemObject balanceSystemObject = quadTreeCellBalanceSystem.m_Objects[k]; writer.Write(balanceSystemObject.m_Position); balanceSystemObject.Serialize(writer); num++; } } } p2PNetworkWriterSeekHelper.SeekToStoredPos(); writer.Write(num); } }