示例#1
0
    private void Reset()
    {
        isItemEdited = false;

        room.RefreshGrids(false);
        currentItem = null;
        editedItem  = null;
        gridGroup.SetActive(false);
    }
示例#2
0
 private void AddNewItemExecute()
 {
     EditedItem.Validate();
     if (!EditedItem.HasErrors)
     {
         Items.Add(EditedItem);
         SetUpNewClubToAdd();
     }
 }
示例#3
0
    // 根据 Item 当前位置,进行适当调整
    private Vector3 ItemPositionOfCurrent(
        Room room,
        ItemObject itemObject,
        EditedItem editedItem,
        bool isRestricted)
    {
        Item    item        = itemObject.Item;
        Vector3 itemPostion = item.Position;

        if (item.PlaceType == PlaceType.Floor || item.PlaceType == PlaceType.Wall)
        {
            float distance;
            itemPostion    = WorldToItemOfFloor(room, item, itemPostion, isRestricted, out distance);
            item.PlaceType = PlaceType.Floor;
        }

        return(itemPostion);
    }
示例#4
0
    private void SetEdited(ItemObject item)
    {
        isItemEdited = true;
        studioPanel.SetMode(StudioMode.EditItem);

        currentItem = item;

        editedItem = item.gameObject.AddComponent <EditedItem>();
        editedItem.Init();

        room.RefreshGrids(true, item.Type);

        editedItem.OnDragBefore = HandleItemBeginDrag;
        editedItem.OnDrag       = HandleItemDrag;
        editedItem.OnDragAfter  = HandleItemEndDrag;

        SuspendItem suspendItem = item.gameObject.GetComponent <SuspendItem>();

        suspendItem.enabled = false;

        gridGroup.SetActive(true);
        gridGroup.SetGrids(item);
        gridGroup.SetTransform(item.Item);
    }
示例#5
0
    private Vector3 ItemPositionOfScreen(
        Room room,
        ItemObject itemObject,
        EditedItem editedItem,
        Vector3 screenPosition,
        Vector2 offset,
        bool isRestricted)
    {
        Item      item        = itemObject.Item;
        Vector3   itemPostion = Vector3.zero;
        PlaceType placeType   = PlaceType.None;

        if (currentItem.Type == ItemType.Horizontal)
        {
            float   distance;
            Vector3 worldPosition = ScreenToWorldOfFloor(room, item, screenPosition, offset);
            itemPostion = WorldToItemOfFloor(room, item, worldPosition, isRestricted, out distance);
            placeType   = PlaceType.Floor;

            if (editedItem.CanOutside && distance < 0)
            {
                worldPosition = ScreenToWorldOfOutside(room, item, screenPosition, offset);
                itemPostion   = WorldToItemOfOutside(room, item, worldPosition, isRestricted);
                placeType     = PlaceType.None;
            }
        }
        else if (currentItem.Type == ItemType.Vertical)
        {
            Direction   itemDir            = item.Dir;
            Direction[] showWallsDirection = room.ShowWallsDirection();
            Direction   dirL = showWallsDirection[0];
            Direction   dirR = showWallsDirection[1];

            Vector3 distance, distanceL, distanceR;
            Vector3 itemPostionL = WorldToItemOfWall(room, item, ScreenToWorldOfWall(room, item, screenPosition, offset, showWallsDirection[0]), showWallsDirection[0], isRestricted, out distanceL);
            Vector3 itemPostionR = WorldToItemOfWall(room, item, ScreenToWorldOfWall(room, item, screenPosition, offset, showWallsDirection[1]), showWallsDirection[1], isRestricted, out distanceR);

            float   distanceG;
            Vector3 itemPostionG = WorldToItemOfFloor(room, item, ScreenToWorldOfFloor(room, item, screenPosition, offset), isRestricted, out distanceG);
            Vector3 itemPostionO = WorldToItemOfOutside(room, item, ScreenToWorldOfOutside(room, item, screenPosition, offset), isRestricted);

            // Debug.Log(distanceG + " " + distanceL + " " + distanceR);

            if (distanceL.y >= -0.5f || distanceR.y >= -0.5f)
            {
                placeType = PlaceType.Wall;
                if (itemDir == dirL && distanceL.x >= 0)
                {
                    distance    = distanceL;
                    itemPostion = itemPostionL;
                }
                else if (itemDir == dirR && distanceR.x >= 0)
                {
                    distance    = distanceR;
                    itemPostion = itemPostionR;
                }
                else if (distanceL.x >= distanceR.x)
                {
                    distance    = distanceL;
                    itemPostion = itemPostionL;
                    SetCurrentItemDirection(itemObject, dirL);
                }
                else
                {
                    distance    = distanceR;
                    itemPostion = itemPostionR;
                    SetCurrentItemDirection(itemObject, dirR);
                }

                if (editedItem.CanOutside && (distance.y < -0.5f || distance.z < 0))
                {
                    itemPostion = itemPostionO;
                    placeType   = PlaceType.None;
                }
            }
            else
            {
                itemPostion = itemPostionG;
                placeType   = PlaceType.Floor;
                if (editedItem.CanOutside && distanceG < 0)
                {
                    itemPostion = itemPostionO;
                    placeType   = PlaceType.None;
                }
            }
        }
        item.PlaceType = placeType;
        return(itemPostion);
    }