protected override bool OnExecuteState() { if (Input.GetMouseButton(0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit, 1000)) { if (hit.collider.gameObject.layer == LayerMask.NameToLayer("Unit")) { Unit unit = hit.collider.GetComponent <Unit>(); if (player.IsUnitFromPlayer(unit)) { if (!unit.HasAttacked) { player.SetSelectedUnit(unit); nextState = PlayerFSM.PlayerStates.SELECT_UNIT; return(true); } } } } } return(false); }
protected override bool OnExecuteState() { if (Input.GetMouseButtonDown(0)) // TODO: Input manager should handle this { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit, 1000)) { if (hit.collider.gameObject.layer == LayerMask.NameToLayer("Floor")) { GridNode target = GameManager.Instance.gridManager.GetNodeFromWorldPosition(hit.transform.position); if (target != null) { if (GameManager.Instance.IsNodeReachable(target)) { nextState = PlayerFSM.PlayerStates.MOVE_UNIT; GameManager.Instance.PathfinderCall(target, currentUnit); } else { nextState = PlayerFSM.PlayerStates.IDLE; player.SetSelectedUnit(null); } return(true); } } if (hit.collider.gameObject.layer == LayerMask.NameToLayer("Unit")) { Unit enemy = hit.collider.gameObject.GetComponent <Unit>(); if (!player.IsUnitFromPlayer(enemy)) { if (currentUnit.IsEnemyInRange(enemy)) { nextState = PlayerFSM.PlayerStates.ATTACK_UNIT; currentUnit.CurrentEnemy = enemy; return(true); } else { currentUnit.CanAttack = false; if (currentUnit.HasMoved) { ((UnitFSM)currentUnit.fSM).ForceChangeState(UnitFSM.UnitStates.IDLE); nextState = PlayerFSM.PlayerStates.IDLE; ForceQuit = true; } } } else { ((UnitFSM)player.CurrentSelectedUnit.fSM).ForceChangeState(UnitFSM.UnitStates.IDLE); nextState = PlayerFSM.PlayerStates.IDLE; player.SetSelectedUnit(null); if (enemy.HasMoved) { player.SetSelectedUnit(enemy); nextState = PlayerFSM.PlayerStates.SELECT_UNIT; } ForceQuit = true; } } } } return(false); }