public DefaultChallenge(Trigger startTrigger, SpawnOverTime spawnOverTime)
        {
            notNullReference.Check(startTrigger, "startTrigger");
            notNullReference.Check(spawnOverTime, "spawnOverTime");

            this.startTrigger  = startTrigger;
            this.spawnOverTime = spawnOverTime;
        }
        private SpawnOverTime CreateSpawnOverTime(SpawnConfig spawnConfig)
        {
            SpawnOverTime sot = new SpawnOverTime();

            sot.SetEnv(defaultEnvironment);
            sot.SetHeroAndMonsterConfig(heroAndMonsterConfig);
            sot.SetCookies(spawnConfig.CookiesList());
            return(sot);
        }
        private Challenge CreateChallenge(ChallengeConfig challengeConfig, List <IAction> actions, DungeonLogic dungeonLogic)
        {
            Trigger       startTrigger = CreateTrigger(challengeConfig.StartTrigger());
            SpawnOverTime sot          = CreateSpawnOverTime(challengeConfig.SpawnConfig());

            List <TrackerConfig> trackerConfigs = challengeConfig.SpawnConfig().TrackerConfigs();

            foreach (TrackerConfig trackerConfig in trackerConfigs)
            {
                if (!trackerConfig.IsActive())
                {
                    continue;
                }

                Tracker tracker = CreateTracker(trackerConfig);
                sot.AddTracker(tracker);
            }

            // List<ActionConfig> actionConfigs = challengeConfig.SpawnConfig().ActionConfigs();
            // foreach (ActionConfig actionConfig in actionConfigs)
            // {
            //  if (actionConfig.IsDisabled()) continue;
            //
            //  IAction action = CreateAction(actionConfig, dungeonLogic);
            //  sot.AddAction(action);
            // }

            foreach (IAction action in actions)
            {
                sot.AddAction(action);
            }

            DefaultChallenge challenge = new DefaultChallenge(startTrigger, sot);

            return(challenge);
        }