Example #1
0
        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();
        }
Example #2
0
    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;
        }
    }
Example #3
0
    /* 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);
        }
    }
Example #4
0
        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();
                        }
                    }
                }
            }
        }
Example #5
0
    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();
    }
Example #6
0
    protected override bool OnCheck()
    {
        Cannibal can = target.value.GetComponentInParent <Cannibal>();

        if (can != null && can.IsDead())
        {
            return(true);
        }
        else
        {
            return(false);
        }
    }
Example #7
0
    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;
        }
    }
Example #8
0
 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);
     }
 }
Example #9
0
    void StopTriggerSense(Cannibal c)
    {
        RewiredInput input_t = c.gameObject.GetComponent <RewiredInput>();

        triggerHuntSense(input_t.playerInputID + input_t.number, false);
    }
Example #10
0
 void Update()
 {
     this.transform.position = Cannibal.BarycentricCannibalPosition();
 }
Example #11
0
        // 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;
            }
        }