internal void CreateDeploymentZone(Vector3Int deploymentCoords)
    {
        Instantiate(deploymentZone);
        DeploymentZone zone = FindObjectOfType <DeploymentZone>();

        zone.myCoords           = deploymentCoords;
        zone.transform.position = tileGrid[deploymentCoords.x][deploymentCoords.z].GetOccupyingCoordinates(true, true);
    }
 // Start is called before the first frame update
 void Start()
 {
     if (instance)
     {
         Destroy(gameObject);
     }
     else
     {
         instance = this;
     }
 }
Exemple #3
0
    void Update()
    {
        bool leftMouseButtonDown   = Input.GetMouseButtonDown(0);
        bool rightMouseButtonDown  = Input.GetMouseButtonDown(1);
        bool middleMouseButtonDown = Input.GetMouseButtonDown(2);
        bool noMouseButtonsDown    = !leftMouseButtonDown && !rightMouseButtonDown && !middleMouseButtonDown;

        RaycastHit hit;

        if (noMouseButtonsDown)
        {
            if (_curAbilityProvider != null)
            {
                Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                if (Physics.Raycast(ray, out hit, float.MaxValue, Defines.Layers.groundMask))
                {
                    _curAbilityProvider.SetAffectedAreaMarkerPosition(hit.point);
                }
            }

            if (_selectedUnits.Count > 0)
            {
                AttackableTarget newHoveredTarget = null;
                Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                if (Physics.Raycast(ray, out hit, float.MaxValue, Defines.Layers.projectileColliderMask))
                {
                    var collider = hit.collider.GetComponent <AttackableTargetCollider>();
                    if (collider != null)
                    {
                        newHoveredTarget = collider.target;
                    }
                }

                if (newHoveredTarget != _curHoveredTarget)
                {
                    _curHoveredTarget = newHoveredTarget;
                    if (onAttackableTargetHovered != null)
                    {
                        onAttackableTargetHovered(_curHoveredTarget);
                    }
                }
            }
        }
        else if (leftMouseButtonDown)
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (_curUnitsProvider != null)
            {
                if (Physics.Raycast(ray, out hit, float.MaxValue, Defines.Layers.deploymentZoneMask))
                {
                    DeploymentZone zone = hit.collider.GetComponent <DeploymentZone>();
                    _curUnitsProvider.StartDeployment(hit.point, zone.direction);
                }
            }
            else if (_curAbilityProvider != null)
            {
                if (Physics.Raycast(ray, out hit, float.MaxValue, Defines.Layers.groundMask))
                {
                    _curAbilityProvider.CallAbility(hit.point);
                }
            }
            else if (Input.GetKey(_tankKeyCode))
            {
                if (Physics.Raycast(ray, out hit, float.MaxValue, Defines.Layers.groundMask))
                {
                    Instantiate(_tankPrefab, hit.point, Quaternion.identity);
                }
            }
            else if (Input.GetKey(_aircraftKeyCode))
            {
                if (Physics.Raycast(ray, out hit, float.MaxValue, Defines.Layers.groundMask))
                {
                    Instantiate(_aircraftPrefab, hit.point, Quaternion.identity);
                }
            }
            else
            {
                if (Physics.Raycast(ray, out hit, float.MaxValue))
                {
                    Unit unit = hit.collider.GetComponent <Unit>();
                    if (unit != null)
                    {
                        bool shiftModifier = Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift);
                        if (shiftModifier)
                        {
                            unit.ToggleSelection();
                        }
                        else
                        {
                            ResetSelection();
                            unit.SetSelected(true);
                        }

                        if (unit.isSelected)
                        {
                            AddUnitToSelection(unit);
                        }
                        else
                        {
                            RemoveUnitFromSelection(unit);
                        }
                    }
                }
            }
        }
        else if (rightMouseButtonDown)
        {
            if (_selectedUnits.Count > 0)
            {
                if (_curHoveredTarget != null)
                {
                    foreach (var kv in _selectedUnits)
                    {
                        if (kv.Value.attack != null)
                        {
                            kv.Value.attack.SetTarget(_curHoveredTarget);
                        }
                    }
                    if (onAttackableTargetSelected != null)
                    {
                        onAttackableTargetSelected(_curHoveredTarget);
                    }
                }
                else
                {
                    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                    if (Physics.Raycast(ray, out hit, float.MaxValue, Defines.Layers.groundMask))
                    {
                        foreach (var kv in _selectedUnits)
                        {
                            if (kv.Value.movement != null)
                            {
                                kv.Value.movement.SetMovementTarget(hit.point);
                            }
                        }
                    }
                }
            }
        }
    }