void SetState(AgentState state) { if (currentState == state) { return; } currentState = state; switch (currentState) { case AgentState.Idle: //Do nothing thirdPersonCharacter.Move(Vector3.zero, false, false); break; case AgentState.Moving: navAgent.SetDestination(target.gameObject.transform.position); thirdPersonCharacter.Move(navAgent.desiredVelocity, false, false); break; case AgentState.Attacking: thirdPersonCharacter.Move(Vector3.zero, false, false); thirdPersonCharacter.Attack(); break; default: Debug.LogError("Unexpected state: " + state.ToString()); break; } }
//runs when game is in combat mode public bool DoTurn() { line.gameObject.SetActive(true);//open line that shows movement target if (AP > 0) { Vector3 movementPoint = transform.position; movementPoint = movementRange(APRange); float distance = Vector3.Distance(transform.position, target.transform.position); Debug.Log("doing action!");//attack or move wrt to distance AP--; if (distance < attackRange) { character.Attack(); } else { agent.SetDestination(movementPoint); } if (agent.remainingDistance > agent.stoppingDistance)//stop when close to target { character.Move(agent.desiredVelocity, false, false); } else { character.Move(Vector3.zero, false, false); } return(false); } return(true); }
public bool DoTurn()//when in combat { line.gameObject.SetActive(true); if (AP > 0)//only able to act while having action points { Vector3 movementPoint = transform.position; movementPoint = movementRange(APRange);//retract clicked point to movement range //works good because it is also visualized //Debug.Log(movementPoint); Ray ray = cam.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Input.GetMouseButtonDown(0))//click { Debug.Log("clicked!"); AP--; if (Physics.Raycast(ray, out hit))//if on enemy and in distance, hit, otherwise run there { if (hit.collider.tag == "Enemy" && Vector3.Distance(character.transform.position, hit.collider.transform.position) < attackRange) { character.Attack(); } else { agent.SetDestination(movementPoint); } } } //adjust movement animation according to stopping distance if (agent.remainingDistance > agent.stoppingDistance) { character.Move(agent.desiredVelocity, false, false); } else { character.Move(Vector3.zero, false, false); } return(false); } return(true); }