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; } }
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); } } } } } } }