protected override void OnExecute() { GameObject t = target.value; Vector3 planarDir = (t.transform.position - agent.transform.position); planarDir.y = 0; planarDir = planarDir.normalized; float angle = Vector3.Angle(agent.transform.forward, planarDir); if (Vector3.Distance(t.transform.position, agent.transform.position) < distance.value && angle < Mathf.Abs(maxAngle.value)) { AIAgent agent = t.GetComponent <AIAgent>(); if (agent != null) { agent.Kill(); } else { Cannibal cannibal = t.GetComponentInParent <Cannibal>(); if (cannibal != null) { cannibal.Kill(); } else { Debug.LogError("Cible non valide"); } } } EndAction(); }
public void BeTaken(Cannibal cannibal) { cannibals.Add(cannibal); //MAL FAIT A REFAIRE NIVEAU CONCEPTION if (cannibals.Count == 1) { cannibal.m_cannibalSkill.corpseTakenCollider = normalCollider; m_rigidbody.isKinematic = true; m_rigidbody.velocity = Vector3.zero; m_rigidbody.angularVelocity = Vector3.zero; normalCollider.enabled = false; rightCollider.enabled = true; leftCollider.enabled = true; } else if (cannibals.Count > 1) { cannibal.m_cannibalSkill.corpseTakenCollider = NearCollider(cannibal.m_cannibalAppearence.m_appearenceTransform.position); if (cannibal.m_cannibalSkill.corpseTakenCollider == rightCollider) { cannibals[0].m_cannibalSkill.corpseTakenCollider = leftCollider; } else { cannibals[0].m_cannibalSkill.corpseTakenCollider = rightCollider; } cannibals[0].m_cannibalMovement.CharacterControllerEx.CharacterTransform.position = cannibals[0].m_cannibalSkill.corpseTakenCollider.center + cannibals[0].m_cannibalSkill.corpseTakenCollider.transform.position; cannibal.m_cannibalMovement.CharacterControllerEx.CharacterTransform.position = cannibal.m_cannibalSkill.corpseTakenCollider.center + cannibal.m_cannibalSkill.corpseTakenCollider.transform.position; } }
/* void Awake() * { * TerrainData td = terrain.terrainData; * * for (int i = 0; i < td.treeInstanceCount; i++) * { * availablesTreesRepresentation.Add(treesRepresentation[i]); * } * }*/ /* void Update() * { * int cpt = Physics.OverlapSphereNonAlloc(transform.position, range, nearTreeColliders, treeLayerMask); * * for (int i = 0; i < cpt && availablesTreesRepresentation.Count > 0 ; i++) * { * GameObject go = availablesTreesRepresentation[0].gameObject; * AkSoundEngine.PostEvent(forestAmbianceEvent, go, (uint)AkCallbackType.AK_EndOfEvent, UnregisterTree, null); * availablesTreesRepresentation.RemoveAt(0); * } * * } * * void UnregisterTree(object in_cookie, AkCallbackType in_type, object in_info) * { * if (in_type == AkCallbackType.AK_EndOfEvent) * { * AkCallbackManager.AkEventCallbackInfo info = (AkCallbackManager.AkEventCallbackInfo)in_info; * * * Debug.Log("tamère"); * // info. * } * * } */ #if UNITY_EDITOR void OnDrawGizmos() { if (debug) { Gizmos.DrawWireSphere(Cannibal.BarycentricCannibalPosition(), range); } }
public void Shoot() { AkSoundEngine.PostEvent("hunter_rifle", gameObject); Vector3 position = agent.transform.position; Vector3 direction = agent.transform.forward; RaycastHit hit; if (Physics.Raycast(position, direction, out hit, shootingRange, shootingMask)) { Debug.Log(hit.collider.gameObject); AIAgent agent = hit.collider.gameObject.GetComponent <AIAgent>(); if (agent != null) { agent.Kill(); } else { Cannibal cannibal = hit.collider.gameObject.GetComponentInParent <Cannibal>(); if (cannibal != null) { cannibal.Kill(); } else { Bush bush = hit.collider.gameObject.GetComponent <Bush>(); if (bush != null) { Debug.Log("Killing cannibals in bush:" + bush); bush.KillACannibal(); } } } } }
protected override void OnExecute() { Vector3 position = agent.transform.position; Vector3 direction = agent.transform.forward; RaycastHit hit; if (Physics.Raycast(position, direction, out hit, distance.value, mask.value)) { Debug.Log(hit.collider.gameObject); AI.AIAgent agent = hit.collider.gameObject.GetComponent <AI.AIAgent>(); if (agent != null) { agent.Kill(); } else { Cannibal cannibal = hit.collider.gameObject.GetComponentInParent <Cannibal>(); if (cannibal != null) { cannibal.Kill(); } else { Bush bush = hit.collider.gameObject.GetComponent <Bush>(); if (bush != null) { bush.KillACannibal(); } } } } EndAction(); }
protected override bool OnCheck() { Cannibal can = target.value.GetComponentInParent <Cannibal>(); if (can != null && can.IsDead()) { return(true); } else { return(false); } }
public void BeReleased(Cannibal cannibal) { cannibals.Remove(cannibal); if (cannibals.Count == 1) { cannibals[0].m_cannibalSkill.corpseTakenCollider = normalCollider; cannibals[0].m_cannibalMovement.CharacterControllerEx.CharacterTransform.position = cannibals[0].m_cannibalSkill.corpseTakenCollider.center + cannibals[0].m_cannibalSkill.corpseTakenCollider.transform.position; } else if (cannibals.Count == 0) { m_rigidbody.isKinematic = false; normalCollider.enabled = true; rightCollider.enabled = false; leftCollider.enabled = false; } }
public void EndShoot() { if (CurrentTask.id == (int)ChasseurTask.Shoot) { Cannibal cannibal = CurrentTask.target.GetComponentInParent <Cannibal>(); GameObject target = CurrentTask.target; tasks.Pop(); if (cannibal != null) { if (cannibal.IsDead()) { tasks.Push(new Task((int)ChasseurTask.Defend, target)); } else { tasks.Push(new Task((int)ChasseurTask.Chase, target)); } } Debug.Log("EndShoot:" + CurrentTask.id); } }
void StopTriggerSense(Cannibal c) { RewiredInput input_t = c.gameObject.GetComponent <RewiredInput>(); triggerHuntSense(input_t.playerInputID + input_t.number, false); }
void Update() { this.transform.position = Cannibal.BarycentricCannibalPosition(); }
// Update is called once per frame new void Update() { base.Update(); if (animator != null && agent != null) { animator.SetFloat(anim_speedId, agent.velocity.magnitude); } else { Debug.Log("Chasseur.cs: animator ou navmeshagent non présent"); } if (los.Updated) { //Analyse de la vue du chasseur foreach (GameObject obj in los.sighted) { Cannibal cannibal = obj.GetComponentInParent <Cannibal>(); if (cannibal != null && !cannibal.IsDead()) { if (CurrentTask.id == (int)ChasseurTask.Normal) { agent.ResetPath(); tasks.Push(new Task((int)ChasseurTask.Look, obj)); } else if (CurrentTask.id == (int)ChasseurTask.LostTarget && obj != CurrentTask.target) //Change de cible { agent.ResetPath(); tasks.Pop(); CurrentTask.target = obj; } } } } Vector3 targetPosition; //Manage tasks switch (CurrentTask.id) { case (int)ChasseurTask.Normal: //Follow waypoints if (patrouille != null) { if (CurrentTask.elapsed > 4 && MoveTo(patrouille.getCurrentDestination(), 5)) { patrouille.Next(); CurrentTask.elapsed = 0; } } break; //Poursuis le joueur repéré case (int)ChasseurTask.Chase: if (MoveTo(CurrentTask.target.transform.position, shootingRange)) { agent.ResetPath(); GameObject target = CurrentTask.target; tasks.Pop(); tasks.Push(new Task((int)ChasseurTask.Shoot, target)); } else if ((CurrentTask.target.transform.position - transform.position).sqrMagnitude >= Mathf.Pow((los.camera.farClipPlane), 2)) { agent.ResetPath(); tasks.Push(new Task((int)ChasseurTask.LostTarget, CurrentTask.target)); } break; //Regarde vers le joueur jusqu'à détection case (int)ChasseurTask.Look: targetPosition = agent.transform.position; targetPosition.y = agent.transform.position.y; agent.transform.LookAt(targetPosition); //Si le joueur est en vue if (los.sighted.Contains(CurrentTask.target)) { //Si le joueur est détecté -> poursuite if ((CurrentTask.target.transform.position - transform.position).sqrMagnitude < Mathf.Pow((CurrentTask.elapsed / detectTime) * (los.camera.farClipPlane), 2)) { GameObject target = CurrentTask.target; tasks.Pop(); tasks.Push(new Task((int)ChasseurTask.Chase, target)); } } else //Si le joueur n'est plus en vue, on diminue le timer { CurrentTask.elapsed -= Time.deltaTime * 2; //Si le temps est négatif, on abandonne if (CurrentTask.elapsed < 0) { tasks.Pop(); } } break; //Le chasseur a perdu sa cible de vue case (int)ChasseurTask.LostTarget: //Si il la voit à nouveau, retourne dans Chase if (los.sighted.Contains(CurrentTask.target)) { tasks.Pop(); } else { //Après un certain temps, retourne à l'état précédent le chase if (CurrentTask.elapsed > lostTargetTime) { tasks.Pop(); tasks.Pop(); } else //Sinon se déplace vers l'objet { MoveTo(CurrentTask.target.transform.position, shootingRange); } } break; case (int)ChasseurTask.Shoot: if (CurrentTask.count == 0) { animator.Play(anim_shoot); CurrentTask.count++; } targetPosition = CurrentTask.target.transform.position; targetPosition.y = agent.transform.position.y; agent.transform.LookAt(targetPosition); if (CurrentTask.elapsed > 7) { tasks.Pop(); } break; //Attends à coté du cadavre du cannibal case (int)ChasseurTask.Defend: WanderAround(CurrentTask.target.transform.position, 5); if (CurrentTask.elapsed > defendTime) { agent.ResetPath(); tasks.Pop(); } break; } }