public void PlaceIndicators(Dictionary <int, CellController> cells, Dictionary <int, WallController> walls, WallController wallPrefab) { bool isDoor = wallPrefab.PrefabIsDoor(); foreach (CellController c in cells.Values) { if (c.IsMultiCell) { MapRect rect = c.GetCurCellIndexes(); rect.Foreach((MapPoint p) => { WallPoint wp = new WallPoint(p.X, p.Y); if ((isDoor || !walls.ContainsKey(wp.toInt())) && wallPrefab.PrefabValidatePosition(M, wp)) { InstantiateIndicator(wp, isDoor); } }); } else { WallPoint wp = new WallPoint(c.Position.X, c.Position.Y); if ((isDoor || !walls.ContainsKey(wp.toInt())) && wallPrefab.PrefabValidatePosition(M, wp)) { InstantiateIndicator(wp, isDoor); } } } }
private void SetAdjacentWall(WallController wall, Side side) { WallPoint wp = wall.Position; WallPoint adjWallPoint = null; switch (side) { case Side.Bottom: adjWallPoint = new WallPoint(wp.X, wp.Y - 1); break; case Side.Left: adjWallPoint = new WallPoint(wp.X - 1, wp.Y); break; case Side.Right: adjWallPoint = new WallPoint(wp.X + 1, wp.Y); break; case Side.Top: adjWallPoint = new WallPoint(wp.X, wp.Y + 1); break; } WallController adjWall = GetWall(adjWallPoint); if (adjWall == null) { if (WallPrefab.PrefabValidatePosition(M, adjWallPoint)) { wall.wallSprite.SetSide(side, true); SetWall(adjWallPoint, WallPrefab); } } else if (adjWall.WallObject == null) { wall.wallSprite.SetSide(side, true); } }
public void PlaceIndicators(Dictionary<int, CellController> cells, Dictionary<int, WallController> walls, WallController wallPrefab) { bool isDoor = wallPrefab.PrefabIsDoor(); foreach(CellController c in cells.Values) { if(c.IsMultiCell) { MapRect rect = c.GetCurCellIndexes(); rect.Foreach((MapPoint p) => { WallPoint wp = new WallPoint(p.X,p.Y); if( (isDoor || !walls.ContainsKey(wp.toInt())) && wallPrefab.PrefabValidatePosition(M,wp)) InstantiateIndicator(wp, isDoor); }); } else { WallPoint wp = new WallPoint(c.Position.X,c.Position.Y); if( (isDoor || !walls.ContainsKey(wp.toInt())) && wallPrefab.PrefabValidatePosition(M,wp)) InstantiateIndicator(wp, isDoor); } } }
private void OnPlaceWall(Vector3 pz, bool door) { WallController wallPrefab = selectedPrefab.GetComponent <WallController>(); WallPoint wp = new WallPoint(Mathf.RoundToInt(pz.x), Mathf.RoundToInt(pz.y)); Side side; if (new Rect(wp.X - 0.25f, wp.Y - 0.25f, 0.5f, 0.5f).Contains(pz)) { side = Side.Middle; } else if (new Rect(wp.X - 0.5f, wp.Y - 0.25f, 0.25f, 0.5f).Contains(pz)) { side = Side.Left; } else if (new Rect(wp.X - 0.25f, wp.Y + 0.25f, 0.5f, 0.25f).Contains(pz)) { side = Side.Top; } else if (new Rect(wp.X + 0.25f, wp.Y - 0.25f, 0.25f, 0.5f).Contains(pz)) { side = Side.Right; } else if (new Rect(wp.X - 0.25f, wp.Y - 0.5f, 0.5f, 0.25f).Contains(pz)) { side = Side.Bottom; } else { side = Side.Undefined; } if (side == Side.Undefined) { return; } //new Rect(wp.X-0.5f,wp.Y-0.5f,wp.X+0.5f,wp.Y+0.5f).Contains(pz) if (IsInsideBuilding(wp)) { WallController wall = null, adjWall = null; if (side == Side.Middle) { wall = wallPrefab.PrefabSetWall(M, wp); } else { wall = wallPrefab.PrefabSetWall(M, wp); SetAdjacentWall(wall, side); } UpdateWallsAround(wp); } else { // not inside building WallController wall = GetWall(wp); if (wall != null && wall.WallObject == null) { wp.Foreach((WallPoint p, Side wallSide) => { if (wallPrefab.PrefabValidatePosition(M, p) && side == wallSide) { SetAdjacentWall(wall, side); } }); UpdateWallsAround(wp); } } Phantom.RemoveIndicators(); Phantom.PlaceIndicators(cells, walls, wallPrefab); }