private void Reset() { isItemEdited = false; room.RefreshGrids(false); currentItem = null; editedItem = null; gridGroup.SetActive(false); }
private void AddNewItemExecute() { EditedItem.Validate(); if (!EditedItem.HasErrors) { Items.Add(EditedItem); SetUpNewClubToAdd(); } }
// 根据 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); }
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); }
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); }