예제 #1
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);
    }