Пример #1
0
    void OnCollisionEnter2D(Collision2D coll)
    {
        VictimScript victim = coll.gameObject.GetComponent <VictimScript>();

        if (victim != null)
        {
            victim.Kill();
            if (!victim.heavy && !victim.imitation)
            {
                EatAndHeal(ref victim.meal);
            }
        }
    }
Пример #2
0
    // Use this for initialization
    void Start()
    {
        hud = (GameObject) Instantiate(hudPrefab);//,
            //transform.position + new Vector3(offset.x, offset.y, 0.0f),
            //Quaternion.identity);
        GameObject canvas = GameObject.Find("Canvas");
        hud.transform.SetParent(canvas.transform, true);

        value = -1;
        UpdateValue(0);

        cave = GetComponent<CaveScript>();
        victim = GetComponent<VictimScript>();
    }
Пример #3
0
    // Use this for initialization
    void Start()
    {
        hud = (GameObject)Instantiate(hudPrefab);         //,
        //transform.position + new Vector3(offset.x, offset.y, 0.0f),
        //Quaternion.identity);
        GameObject canvas = GameObject.Find("Canvas");

        hud.transform.SetParent(canvas.transform, true);

        value = -1;
        UpdateValue(0);

        cave   = GetComponent <CaveScript>();
        victim = GetComponent <VictimScript>();
    }
Пример #4
0
 void MakeNoise()
 {
     Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position, 100, 1 << gameObject.layer);
     for (int i = 0; i != colliders.Length; ++i)
     {
         if (colliders[i].gameObject != this)
         {
             // victim has heard us
             if (wind.windBlowsFromTo(transform.position, colliders[i].transform.position))
             {
                 VictimScript victim = colliders[i].GetComponent <VictimScript>();
                 victim.ScareEvent(transform.position);
             }
         }
     }
 }
Пример #5
0
    void OnTriggerEnter2D(Collider2D other)
    {
        ControlScript yeti = other.gameObject.GetComponent <ControlScript>();

        if (yeti != null)
        {
            // this is the yeti, heal him
            yeti.ActivateShelter(this);
        }
        else
        {
            // convert to meal
            VictimScript victim = other.gameObject.GetComponent <VictimScript>();
            if (victim != null)
            {
                meal       += victim.meal;
                victim.meal = 0.0f;
                Destroy(other.gameObject);
            }
        }
    }
Пример #6
0
    // Update is called once per frame
    void Update()
    {
        if (!dead)
        {
            Vector2 horizontalLimits = Camera.main.transform.GetComponent <CameraScript>().horizontalLimits;
            if ((transform.position.y < Camera.main.transform.position.y - Camera.main.orthographicSize) ||
                (transform.position.y > Camera.main.transform.position.y + Camera.main.orthographicSize) ||
                (transform.position.x < horizontalLimits[0]) || (transform.position.x > horizontalLimits[1]))
            {
                // yeti loses
                //Destroy(gameObject);

                GameObject dialog = GameObject.Find("Dialog");
                dialog.transform.Find("Text").GetComponent <Text>().text      = "It ran away!\n\n[Don't let anybody escape]";
                dialog.GetComponent <DialogScript>().restartLevelAfterClosing = true;
                dialog.GetComponent <DialogScript>().Show();

                //Application.LoadLevel(Application.loadedLevel);
                return;
            }
        }
        else
        {
            if (imitation)
            {
                if (Time.time - timerMakeNoise >= 2.0f)
                {
                    timerMakeNoise = Time.time;

                    MakeNoise();
                    audioSource.Play();
                    noiseTimer = Time.time;
                }
            }

            // if some soldier sees a dead soldier, he's scared;
            // also this code works for scaring by scream of dying soldier
            // in case without wind since radii are the same
            Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position, 50, 1 << gameObject.layer);
            for (int i = 0; i != colliders.Length; ++i)
            {
                if ((colliders [i].gameObject != this) && GetComponent <Collider2D> ().enabled)
                {
                    VictimScript victim = colliders [i].GetComponent <VictimScript> ();
                    victim.ScareEvent(transform.position);
                }
            }
        }

        {
            NoiseSourceScript.NoiseType noiseType = NoiseSourceScript.NoiseType.None;
            if (Time.time - noiseTimer < 1.0f)
            {
                if (Mathf.Abs(wind.speed) > 0.01f)
                {
                    noiseType = (wind.speed > 0) ? NoiseSourceScript.NoiseType.WindRight : NoiseSourceScript.NoiseType.WindLeft;
                }
                else
                {
                    noiseType = NoiseSourceScript.NoiseType.Uniform;
                }
            }

            GetComponent <NoiseSourceScript> ().SetNoiseType(noiseType);
        }

        if ((meal <= 0.0f) && !imitation)
        {
            GetComponent <SpriteRenderer>().enabled = false;
            GetComponent <Collider2D>().enabled     = false;
            if (!audioSource.isPlaying)
            {
                Destroy(gameObject);
            }
        }
    }
Пример #7
0
    // Update is called once per frame
    void Update()
    {
        float inputV        = Input.GetAxis("Vertical");
        float inputH        = Input.GetAxis("Horizontal");
        float inputDeadZone = 0.1f;

        NoiseSourceScript.NoiseType noiseType = NoiseSourceScript.NoiseType.None;

        if (Mathf.Abs(inputV) >= inputDeadZone)
        {
            direction = (inputV > 0) ? 1 : 3;
            //noiseType = NoiseSourceScript.NoiseType.Uniform;
        }
        else if (Mathf.Abs(inputH) >= inputDeadZone)
        {
            direction = (inputH > 0) ? 0 : 2;
            //noiseType = NoiseSourceScript.NoiseType.Uniform;
        }

        //if (Mathf.Abs(inputH) < inputDeadZone) inputH = 0.0f;
        //if (Mathf.Abs(inputV) < inputDeadZone) inputV = 0.0f;

        GetComponent <SpriteRenderer>().sprite = yetiDirectionSprites[direction];

        //transform.position = transform.position + Time.deltaTime * speed * (new Vector3(inputH, inputV, 0.0f));
        Vector2 velocity = speed * (new Vector2(inputH, inputV)).normalized;

        if (wind.enabled)
        {
            if ((((wind.speed > 0) && (velocity.x > 0)) ||
                 ((wind.speed < 0) && (velocity.x < 0))) &&
                (Mathf.Abs(wind.speed) >= Mathf.Abs(velocity.x)))
            {
                velocity.x = 0.0f;
            }
            else if (Mathf.Abs(velocity.x) > 0)
            {
                velocity.x += wind.speed;
            }

            if ((Mathf.Abs(wind.speed) > 0.01f) && (Mathf.Abs(velocity.magnitude) > 0))
            {
                noiseType = (wind.speed > 0) ? NoiseSourceScript.NoiseType.WindRight : NoiseSourceScript.NoiseType.WindLeft;
            }
        }
        currentVelocity = velocity;

        GetComponent <NoiseSourceScript> ().SetNoiseType(noiseType);

        // grabbing victims
        bool grab = Input.GetAxis("Action") >= inputDeadZone;

        Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position, 20, layerVictim);
        for (int i = 0; i != colliders.Length; ++i)
        {
            VictimScript victim = colliders[i].GetComponent <VictimScript>();
            victim.Grab(grab);
            if (grab)
            {
                victim.Kill();
            }
        }

        // scaring victims by our appearance and sound
        colliders = Physics2D.OverlapCircleAll(transform.position, 100, layerVictim);
        for (int i = 0; i != colliders.Length; ++i)
        {
            float directionSound = colliders[i].transform.position.x - transform.position.x;
            float directionWind  = wind.speed;

            // victim has seen us
            if ((Vector2.Distance(transform.position, colliders[i].transform.position) <= 50.0f)
                // victim has heard us
                || (wind.enabled && ((Mathf.Abs(velocity.magnitude) > 10.0f) && wind.windBlowsFromTo(transform.position, colliders[i].transform.position))))
            {
                VictimScript victim = colliders[i].GetComponent <VictimScript>();
                victim.ScareEvent(transform.position);
            }
        }

        if (shelter == null)
        {
            hp -= Time.deltaTime * hpDropOutside;
        }
        else
        {
            if (hp < maxHp)
            {
                EatAndHeal(ref shelter.meal);
            }
            hp -= Time.deltaTime * hpDropShelter;
        }

        // yeti loses
        if (hp <= 0.0f)
        {
            GameObject dialog = GameObject.Find("Dialog");
            dialog.transform.Find("Text").GetComponent <Text>().text      = "I'm hungry!!!\n\n[Watch over the pink health bar at the bottom]";
            dialog.GetComponent <DialogScript>().restartLevelAfterClosing = true;
            dialog.GetComponent <DialogScript>().Show();
            //Application.LoadLevel(Application.loadedLevel);
        }
    }