Ejemplo n.º 1
0
 public void Attack()
 {
     attacking = true;
     cooldown -= Time.deltaTime;
     if (cooldown <= 0)
     {
         if (target != null)
         {
             if (target.tag == "Rabbit")
             {
                 target.GetComponent <RabbitProperties>().health--;
                 if (target.GetComponent <RabbitProperties>().health <= 0)
                 {
                     currentState = RabbitState.Move;
                     attacking    = false;
                 }
             }
             else
             {
                 // Decrement enemy resources
             }
             cooldown = Random.Range(1, 2);
         }
     }
 }
Ejemplo n.º 2
0
    protected override sealed void Target(int xCoord, int zCoord)
    {
        base.Target(xCoord, zCoord);

        if (currentX == xCoord && currentZ == zCoord)
        {
            if (state == RabbitState.FoodTargeting)
            {
                state = RabbitState.Eating;
            }

            else if (state == RabbitState.MateTargeting)
            {
                state = RabbitState.Mating;
            }

            if (Mathf.Abs(targetZ) == 1 && Mathf.Abs(targetX) == 1)
            {
                targetX = 0;
            }
        }

        else
        {
            previousHopPoint = transform.position;
            targetHopPoint   = ecosystem.terrainManager.terrain[currentX, currentZ] + Vector3.up * 0.5f;
            currentlyHopping = true;
        }
    }
Ejemplo n.º 3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RabbitBehavior" /> class.
 /// </summary>
 public RabbitBehavior()
 {
     this.velocity         = new Vector2(0.2f, 0);
     this.initialDirection = Vector2.UnitX;
     this.State            = RabbitState.still;
     this.stillTime        = TimeSpan.Zero;
 }
Ejemplo n.º 4
0
 void OnCollisionEnter(Collision col)
 {
     if (State != RabbitState.Destroy && col.transform.tag == "Wolf")
     {
         print(transform.name + " was mauled.");
         State = RabbitState.Dead;
     }
 }
Ejemplo n.º 5
0
    //Runs each frame if inPlayerRange
    private void Run()
    {
        rabbitState = RabbitState.running;

        if (goRun)
        {
            StartCoroutine(RunCoroutine());
        }
    }
Ejemplo n.º 6
0
 // Use this for initialization
 void Start()
 {
     rBody      = GetComponent <Rigidbody2D>();
     properties = GetComponent <RabbitProperties>();
     queuedLayers.Add((int)RabbitState.Move);
     currentState = RabbitState.Move;
     cooldown     = 1f;
     gm           = GameObject.FindGameObjectWithTag("GameManager").GetComponent <GameManagment>();
 }
Ejemplo n.º 7
0
    protected override sealed void IncreaseHunger(float rate)
    {
        base.IncreaseHunger(rate);

        if (hunger >= 100)
        {
            state = RabbitState.Dying;
        }
    }
Ejemplo n.º 8
0
 // Use this for initialization
 void Start()
 {
     rBody      = GetComponent <Rigidbody2D>();
     properties = GetComponent <RabbitProperties>();
     queuedLayers.Add((int)RabbitState.Move);
     currentState = RabbitState.Move;
     cooldown     = 1f;
     gm           = GameObject.FindGameObjectWithTag("GameManager").GetComponent <GameManagment>();
     //Debug.Log(gm);
     Debug.Log("Reminder: 0 = Attack, 1 = Mine, 2 = Move");
 }
Ejemplo n.º 9
0
 void OnTriggerStay(Collider other)
 {
     if (!targetFlower)
     {
         if (other.gameObject.CompareTag("flower"))
         {
             targetFlower = other.gameObject.GetComponent <Flower>();
             state        = RabbitState.Targeting;
         }
     }
 }
Ejemplo n.º 10
0
    void PerformStateAction()
    {
        int x = 0;
        int z = 0;

        switch (state)
        {
        case RabbitState.Searching:
            HopToNearbySquareAfterDelay(2, x, z);
            break;

        case RabbitState.Targeting:
            if (!targetFlower)
            {
                state = RabbitState.Searching;
                if (Mathf.Abs(targetZ) == 1 && Mathf.Abs(targetX) == 1)
                {
                    targetX = 0;
                }
                return;
            }
            x = targetFlower.xCoord;
            z = targetFlower.zCoord;
            HopToNearbySquareAfterDelay(1, x, z);
            break;

        case RabbitState.Dying:
            Die();
            break;

        case RabbitState.Eating:
            EatFlower();
            break;

        case RabbitState.Fleeing:
            if (!wolfToFleeFrom)
            {
                state = RabbitState.Searching;
                if (Mathf.Abs(targetZ) == 1 && Mathf.Abs(targetX) == 1)
                {
                    targetX = 0;
                }
                return;
            }
            x = wolfToFleeFrom.currentX;
            z = wolfToFleeFrom.currentZ;
            HopToNearbySquareAfterDelay(3, x, z);
            ClearWolfWhenSafe();
            break;
        }
    }
Ejemplo n.º 11
0
 void SetPriority()
 {
     if (state == RabbitState.FoodSearching || state == RabbitState.MateSearching)
     {
         if (reproduction > hunger)
         {
             state = RabbitState.MateSearching;
         }
         else
         {
             state = RabbitState.FoodSearching;
         }
     }
 }
Ejemplo n.º 12
0
        public Material GetMaterial(RabbitState rabbitState)
        {
            switch (rabbitState)
            {
            case RabbitState.Run:
                return(runMaterial);

            case RabbitState.Warning:
                return(warningMaterial);

            default:
                return(sleepMaterial);
            }
        }
Ejemplo n.º 13
0
    void Target()
    {
        if (!targetFlower)
        {
            state = RabbitState.Searching;
            if (Mathf.Abs(targetZ) == 1 && Mathf.Abs(targetX) == 1)
            {
                targetX = 0;
            }
            return;
        }

        int x = targetFlower.xCoord;
        int z = targetFlower.zCoord;

        int xChange = 0;
        int zChange = 0;

        if (currentX != x)
        {
            xChange = currentX > x ? -1 : 1;
        }

        if (currentZ != z)
        {
            zChange = currentZ > z ? -1 : 1;
        }

        currentX += xChange;
        targetX   = xChange;
        currentZ += zChange;
        targetZ   = zChange;

        if (currentX == x && currentZ == z)
        {
            state = RabbitState.Eating;
            if (Mathf.Abs(targetZ) == 1 && Mathf.Abs(targetX) == 1)
            {
                targetX = 0;
            }
        }

        else
        {
            previousHopPoint = transform.position;
            targetHopPoint   = ecosystem.terrainManager.terrain[currentX, currentZ] + Vector3.up * 0.5f;
            currentlyHopping = true;
        }
    }
Ejemplo n.º 14
0
    void EatFlower()
    {
        eatTimer += Time.deltaTime;

        if (eatTimer > 1)
        {
            hunger  -= hungerLossOnEat;
            state    = RabbitState.Searching;
            eatTimer = 0;
            if (!ecosystem.resourcesToRemove.Contains(targetFlower) && targetFlower)
            {
                ecosystem.resourcesToRemove.Add(targetFlower);
            }
        }
    }
Ejemplo n.º 15
0
 void SetState(bool move, bool mine, bool attack)
 {
     if (move)
     {
         currentState = RabbitState.Move;
     }
     else if (mine)
     {
         currentState = RabbitState.Mine;
     }
     else if (attack)
     {
         currentState = RabbitState.Attack;
     }
 }
Ejemplo n.º 16
0
    void IncreaseHunger()
    {
        hungerTimer += Time.deltaTime;

        if (hungerTimer > hungerIncreaseRate)
        {
            hungerTimer = 0;
            hunger++;
        }

        if (hunger >= 100)
        {
            state = RabbitState.Dying;
        }
    }
Ejemplo n.º 17
0
    private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.tag == "Spike")
        {
            rabbitState = RabbitState.dead;
            StopCoroutine("RunCoroutine");
            alive = false;
            anim.SetTrigger("die");
            ScreenShake.instance.ShakeFixed(0.3f, 0.05f);
            psDead.gameObject.SetActive(true);
            //Wwise Stukje
            AkSoundEngine.PostEvent("Rabbit_Dead", gameObject);

            StartCoroutine(DieCoroutine());
        }
    }
Ejemplo n.º 18
0
    /*
     *  Public Functions
     */

    public void Init(RoodkapjeManager manager, Vector3 pos, Quaternion rot)
    {
        this.manager = manager;

        GetComponentInChildren <Renderer>().enabled = true;
        GetComponent <Collider>().enabled           = true;
        GetComponent <NavMeshAgent>().enabled       = true;

        transform.position = pos;
        transform.rotation = rot;

        State = RabbitState.Idle;

        fleeRadius  = manager.fleeRadius;
        safeRadius  = manager.safeRadius;
        startleTime = Random.Range(0.25f, 0.5f);
    }
Ejemplo n.º 19
0
    void Mate()
    {
        mateTimer += Time.deltaTime;

        if (mateTimer > 1)
        {
            if (!gender)
            {
                CreateOffSpring(ecosystem.rabbit);
            }

            mateTimer    = 0;
            reproduction = 0;
            state        = RabbitState.FoodSearching;
            mate         = null;
        }
    }
Ejemplo n.º 20
0
 // Update is called once per frame
 void Update()
 {
     try
     {
         if (queuedLayers == null || queuedLayers.Count == 0)
         {
             queuedLayers.Add((int)RabbitState.Move);                                // default state
         }
         else
         {
             queuedLayers.Sort();                                            // Ascending order sort, Sorts according to highest priority (0 = highest priority)
             if (queuedLayers[0] == (int)RabbitState.Move)                   // index 0 will have lowest value after sort
             {
                 // Call move function
                 currentState = RabbitState.Move;
                 Move();
                 print("Move");
             }
             else if (queuedLayers[0] == (int)RabbitState.Mine)
             {
                 // Call mine function
                 currentState = RabbitState.Mine;
                 Mine();
                 print("Mine");
             }
             else if (queuedLayers[0] == (int)RabbitState.Attack)
             {
                 // Call attack function
                 currentState = RabbitState.Attack;
                 Attack();
                 print("Attack");
             }
             queuedLayers.RemoveAt(0);                       // Remove the highest priority action after execution
                                                             // may need to change the position of this
         }
     }
     catch (System.IndexOutOfRangeException e)
     {
         throw new System.ArgumentOutOfRangeException("index parameter is out of range.", e);
     }
     if (GetComponent <RabbitProperties>().health <= 0)
     {
         Destroy(this.gameObject);
     }
 }
Ejemplo n.º 21
0
 //Runs each frame
 private void CheckStateTransitions()
 {
     if (rabbitState == RabbitState.idle)
     {
         if (isInPlayerRange)
         {
             Run();
         }
     }
     else if (rabbitState == RabbitState.running)
     {
         if (isRunning == false)
         {
             rabbitState = RabbitState.idle;
             goRun       = true;
         }
     }
 }
Ejemplo n.º 22
0
    void OnTriggerStay(Collider other)
    {
        if (!wolfToFleeFrom && state != RabbitState.Dying)
        {
            if (other.gameObject.CompareTag("wolf") && !other.isTrigger)
            {
                state          = RabbitState.Fleeing;
                wolfToFleeFrom = other.gameObject.GetComponent <Wolf>();
            }
        }

        if (!targetFlower && state != RabbitState.Fleeing)
        {
            if (other.gameObject.CompareTag("flower"))
            {
                targetFlower = other.gameObject.GetComponent <Flower>();
                state        = RabbitState.Targeting;
            }
        }
    }
Ejemplo n.º 23
0
    private float tState;   //  Timer variable for state events

    /*
     *  Built-in Functions
     */

    void Start()
    {
        GetComponent <Renderer>().material = materials[Random.Range(0, materials.Length)];

        wolf = FindObjectOfType <Wolf>();

        agent = GetComponent <NavMeshAgent>();

        /*voice = gameObject.AddComponent<AudioSource>();
         * voice.playOnAwake = false;
         * voice.pitch = Random.Range(0.85f, 1.25f);
         * voice.spatialBlend = 1;*/

        feet              = gameObject.AddComponent <AudioSource>();
        feet.playOnAwake  = false;
        feet.pitch        = Random.Range(0.85f, 1.15f);
        feet.spatialBlend = 1;

        State = RabbitState.Idle;
    }
Ejemplo n.º 24
0
        /// <summary>
        /// Applies the impulse.
        /// </summary>
        public void ApplyImpulse()
        {
            if (this.state == RabbitState.dead ||
                this.state == RabbitState.dying)
            {
                return;
            }

            // Position
            this.position.X = Transform.X;
            this.position.Y = Transform.Y;

            Vector2 direction = this.position - this.moonPosition;

            float distanceLenghtSquare = direction.LengthSquared();

            direction.Normalize();

            //this.velocity += Utils.RotateVectorAroundPoint(direction * 5000 / distanceLenghtSquare, this.moonPosition, 30);
            this.velocity += Utils.RotateVectorAroundPoint(direction * 5000 / distanceLenghtSquare, this.moonPosition, 30);

            this.State = RabbitState.afloat;
        }
Ejemplo n.º 25
0
    void OnTriggerStay(Collider other)
    {
        if (!wolfToFleeFrom && state != RabbitState.Dying)
        {
            if (other.gameObject.CompareTag("wolf") && !other.isTrigger)
            {
                state          = RabbitState.Fleeing;
                wolfToFleeFrom = other.gameObject.GetComponent <Wolf>();
            }
        }

        if (!targetFlower && state != RabbitState.Fleeing)
        {
            if (other.gameObject.CompareTag("flower"))
            {
                targetFlower = other.gameObject.GetComponent <Flower>();
                state        = RabbitState.FoodTargeting;
            }
        }

        if (state == RabbitState.MateSearching)
        {
            if (other.gameObject.CompareTag("rabbit"))
            {
                //Generates garbage
                Rabbit r = other.gameObject.GetComponent <Rabbit>();

                if (r.state == RabbitState.MateSearching && gender != r.gender)
                {
                    mate    = r;
                    state   = RabbitState.MateTargeting;
                    r.mate  = this;
                    r.state = RabbitState.MateTargeting;
                }
            }
        }
    }
Ejemplo n.º 26
0
 //------------------------------------------------------------------------
 void ChasingUpdate()
 {
     if( target != null )
     {
         agent.SetDestination( target.position );
     }
     else
     {
         if( Vector3.Distance( trans.position, agent.destination ) < agent.stoppingDistance + nextWaypointOffset )
         {
             state	=	RabbitState.idle;
             MoveToNextWaypoint();
         }
     }
 }
Ejemplo n.º 27
0
        /// <summary>
        /// Allows this instance to execute custom logic during its <c>Update</c>.
        /// </summary>
        /// <param name="gameTime">The game time.</param>
        /// <remarks>
        /// This method will not be executed if the <see cref="T:WaveEngine.Framework.Component" />, or the <see cref="T:WaveEngine.Framework.Entity" />
        /// owning it are not <c>Active</c>.
        /// </remarks>
        protected override void Update(TimeSpan gameTime)
        {
            // Position
            this.position.X = Transform.X;
            this.position.Y = Transform.Y;

            Vector2 distance       = this.moonPosition - this.position;
            float   distanceSquare = distance.LengthSquared();

            // CheckCollision
            float force = this.moonForce * ((this.moonMass * this.mass) / distanceSquare);

            distance.Normalize();

            this.velocity += distance * force;

            this.position += this.velocity * (float)gameTime.TotalMilliseconds;

            Vector2 newDistance       = this.moonPosition - this.position;
            float   newDistanceLength = newDistance.Length();

            if (newDistanceLength < this.moonRadio)
            {
                this.velocity = Vector2.Zero;

                switch (this.state)
                {
                case RabbitState.afloat:
                    this.State = RabbitState.still;
                    break;

                case RabbitState.dying:
                    this.State = RabbitState.dead;
                    break;
                }
            }
            else if (newDistanceLength > this.gravityRadio)
            {
                this.State = RabbitState.dying;
            }
            else
            {
                this.Transform.X = this.position.X;
                this.Transform.Y = this.position.Y;
            }

            // Rotation
            if (this.state == RabbitState.dying)
            {
                this.Transform.Rotation += (float)gameTime.TotalMilliseconds / 250;
            }
            else
            {
                float angle = Vector2.Angle(this.initialDirection, distance);
                this.Transform.Rotation = -angle;
            }

            // Still Time
            if (this.state == RabbitState.still)
            {
                this.stillTime += gameTime;
                if (this.stillTime > TimeSpan.FromSeconds(3))
                {
                    this.State = RabbitState.dead;
                }
            }
            else
            {
                this.stillTime = TimeSpan.Zero;
            }
        }
Ejemplo n.º 28
0
        public void JumpFromBirth()
        {
            _rabbitState = RabbitState.Born;
            //returns like 1,1,1
            Vector3 movementVector3 = GameManager.Instance.GetRandomMovementVectorWithinGameBounds();
            JumpNormal (movementVector3);

            StartCoroutine (JumpFromBirth_Coroutine());
        }
Ejemplo n.º 29
0
 public IEnumerator JumpFromBirth_Coroutine()
 {
     yield return new WaitForSeconds (2);
     _rabbitState = RabbitState.Baby;
 }
Ejemplo n.º 30
0
        //----------------------------------------------------------------------------
        //  Private methods
        //----------------------------------------------------------------------------
        /// <summary>
        /// We handle collision from positionVector to positionVector by distance. 
        /// It is better for gameplay than Colliders.
        /// </summary>
        private IEnumerator RabbitCollisionDetection_Coroutine()
        {
            while (true)
            {
                yield return new WaitForSeconds (_DELAY_BETWEEN_COLLISION_DETECTION);

                float distance;
                Debug.Log ("FOR: ");
                foreach (GameObject nextGameObject in GameManager.Instance.CurrentGameLevel.GameObjects)
                {

                    //TODO: Remove this bug. Somehow the list of gameobjects has null (from a recent failed removal?)
                    if (nextGameObject == null)
                    {
                        continue;
                    }

                    if (nextGameObject != gameObject)
                    {
                        Debug.Log ("\tgameobject: " + gameObject);
                        Debug.Log ("\tnextGameObject: " + nextGameObject);
                        distance = Vector3.Distance (transform.position, nextGameObject.transform.position);

                        if (distance < _MINIMUM_DISTANCE_FOR_COLLISION)
                        {
                            //KEEP
                            //Debug.Log ("\td: " + distance + " between " + transform.name + " & " + nextGameObject.name);

                            if (nextGameObject.GetComponent<Carrot>() != null)
                            {
                                GameManager.Instance.CurrentGameLevel.RemoveGameObject (nextGameObject);
                                _spriteAnimator.SetTrigger (_EAT_TRIGGER);
                                _rabbitState = RabbitState.Adult;
                                _isEating = true;
                                break;
                            }
                            else if (_rabbitState == RabbitState.Adult &&
                                     nextGameObject.GetComponent<Rabbit>() != null &&
                                     nextGameObject.GetComponent<Rabbit>()._rabbitState == RabbitState.Adult)
                            {

                                GameObject makingLoveGameObject = GameManager.Instance.CurrentGameLevel.InstantiatePrefabType (PrefabType.MakingLove, 0);
                                makingLoveGameObject.transform.position = gameObject.transform.position;
                                GameManager.Instance.CurrentGameLevel.RemoveGameObject (nextGameObject);
                                GameManager.Instance.CurrentGameLevel.RemoveGameObject (gameObject);
                                break;
                            }
                            else if ( nextGameObject.GetComponent<Trap>())
                            {
                                //Make blood splatter
                                //GameObject makingLoveGameObject = GameManager.Instance.CurrentGameLevel.InstantiatePrefabType (PrefabType.MakingLove, 0);
                                nextGameObject.GetComponent<Trap>().CloseTrapOnRabbit();
                                GameManager.Instance.CurrentGameLevel.RemoveGameObject (gameObject);
                                break;
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 31
0
 //----------------------------------------------------------------------------
 //  Public methods
 //----------------------------------------------------------------------------
 public void SetInstantlyAsAdult()
 {
     _rabbitState = RabbitState.Adult;
 }
Ejemplo n.º 32
0
 //------------------------------------------------------------------------
 void OnEnterInteractive(GameObject _go)
 {
     if( _go.CompareTag("Player") )
     {
         state	=	RabbitState.attacking;
         ActivateInteraction();
     }
 }
Ejemplo n.º 33
0
 void OnCollisionEnter(Collision col)
 {
     if (State != RabbitState.Destroy && col.transform.tag == "Wolf")
     {
         print(transform.name + " was mauled.");
         State = RabbitState.Dead;
     }
 }
Ejemplo n.º 34
0
    /*
     *  Built-in Functions
     */
    void Start()
    {
        GetComponent<Renderer>().material = materials[Random.Range(0, materials.Length)];

        wolf = FindObjectOfType<Wolf>();

        agent = GetComponent<NavMeshAgent>();

        /*voice = gameObject.AddComponent<AudioSource>();
        voice.playOnAwake = false;
        voice.pitch = Random.Range(0.85f, 1.25f);
        voice.spatialBlend = 1;*/

        feet = gameObject.AddComponent<AudioSource>();
        feet.playOnAwake = false;
        feet.pitch = Random.Range(0.85f, 1.15f);
        feet.spatialBlend = 1;

        State = RabbitState.Idle;
    }
Ejemplo n.º 35
0
    void Update()
    {
        wolfPos = wolf.transform.position;
        _distance = Vector3.Distance(wolfPos, transform.position);

        if (_distance > manager.safeRadius) return;

        switch (State)
        {
            case RabbitState.Idle:

                if (_distance <= fleeRadius) //  Dat konijn ook: ziet hij je niet van voren, dan hoort hij je wel met zijn oren.
                {
                    State = RabbitState.Startled;

                    //voice.PlayOneShot(gasps[Random.Range(0, gasps.Length)], 1.5f);
                }
                else if (tState >= Random.Range(2, 4))
                {
                    agent.SetDestination(transform.position + new Vector3(Random.Range(-5, 5), 0, Random.Range(-5, 5)));
                }

                break;

            case RabbitState.Startled:

                if (tState >= startleTime)
                {
                    State = RabbitState.Flee;

                    //voice.clip = whimpers[Random.Range(0, whimpers.Length)];
                    //voice.Play();
                }

                break;

            case RabbitState.Flee:

                agent.SetDestination(transform.position + (transform.position - wolfPos) / _distance * safeRadius);

                if (_distance >= safeRadius)
                {
                    agent.SetDestination(transform.position);

                    State = RabbitState.Idle;
                }

                /*if (!feet.isPlaying)
                {
                    feet.clip = walks[Random.Range(0, walks.Length)];
                    feet.Play();
                }

                if (!voice.isPlaying && tState % 4 < Time.deltaTime)
                {
                    voice.clip = whimpers[Random.Range(0, whimpers.Length)];
                    voice.Play();
                }*/

                break;

            case RabbitState.Dead:
                if (tState == 0)
                {
                    GetComponentInChildren<Renderer>().enabled = false;
                    GetComponent<Collider>().enabled = false;
                    GetComponent<NavMeshAgent>().enabled = false;

                    manager.BloodLevel += 2;

                    for (int i = 0; i < gibs.Length; i++)
                    {
                        GameObject g = (GameObject)Instantiate(gibs[i], gibPositions[i] + transform.position, transform.rotation);
                    }

                    /*voice.clip = shrieks[Random.Range(0, shrieks.Length)];
                    voice.Play();*/

                    feet.clip = gore[Random.Range(0, gore.Length)];
                    feet.Play();

                    Instantiate(roodKwakje, transform.position, Quaternion.identity);   //  Want mathijs wilde meer impact voor een ontploffende roodkap

                }

                //if (!voice.isPlaying)
                    State = RabbitState.Destroy;

                break;

            case RabbitState.Destroy:

                break;
        }

        tState += Time.deltaTime;
    }
Ejemplo n.º 36
0
    /*
     *  Public Functions
     */
    public void Init(RoodkapjeManager manager, Vector3 pos, Quaternion rot)
    {
        this.manager = manager;

        GetComponentInChildren<Renderer>().enabled = true;
        GetComponent<Collider>().enabled = true;
        GetComponent<NavMeshAgent>().enabled = true;

        transform.position = pos;
        transform.rotation = rot;

        State = RabbitState.Idle;

        fleeRadius = manager.fleeRadius;
        safeRadius = manager.safeRadius;
        startleTime = Random.Range(0.25f, 0.5f);
    }
Ejemplo n.º 37
0
 //------------------------------------------------------------------------
 void OnEnterSight(GameObject _go)
 {
     if( _go.CompareTag("Player") )
     {
         state	=	RabbitState.chasing;
         target	=	_go.transform;
     }
 }
Ejemplo n.º 38
0
    void Update()
    {
        wolfPos   = wolf.transform.position;
        _distance = Vector3.Distance(wolfPos, transform.position);

        if (_distance > manager.safeRadius)
        {
            return;
        }

        switch (State)
        {
        case RabbitState.Idle:

            if (_distance <= fleeRadius)     //  Dat konijn ook: ziet hij je niet van voren, dan hoort hij je wel met zijn oren.
            {
                State = RabbitState.Startled;

                //voice.PlayOneShot(gasps[Random.Range(0, gasps.Length)], 1.5f);
            }
            else if (tState >= Random.Range(2, 4))
            {
                agent.SetDestination(transform.position + new Vector3(Random.Range(-5, 5), 0, Random.Range(-5, 5)));
            }

            break;

        case RabbitState.Startled:

            if (tState >= startleTime)
            {
                State = RabbitState.Flee;

                //voice.clip = whimpers[Random.Range(0, whimpers.Length)];
                //voice.Play();
            }

            break;

        case RabbitState.Flee:

            agent.SetDestination(transform.position + (transform.position - wolfPos) / _distance * safeRadius);

            if (_distance >= safeRadius)
            {
                agent.SetDestination(transform.position);

                State = RabbitState.Idle;
            }

            /*if (!feet.isPlaying)
             * {
             *  feet.clip = walks[Random.Range(0, walks.Length)];
             *  feet.Play();
             * }
             *
             * if (!voice.isPlaying && tState % 4 < Time.deltaTime)
             * {
             *  voice.clip = whimpers[Random.Range(0, whimpers.Length)];
             *  voice.Play();
             * }*/

            break;

        case RabbitState.Dead:
            if (tState == 0)
            {
                GetComponentInChildren <Renderer>().enabled = false;
                GetComponent <Collider>().enabled           = false;
                GetComponent <NavMeshAgent>().enabled       = false;

                manager.BloodLevel += 2;

                for (int i = 0; i < gibs.Length; i++)
                {
                    GameObject g = (GameObject)Instantiate(gibs[i], gibPositions[i] + transform.position, transform.rotation);
                }

                /*voice.clip = shrieks[Random.Range(0, shrieks.Length)];
                 * voice.Play();*/

                feet.clip = gore[Random.Range(0, gore.Length)];
                feet.Play();

                Instantiate(roodKwakje, transform.position, Quaternion.identity);       //  Want mathijs wilde meer impact voor een ontploffende roodkap
            }

            //if (!voice.isPlaying)
            State = RabbitState.Destroy;

            break;

        case RabbitState.Destroy:

            break;
        }

        tState += Time.deltaTime;
    }