public void Update(float dt)
        {
            if (!lastTimeCheckInited)
            {
                lastTimeCheckInited = true;
                lastTimeCheck       = environment.ElapsedTime();
            }
            if (recognizedDeadMonster.Count >= environment.DeadMonstersSoFar().Count())
            {
                return;
            }

            foreach (Monster monster in environment.DeadMonstersSoFar())
            {
                if (monster.DeadTime() < lastTimeCheck)
                {
                    continue;
                }
                if (recognizedDeadMonster.Contains(monster))
                {
                    continue;
                }

                recognizedDeadMonster.Add(monster);
                //DLog.Log("Recognize dead monster " + monster);
            }
        }
        private void UpdateSpawn(float dt, int waveOrder)
        {
            if (IsFinished())
            {
                return;
            }

            elapsedTimeSinceLastSpawn += dt;
            if (!IsSpawnCompleted() && elapsedTimeSinceLastSpawn >= spawnInterval)
            {
                elapsedTimeSinceLastSpawn = 0;
                spawnCountSoFar++;
                for (int i = 0; i < monsterCount; i++)
                {
                    float x = Random();
                    gameObjectSpawner.SpawnEntity(
                        monsterId,
                        monsterLevel,
                        x,
                        spawnY,
                        spawnZ,
                        new DungeonSystemSpawnSourceInfo(),
                        facingDirection,
                        spawnSkillLevelPool,
                        group
                        ).Then(entity =>
                    {
                        entityRole = entity.GetComponent <StatsComponent>().BasicStatsFromConfig.ShowRole();
                        monsterUniqueIds.Add(entity.UniqueId);

                        foreach (Tracker tracker in trackers)
                        {
                            tracker.AddEntity(entity);
                        }

                        foreach (IAction action in actions)
                        {
                            action.AddEntity(entity);
                        }
                    });
                }
            }

            foreach (Monster m in environment.DeadMonstersSoFar())
            {
                if (!monsterUniqueIds.Contains(m.UniqueId()))
                {
                    continue;
                }
                if (deadMonsters.Contains(m))
                {
                    continue;
                }

                deadMonsters.Add(m);
            }
        }
        public void Update(float dt)
        {
            foreach (Monster monster in environment.DeadMonstersSoFar())
            {
                if (monster.Type() != monsterType)
                {
                    continue;
                }
                if (monster.DeadTime() <= lastTimeCheck)
                {
                    continue;
                }

                killCountSoFar++;
                lastTimeCheck = environment.ElapsedTime();
            }
        }