private void SetTarget(Objects.InteractableObject interactable) { ClearTarget(); m_target.type = ETargetType.OBJECT; m_target.interactableTarget = interactable; }
public void OnTargetHpChanged(int newHP) { if (m_target.type != ETargetType.OBJECT) { return; } Objects.InteractableObject target = m_target.interactableTarget; if (target.GetComponent <Objects.InteractableBoatObject>()) { if (newHP == target.m_hpMax) { ClearTarget(); } } if (newHP == 0) { if (target.GetComponent <Objects.InteractableFire>() || target.GetComponent <Objects.InteractableResource>()) { ClearTarget(); } } }
public STarget(ETargetType type, Objects.InteractableObject interactable , EnemyController enemy) { this.type = type; interactableTarget = interactable; enemyTarget = enemy; }
public Objects.InteractableObject GetNearestAvailableOBject(Vector3 vLocation) { Objects.InteractableObject nearestObject = null; float fCurrDist = float.MaxValue; Vector3 debug = new Vector3(); foreach (Objects.InteractableObject interactableObject in InteractableObjectList) { Vector3 vPointLocation; if (interactableObject.HasFreePlacementPoint(out vPointLocation) && interactableObject.m_hp > 0) { NavMeshPath navPath = new NavMeshPath(); NavMesh.CalculatePath(vLocation, vPointLocation, NavMesh.AllAreas, navPath); //GameObject prim2 = GameObject.CreatePrimitive(PrimitiveType.Sphere); //prim2.transform.position = vPointLocation; float fRes = GetPathLength(navPath); if (fRes < fCurrDist) { debug = vLocation; nearestObject = interactableObject; fCurrDist = fRes; } } } return(nearestObject); }
public void OnTargetHpChanged(int newHP) { if (newHP <= 0) { ObjectTarget = null; CrewTarget = null; m_animator.SetBool(m_attackHash, false); } }
private void PlayRightAnimation() { if (m_target.type == ETargetType.OBJECT) { Objects.InteractableObject target = m_target.interactableTarget; if (target.GetComponent <Objects.InteractableCannon>()) { if (target.m_hp != target.m_hpMax) { PlayAnimation(Crew.CrewController.AnimationType.E_REPAIRING); } else { PlayAnimation(Crew.CrewController.AnimationType.E_INTERACTING); } } else if (target.GetComponent <Objects.InteractableBoatObject>()) { if (target.m_hp != target.m_hpMax) { PlayAnimation(Crew.CrewController.AnimationType.E_REPAIRING); } else { PlayAnimation(Crew.CrewController.AnimationType.E_NONE); } } else if (target.GetComponent <Objects.InteractableFire>()) { PlayAnimation(Crew.CrewController.AnimationType.E_PIPIYING); } else if (target.GetComponent <Objects.InteractableResource>()) { PlayAnimation(Crew.CrewController.AnimationType.E_INTERACTING); } } }
void Update() { if (!ObjectTarget && !CrewTarget) { // Select target InteractableObjectManager manager = GameManager.m_instance.GetComponent <InteractableObjectManager>(); if (manager) { Vector3 vLocation; ObjectTarget = manager.GetNearestAvailableOBject(gameObject.transform.position); if (ObjectTarget) { // Attack object if (ObjectTarget.GetPlacementPoint(gameObject, out vLocation)) { //GameObject prim2 = GameObject.CreatePrimitive(PrimitiveType.Sphere); //prim2.transform.position = vLocation; m_navMeshAgent.destination = vLocation; } } else { // Attack nearest NPC // TODO } } //Debug //ObjectTarget = null; // No more object to attack if (!ObjectTarget) { GameObject[] Crew; Crew = GameObject.FindGameObjectsWithTag("Crew"); float fDist = float.MaxValue; foreach (GameObject crew in Crew) { float fVal = (crew.transform.position - gameObject.transform.position).sqrMagnitude; if (fVal < fDist) { fDist = fVal; CrewTarget = crew; } } } } else if (ObjectTarget) { if (m_navMeshAgent.enabled) { if (m_navMeshAgent.remainingDistance <= m_navMeshAgent.stoppingDistance) { Quaternion targetRotation = Quaternion.LookRotation(ObjectTarget.transform.position - transform.position); float fVal = Mathf.Min(2.0f * Time.deltaTime, 1); transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, fVal); m_animator.SetBool(m_attackHash, true); } } } else if (CrewTarget) { if (m_navMeshAgent.enabled) { m_navMeshAgent.destination = CrewTarget.transform.position; if (m_navMeshAgent.remainingDistance <= m_navMeshAgent.stoppingDistance) { m_animator.SetBool(m_attackHash, true); } else { m_animator.SetBool(m_attackHash, false); } } } if (!ObjectTarget && !CrewTarget) { m_animator.SetBool(m_attackHash, false); } m_animator.SetFloat(m_speedHash, m_navMeshAgent.velocity.normalized.magnitude); }