Beispiel #1
0
 void CanMate()
 {
     if (Time.time - TimeTilReadyForMating.value > m_InstanciationTime)
     {
         m_Behaviour = BugBehaviour.Mating;
     }
 }
Beispiel #2
0
 void SeekMate()
 {
     if ((m_TargetPosition - gameObject.transform.position).magnitude < 1f)
     {
         Mate();
         m_Behaviour = BugBehaviour.Searching;
     }
 }
Beispiel #3
0
    void DetectPlayer()
    {
        Vector3 playerPosition = m_GameManager.Player.transform.position;
        Vector2 playerXZ       = new Vector2(playerPosition.x, playerPosition.z);
        Vector2 bugXZ          = new Vector2(gameObject.transform.position.x, gameObject.transform.position.z);

        float distance = Mathf.Sqrt((playerXZ - bugXZ).sqrMagnitude);

        if (distance < RangePlayerDetection.value)
        {
            m_Behaviour = BugBehaviour.Fleeing;
            DropPheromone(Pheromone.PheromoneType.Ennemy, playerPosition);
        }
        else
        {
            if (m_Behaviour == BugBehaviour.Fleeing)
            {
                m_Behaviour = BugBehaviour.Searching;
            }
        }
    }
Beispiel #4
0
    void ProcessPheromone(Pheromone pheromone)
    {
        // Flee for your life
        if (m_Behaviour == BugBehaviour.Fleeing)
        {
            return;
        }

        switch (pheromone.Type)
        {
        case (Pheromone.PheromoneType.Ennemy):
            m_Behaviour = BugBehaviour.Fleeing;
            break;

        case (Pheromone.PheromoneType.Mating):
            if (pheromone.Dropper != this)
            {
                if (Time.time - TimeTilReadyForMating.value < m_InstanciationTime)
                {
                    return;
                }
                m_Behaviour      = BugBehaviour.SeekingMate;
                m_TargetPosition = pheromone.Target;
                m_Mate           = pheromone.Dropper;
            }
            break;

        case (Pheromone.PheromoneType.Food):
            m_Behaviour      = BugBehaviour.Gathering;
            m_TargetPosition = pheromone.Target;
            break;

        case (Pheromone.PheromoneType.Home):
            if (m_Behaviour == BugBehaviour.Gathering)
            {
                m_TargetPosition = pheromone.Target;
            }
            break;
        }
    }
Beispiel #5
0
 void SeekMate()
 {
     if ((m_TargetPosition - gameObject.transform.position).magnitude < 1f)
     {
         Mate();
         m_Behaviour = BugBehaviour.Searching;
     }
 }
Beispiel #6
0
    void ProcessPheromone(Pheromone pheromone)
    {
        // Flee for your life
        if (m_Behaviour == BugBehaviour.Fleeing)
        {
            return;
        }

        switch (pheromone.Type)
        {
            case (Pheromone.PheromoneType.Ennemy):
                m_Behaviour = BugBehaviour.Fleeing;
                break;
            case (Pheromone.PheromoneType.Mating):
                if (pheromone.Dropper != this)
                {
                    if (Time.time - TimeTilReadyForMating.value < m_InstanciationTime)
                    {
                        return;
                    }
                    m_Behaviour = BugBehaviour.SeekingMate;
                    m_TargetPosition = pheromone.Target;
                    m_Mate = pheromone.Dropper;
                }
                break;
            case (Pheromone.PheromoneType.Food):
                m_Behaviour = BugBehaviour.Gathering;
                m_TargetPosition = pheromone.Target;
                break;
            case (Pheromone.PheromoneType.Home):
                if (m_Behaviour == BugBehaviour.Gathering)
                {
                    m_TargetPosition = pheromone.Target;
                }
                break;
        }
    }
Beispiel #7
0
 void OnCollisionExit(Collision coll)
 {
     if (coll.gameObject.layer == m_EnvironmentLayer)
     {
         m_State = BugState.MidAir;
     }
     if (coll.gameObject.layer == m_FoodLayer)
     {
         if (m_Behaviour == BugBehaviour.Gathering)
         {
             m_Behaviour = BugBehaviour.Searching;
         }
     }
 }
Beispiel #8
0
    void DetectPlayer()
    {
        Vector3 playerPosition = m_GameManager.Player.transform.position;
        Vector2 playerXZ = new Vector2(playerPosition.x, playerPosition.z);
        Vector2 bugXZ = new Vector2(gameObject.transform.position.x, gameObject.transform.position.z);

        float distance = Mathf.Sqrt((playerXZ - bugXZ).sqrMagnitude);
        if (distance < RangePlayerDetection.value)
        {
            m_Behaviour = BugBehaviour.Fleeing;
            DropPheromone(Pheromone.PheromoneType.Ennemy, playerPosition);
        }
        else
        {
            if (m_Behaviour == BugBehaviour.Fleeing)
            {
                m_Behaviour = BugBehaviour.Searching;
            }
        }
    }
Beispiel #9
0
 void CanMate()
 {
     if (Time.time - TimeTilReadyForMating.value > m_InstanciationTime)
     {
         m_Behaviour = BugBehaviour.Mating;
     }
 }