예제 #1
0
    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);
                }
            }
        }
    }
예제 #2
0
    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);
        }
    }
예제 #3
0
	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);
			}
		}
	}
예제 #4
0
    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);
    }