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); }
public void RemoveVilliger(Villiger villiger) { Destroy(villiger.gameObject); if (--villigerNum <= 0) { StartCoroutine(Waitin()); } }
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); }
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); } } } }
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); }