protected override void OnInit() { foreach (var btn in this.returnBtns) { btn.onClick.AddListener(() => Hide(null)); } this.cellReference.GO.SetActive(false); var points = this.levelPoints; var count = points.Length; for (int i = 0; i < count; ++i) { int id = i; var preset = LevelPresetData.GetPreset(id); var progress = LevelProgressData.GetProgress(id); var cell = Instantiate(this.cellReference, points[id]); cell.GO.SetActive(true); cell.Name.text = $"Level {id + 1}"; cell.SetStars(progress.Stars); bool active = id == 0 || LevelProgressData.GetProgress(id - 1).complete; cell.SetActive(active); if (active) { cell.StartBtn.onClick.AddListener(() => { var popup = PopupManager.OpenPopup <StartLevelPopup>(); popup.SetDescription($"Level {id + 1}\nasteroids: {preset.count}\ntime: {preset.duration}"); popup.SetStars(progress.Stars); popup.OnStart += () => { Hide(null); GameManager.StartLevel(id); }; }); } } }
public void StartMatch(int levelId) { this.preset = LevelPresetData.GetPreset(levelId); CorouWaiter.Start(Routine()); IEnumerator Routine() { yield return(CorouWaiter.WaitFor(() => PlayerController.I != null)); yield return(CorouWaiter.WaitFor(() => UserHUDController.I != null)); PlayerController.I.Player.Health.OnDamage += (_, hp) => UserHUDController.I.SetHp(hp); PlayerController.I.Player.Health.OnDead += StopMatch; var waitSecond = new WaitForSeconds(1f); int counter = 3; while (counter-- > 0) { Debug.Log(counter + 1); yield return(waitSecond); } Debug.Log("Math started!"); var waitSpawn = new WaitForSeconds(this.preset.duration / (float)this.preset.count); counter = this.preset.count; while (counter-- > 0) { var enemy = spawner.SpawnEnemy(); enemy.OnCollide += Damage; void Damage(Enemy e, Collision c) { enemy.OnCollide -= Damage; var health = c.collider.GetComponentInParent <PlayerHealth>(); if (health != null) { health.SetDamage(1, enemy.GO); } } enemy.OnDeadByPlayer += Kill; void Kill(Enemy e) { enemy.OnDeadByPlayer -= Kill; ++this.killCount; } enemy.OnDestroyEvent += Destroy; void Destroy(Enemy e) { enemy.OnDestroyEvent -= Destroy; ++this.destroyCount; if (this.destroyCount == this.preset.count) { StopMatch(); } } yield return(waitSpawn); } } }