// ---------------------------------------------------------------------------- private PrePlacementInstance PlaceItemAt(ItemAsset item, Vector3 worldPosition) { var prefab = item.Item.Prefab; var placeholder = GameObject.Instantiate <PlaceableItem>(item.Item.PlaceholderPrefab, _preplacementContainer); placeholder.transform.SnapToGrid(worldPosition, GridSize); placeholder.transform.rotation = Quaternion.Euler(0, 0, item.Item.Angle); var preObject = placeholder.GetComponent <PreplacementObject>(); if (preObject) { preObject.SetLocked(false); } var ppi = new PrePlacementInstance() { Item = item, Position = worldPosition.SnapToGrid(GridSize), Angle = item.Item.Angle, Placeholder = placeholder, }; GameFlow.GF.Cues.UiPlaceItem.PlayUiSource(); _preplacements.Add(ppi); _preplacementTable.Add(ppi.Placeholder.GetInstanceID(), ppi); _currentButton.SetCount(_currentButton.Count - 1); return(ppi); }
private void GoToSelectedItemState(PrePlacementInstance selection) { SetHoveredItem(null); _selection = selection; if (_selection == null) { GoToNothingSelectedState(); return; } _cachedArgs.Enabled = false; GameEvents.TriggerPreviewUpdated(_cachedArgs); GameFlow.GF.Cues.UiSelectItem.PlayUiSource(); _mouseDrag.Reset(); _currentState = SelectedItemState; if (SelectionSprite) { SelectionSprite.transform.SnapToGrid(selection.Position, GridSize); } }
void GoToNothingSelectedState() { _selection = null; _itemToPlace = null; _currentButton = null; _currentState = NothingSelectedState; _cachedArgs.Enabled = false; GameEvents.TriggerPreviewUpdated(_cachedArgs); }
// ---------------------------------------------------------------------------- private PrePlacementInstance GetFromPlaceholder(PlaceableItem placeholder) { if (placeholder == null) { return(null); } PrePlacementInstance entry = null; if (_preplacementTable.TryGetValue(placeholder.GetInstanceID(), out entry)) { return(entry); } return(null); }
// ---------------------------------------------------------------------------- private void SelectedItemState() { SetDebugColor(Color.red); SelectionSprite.enabled = true; if (_selection == null) { GoToNothingSelectedState(); return; } // Allow user to drag position, delete, or rotate _mouseDrag?.Update(); if (Input.GetMouseButtonDown(0)) { // Found valid placement? switch to selection state var entry = FindPlacementAtPoint(_camera.ScreenToWorldPoint(Input.mousePosition)); if (entry == null) { _selection = null; return; } else if (_selection != entry) { GoToSelectedItemState(entry); } } if (_mouseDrag.MouseDragging) { var wPoint = _camera.ScreenToWorldPoint(Input.mousePosition); PreviewSprite.enabled = true; PreviewSprite.transform.rotation = Quaternion.Euler(0, 0, _selection.Angle); PreviewSprite.sprite = _selection.Item.Item.PreviewSprite; var newPos = wPoint.SnapToGrid(GridSize); PreviewSprite.transform.position = newPos; SelectionSprite.transform.position = newPos; } else { if (Input.GetKeyDown(KeyCode.R)) { _selection.Angle += 90f; if (_selection.Angle >= 360f) { _selection.Angle -= 360f; } var rot = Quaternion.Euler(0, 0, _selection.Angle); _selection.Placeholder.transform.rotation = rot; PreviewSprite.transform.rotation = rot; } // Found valid placement? switch to selection state var hoveredItem = FindPreplacementAtPoint(_camera.ScreenToWorldPoint(Input.mousePosition)); if (!hoveredItem || hoveredItem.gameObject != _selection.Placeholder.gameObject) { SetHoveredItem(hoveredItem); } } if (PreviewSprite.enabled) { bool canBePlaced = CanBePlaced(PreviewSprite, true); PreviewSprite.color = canBePlaced ? SpriteColorPreview : SpriteColorBad; // If we release, reposition the element if (_mouseDrag.MouseUp) { if (canBePlaced) { var newPos = PreviewSprite.transform.position.SnapToGrid(GridSize); _selection.Placeholder.transform.position = newPos; _selection.Position = newPos; SelectionSprite.transform.position = newPos; //GameManager.GM.Cues.UiPlaceItem.PlayUiSource(); } else { SelectionSprite.transform.position = _selection.Position; } PreviewSprite.enabled = false; } } }