Exemple #1
0
    // ----------------------------------------------------------------------------
    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);
    }
Exemple #2
0
    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);
        }
    }
Exemple #3
0
    void GoToNothingSelectedState()
    {
        _selection     = null;
        _itemToPlace   = null;
        _currentButton = null;
        _currentState  = NothingSelectedState;

        _cachedArgs.Enabled = false;
        GameEvents.TriggerPreviewUpdated(_cachedArgs);
    }
Exemple #4
0
    // ----------------------------------------------------------------------------
    private PrePlacementInstance GetFromPlaceholder(PlaceableItem placeholder)
    {
        if (placeholder == null)
        {
            return(null);
        }

        PrePlacementInstance entry = null;

        if (_preplacementTable.TryGetValue(placeholder.GetInstanceID(), out entry))
        {
            return(entry);
        }

        return(null);
    }
Exemple #5
0
    // ----------------------------------------------------------------------------
    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;
            }
        }
    }