Example #1
0
    private void Awake()
    {
        ins = this;

        List <Transform> houseList = new List <Transform>(houses);

        if (!tutorialShowed)
        {
            houseList.Remove(nearsetHouse1);
            tutorialVilliger = Instantiate <Villiger>(PickVilligerPrefab());
            tutorialVilliger.transform.position = nearsetHouse1.position;
            tutorialVilliger.gameObject.SetActive(true);
            villigerNum++;
            villigerSpawned++;
            villigerInitlNum--;

            houseList.Remove(nearsetHouse2);
            tutorialGuard = Instantiate <Guard>(guardPrefab);
            tutorialGuard.transform.position = nearsetHouse2.position;
            tutorialGuard.gameObject.SetActive(true);
            guardNum--;

            Time.timeScale = 0;
            focusMask.transform.position = Player.transform.position + Vector3.up;

            tutorialText.gameObject.SetActive(true);
            tutorialText.text = tutorialTexts[tutorialState];
            tutorialText.transform.position = GetComponent <Camera>().WorldToScreenPoint(focusMask.position + new Vector3(0, 2));
        }
        else
        {
            tutorialText.gameObject.SetActive(false);
            focusMask.parent.gameObject.SetActive(false);
        }

        for (int i = 0; i < villigerInitlNum; i++)
        {
            Villiger villiger = Instantiate <Villiger>(PickVilligerPrefab());
            int      index    = Random.Range(0, houseList.Count);
            villiger.transform.position = houseList[index].position;
            houseList.RemoveAt(index);
            villiger.gameObject.SetActive(true);
            villigerNum++;
            villigerSpawned++;
        }

        for (int i = 0; i < guardNum; i++)
        {
            Guard guard = Instantiate <Guard>(guardPrefab);
            int   index = Random.Range(0, houseList.Count);
            guard.transform.position = houseList[index].position;
            houseList.RemoveAt(index);
            guard.gameObject.SetActive(true);
        }

        spawnTimer = Random.Range(spawnTime, maxSpawnTime);

        warningIcon.SetActive(false);
    }
Example #2
0
    public void RemoveVilliger(Villiger villiger)
    {
        Destroy(villiger.gameObject);

        if (--villigerNum <= 0)
        {
            StartCoroutine(Waitin());
        }
    }
Example #3
0
    public Villiger PickVilligerPrefab()
    {
        if (villigerPrefabs == null || villigerPrefabs.Count == 0)
        {
            villigerPrefabs = new List <Villiger>(villigerPrefab);
        }

        int      index = Random.Range(0, villigerPrefabs.Count);
        Villiger v     = villigerPrefabs[index];

        villigerPrefabs.RemoveAt(index);
        return(v);
    }
Example #4
0
    private void Update()
    {
        if (!tutorialShowed)
        {
            switch (tutorialState)
            {
            case 0:
                if (Input.GetKeyDown(KeyCode.A) || Input.GetKeyUp(KeyCode.D))
                {
                    tutorialState++;
                    Vector3 pos = GetComponent <Camera>().ScreenToWorldPoint(warningIcon.transform.position);
                    pos.z  = 0;
                    pos.x -= 2;
                    focusMask.transform.position = pos;

                    tutorialText.text = tutorialTexts[tutorialState];
                    tutorialText.transform.position = GetComponent <Camera>().WorldToScreenPoint(focusMask.position + new Vector3(3f, -2));
                }
                break;

            case 1:
                if (Input.anyKeyDown || Input.GetMouseButtonDown(0))
                {
                    tutorialState++;
                    focusMask.transform.position = tutorialVilliger.transform.position + Vector3.up;

                    tutorialText.text = tutorialTexts[tutorialState];
                    tutorialText.transform.position = GetComponent <Camera>().WorldToScreenPoint(focusMask.position + new Vector3(0, 2));
                }
                break;

            case 2:
                if (Input.anyKeyDown || Input.GetMouseButtonDown(0))
                {
                    tutorialState++;
                    focusMask.transform.position = tutorialGuard.transform.position + Vector3.up;

                    tutorialText.text = tutorialTexts[tutorialState];
                    tutorialText.transform.position = GetComponent <Camera>().WorldToScreenPoint(focusMask.position + new Vector3(0, 2));
                }
                break;

            case 3:
                if (Input.anyKeyDown || Input.GetMouseButtonDown(0))
                {
                    tutorialState++;
                    focusMask.transform.position = tutorialTree.transform.position + Vector3.up;

                    tutorialText.text = tutorialTexts[tutorialState];
                    tutorialText.transform.position = GetComponent <Camera>().WorldToScreenPoint(focusMask.position + new Vector3(2, 2));
                }
                break;

            case 4:
                if (Input.anyKeyDown || Input.GetMouseButtonDown(0))
                {
                    tutorialState++;
                    Vector3 pos = GetComponent <Camera>().ScreenToWorldPoint(warningIcon.transform.position);
                    pos.z = 0;
                    focusMask.transform.position = pos;
                    warningIcon.gameObject.SetActive(true);

                    tutorialText.text = tutorialTexts[tutorialState];
                    tutorialText.transform.position = GetComponent <Camera>().WorldToScreenPoint(focusMask.position + new Vector3(1, -2));
                }
                break;

            case 5:
                if (Input.anyKeyDown || Input.GetMouseButtonDown(0))
                {
                    tutorialState++;
                    focusMask.transform.position = Player.transform.position + Vector3.up;

                    tutorialText.text = tutorialTexts[tutorialState];
                    tutorialText.transform.position = GetComponent <Camera>().WorldToScreenPoint(focusMask.position + new Vector3(0, 2));
                }
                break;

            case 6:
                if (Input.anyKeyDown || Input.GetMouseButtonDown(0))
                {
                    tutorialText.gameObject.SetActive(false);
                    warningIcon.gameObject.SetActive(false);
                    tutorialShowed = true;
                    focusMask.parent.gameObject.SetActive(false);
                    Time.timeScale = 1;
                }
                break;
            }
        }//tutorialTree

        if (Warning)
        {
            warningTimer -= Time.deltaTime;
            warningIconFill.localScale = new Vector3(1, warningTimer / warningTime, 1);
            if (warningTimer <= 0)
            {
                Warning = false;
                warningIcon.SetActive(false);

                basicBGM.Play();
                basicBGM.volume = 0.1f;
                StartCoroutine(LerpSound(basicBGM, 1f, 0.3f));
                StartCoroutine(LerpSound(scaryBGM, 1f, 0f, delegate {
                    scaryBGM.Stop();
                }));
            }
        }

        spawnTimer -= Time.deltaTime;
        if (spawnTimer <= 0)
        {
            spawnTimer = Random.Range(spawnTime, maxSpawnTime);

            if (villigerSpawned < villigerMaxNum)
            {
                List <Transform> houseList = new List <Transform>(houses);

                while (houseList.Count > 0)
                {
                    int index = Random.Range(0, houseList.Count);

                    if (Mathf.Abs(houseList[index].position.x - Player.transform.position.x) > 8)
                    {
                        Villiger villiger = Instantiate <Villiger>(PickVilligerPrefab());
                        villiger.transform.position = houseList[index].position;
                        villiger.gameObject.SetActive(true);
                        villigerNum++;
                        villigerSpawned++;
                        break;
                    }

                    houseList.RemoveAt(index);
                }
            }
        }
    }
Example #5
0
    private void Update()
    {
        RunAnimation();

        if (zombify)
        {
            float distance = Mathf.Abs(targetVilliger.transform.position.x - transform.position.x);
            if (distance < 0.1f)
            {
                zombify = false;
                // TODO: Play eating animation

                eatingParticle.Play();
                eatingTimer            = eatingTime;
                eating                 = true;
                spriteRenderer.enabled = false;
                Manager.ins.RemoveVilliger(targetVilliger);
                targetVilliger = null;
                CameraControl.ins.FocusCamera();

                for (int i = 0; i < eatSounds.Length; i++)
                {
                    audioSource.PlayOneShot(eatSounds[i]);
                }
            }
            else
            {
                Vector3 pos = transform.position;
                pos.x = Mathf.MoveTowards(pos.x, targetVilliger.transform.position.x, zombifyRunSpeed * Time.deltaTime);
                transform.position = pos;
            }
            return;
        }

        if (eating)
        {
            eatingTimer -= Time.deltaTime;
            if (eatingTimer <= 0)
            {
                eating = false;
                spriteRenderer.enabled = true;
                eatingParticle.Stop();
                Manager.ins.ResetWarning();
                CameraControl.ins.UnfocusCamera();
            }
            return;
        }

        zombieTimer -= Time.deltaTime;
        float percentage = zombieTimer / zombieTime;

        zombifyBar.transform.localScale = new Vector3(percentage, 1, 1);
        zombifyBar.color = Color.Lerp(emptyColor, fullColor, percentage);
        if (zombieTimer <= 0)
        {
            zombieTimer = zombieTime;

            Villiger[] villigers = FindObjectsOfType <Villiger>();
            float      distance  = -1;

            for (int i = 0; i < villigers.Length; i++)
            {
                if (villigers[i].CompareTag("Villiger"))
                {
                    float d = Mathf.Abs(villigers[i].transform.position.x - transform.position.x);
                    if (distance < 0 || d < distance)
                    {
                        targetVilliger = villigers[i];
                        distance       = d;
                    }
                }
            }

            if (targetVilliger.CompareTag("Villiger"))
            {
                transform.localScale = new Vector3(targetVilliger.transform.position.x > transform.position.x ? -1 : 1, 1, 1);
                zombify = true;
                Manager.ins.StartChasing();
                state = AnimState.Run;
                spriteRenderer.sprite = runSprites[0];
                animLoopIndex         = 1;
                animLoopTimer         = 0;
                turnParticle.Play();
            }
            else
            {
                targetVilliger = null;
            }
            return;
        }

        if (tryHiding)
        {
            hideTimer -= Time.deltaTime;
            if (hideTimer <= 0)
            {
                tryHiding = false;
                hiding    = true;
                spriteRenderer.sortingOrder = -1;
                spriteRenderer.color        = new Color(0.8f, 0.8f, 0.8f, 1);
                hidingParticle.Stop();
                rigidbody2D.velocity = Vector2.zero;
            }

            rigidbody2D.velocity = new Vector2(Mathf.MoveTowards(rigidbody2D.velocity.x, 0, walkDamp), 0);
            return;
        }

        if (Input.GetKeyDown(KeyCode.W))
        {
            if (hiding)
            {
                hiding = false;
                spriteRenderer.sortingOrder = 2;
                spriteRenderer.color        = Color.white;
            }
            else if (enteredTrees.Count > 0)
            {
                tryHiding = true;
                hideTimer = hideTime;
                hidingParticle.Play();
            }
        }

        bool  inputed = false;
        float x       = 0;

        if (Input.GetKey(KeyCode.A))
        {
            x      -= walkSpeed;
            inputed = true;
        }
        if (Input.GetKey(KeyCode.D))
        {
            x      += walkSpeed;
            inputed = true;
        }

        if (!inputed)
        {
            x = Mathf.MoveTowards(rigidbody2D.velocity.x, 0, walkDamp);
        }


        if (x == 0)
        {
            spriteRenderer.sprite = idleSprite;
            state = AnimState.Idle;
        }
        else
        {
            transform.localScale = new Vector3(x > 0? -1: 1, 1, 1);

            if (state != AnimState.Walk)
            {
                state = AnimState.Walk;
                spriteRenderer.sprite = walkSprites[0];
                animLoopIndex         = 1;
                animLoopTimer         = 0;
            }
        }

        rigidbody2D.velocity = new Vector2(x, 0);
    }