コード例 #1
0
ファイル: Roodkapje.cs プロジェクト: AbeVos/Doodkapje
 void OnCollisionEnter(Collision col)
 {
     if (State != RoodkapjeState.Destroy && col.transform.tag == "Wolf")
     {
         print(transform.name + " was mauled.");
         State = RoodkapjeState.Dead;
     }
 }
コード例 #2
0
ファイル: Roodkapje.cs プロジェクト: AbeVos/Doodkapje
    /*
     *  Public Functions
     */

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

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

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

        State = RoodkapjeState.Idle;

        fleeRadius  = manager.fleeRadius;
        safeRadius  = manager.safeRadius;
        deathRadius = manager.deathRadius;

        startleTime = Random.Range(0.25f, 0.5f);
    }
コード例 #3
0
ファイル: Roodkapje.cs プロジェクト: AbeVos/Doodkapje
    private float tState;   //  Timer variable for state events

    /*
     *  Built-in Functions
     */

    void Start()
    {
        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 = RoodkapjeState.Idle;

        //  Varieer lengte van Roodkapje

        //transform.FindChild("joint7").transform.lossyScale = 3 * Vector3.up;
        //transform.up * Random.Range(0.1f, 1.9f);
    }
コード例 #4
0
ファイル: Roodkapje.cs プロジェクト: AbeVos/Doodkapje
    void Update()
    {
        wolfPos   = wolf.transform.position;
        _distance = Vector3.Distance(wolfPos, transform.position);

        if (_distance > safeRadius)
        {
            return;
        }
        if (_distance > deathRadius)
        {
            State = RoodkapjeState.Destroy;
        }

        switch (State)
        {
        case RoodkapjeState.Idle:

            Ray        ray = new Ray(transform.position + Vector3.up * 0.5f, wolfPos - transform.position + Vector3.up * 0.5f);
            RaycastHit hit = new RaycastHit();

            if (_distance <= fleeRadius && Physics.Raycast(ray, out hit) && hit.transform.tag == "Wolf")     //  Roodkapje is niet bang voor de grote boze wolf als die niet te zien is
            {
                State = RoodkapjeState.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)));
            }

            if (tState >= Random.Range(5, 15))
            {
                voice.PlayOneShot(speech[Random.Range(0, gasps.Length)], 1.5f);
                tState = 0;
            }

            break;

        case RoodkapjeState.Startled:

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

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

            break;

        case RoodkapjeState.Flee:

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

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

                State = RoodkapjeState.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 RoodkapjeState.Dead:
            if (tState == 0)
            {
                GetComponentInChildren <Renderer>().enabled = false;
                GetComponent <Collider>().enabled           = false;
                //GetComponent<NavMeshAgent>().enabled = false;
                agent.enabled = false;

                manager.Kapjes++;     //meerkapjes :)

                manager.BloodLevel += 5;

                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
                Instantiate(bloem, transform.position, Quaternion.Euler(0, Random.Range(0, 360), 0));
            }

            if (!voice.isPlaying)
            {
                State = RoodkapjeState.Destroy;
            }

            break;

        case RoodkapjeState.Destroy:

            break;
        }

        tState += Time.deltaTime;
    }
コード例 #5
0
    /*
     *  Public Functions
     */
    public void Init(RoodkapjeManager manager, Vector3 pos, Quaternion rot)
    {
        this.manager = manager;

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

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

        State = RoodkapjeState.Idle;

        fleeRadius = manager.fleeRadius;
        safeRadius = manager.safeRadius;
        deathRadius = manager.deathRadius;

        startleTime = Random.Range(0.25f, 0.5f);
    }
コード例 #6
0
    void Update()
    {
        wolfPos = wolf.transform.position;
        _distance = Vector3.Distance(wolfPos, transform.position);

        if (_distance > safeRadius) return;
        if (_distance > deathRadius) State = RoodkapjeState.Destroy;

        switch (State)
        {
            case RoodkapjeState.Idle:

                Ray ray = new Ray(transform.position + Vector3.up * 0.5f, wolfPos - transform.position + Vector3.up * 0.5f);
                RaycastHit hit = new RaycastHit();

                if (_distance <= fleeRadius && Physics.Raycast(ray, out hit) && hit.transform.tag == "Wolf") //  Roodkapje is niet bang voor de grote boze wolf als die niet te zien is
                {
                    State = RoodkapjeState.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)));
                }

                if (tState >= Random.Range(5, 15))
                {
                    voice.PlayOneShot(speech[Random.Range(0, gasps.Length)], 1.5f);
                    tState = 0;
                }

                break;

            case RoodkapjeState.Startled:

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

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

                break;

            case RoodkapjeState.Flee:

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

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

                    State = RoodkapjeState.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 RoodkapjeState.Dead:
                if (tState == 0)
                {
                    GetComponentInChildren<Renderer>().enabled = false;
                    GetComponent<Collider>().enabled = false;
                    //GetComponent<NavMeshAgent>().enabled = false;
                    agent.enabled = false;

                    manager.Kapjes++; //meerkapjes :)

                    manager.BloodLevel += 5;

                    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
                    Instantiate(bloem, transform.position, Quaternion.Euler(0, Random.Range(0, 360), 0));

                }

                if (!voice.isPlaying)
                    State = RoodkapjeState.Destroy;

                break;

            case RoodkapjeState.Destroy:

                break;
        }

        tState += Time.deltaTime;
    }
コード例 #7
0
    /*
     *  Built-in Functions
     */
    void Start()
    {
        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 = RoodkapjeState.Idle;

        //  Varieer lengte van Roodkapje

        //transform.FindChild("joint7").transform.lossyScale = 3 * Vector3.up;
            //transform.up * Random.Range(0.1f, 1.9f);
    }
コード例 #8
0
 void OnCollisionEnter(Collision col)
 {
     if (State != RoodkapjeState.Destroy && col.transform.tag == "Wolf")
     {
         print(transform.name + " was mauled.");
         State = RoodkapjeState.Dead;
     }
 }