public StaticLevelGenerator(LevelGeneratorParameters parameters) : base(parameters) { StaticPlanesLevel.counter = 0; Level.forest = new ForestStatic(parameters, this); Level.roadSystem = new StaticRoadSystem(parameters, Level.forest); Level.zombieMover = new StaticZombieMover(parameters); Level.planesSystem = new StaticPlanesSystem(parameters); levelsKinds = new Level[5]; levelsKinds[0] = new StaticSimpleLevel(); levelsKinds[1] = new StaticSpeedLevel(); levelsKinds[2] = new StaticMotorwayLevel(); levelsKinds[3] = new StaticPlanesLevel(); levelsKinds[4] = new StaticZombieLevels(); spacings = new float[2400]; for (int i = 0; i < spacings.Length; i++) { spacings[i] = 10f; } awaitingLevels = new Queue <AwaitingLevel>(levelsCountPerMap); int nextLineUniqueId = 0; awaitingLevels.Enqueue(new AwaitingLevel(Level.LevelType.Simple, ednOfPrevLevel, 0)); AddLevelToSpacings(Level.LevelType.Simple, 0, ref nextLineUniqueId); awaitingLevels.Enqueue(new AwaitingLevel(Level.LevelType.Speed, ednOfPrevLevel, 0)); AddLevelToSpacings(Level.LevelType.Speed, 0, ref nextLineUniqueId); for (int i = 2; i < levelsCountPerMap; i++) { Level.LevelType levelType = (Level.LevelType)(uint)(3.99f * CustomRandom.Get((uint)i) + 1); float difficulty = GetDifficultyByPosition(ednOfPrevLevel); awaitingLevels.Enqueue(new AwaitingLevel(levelType, ednOfPrevLevel, difficulty)); if (nextLineUniqueId < spacings.Length) { AddLevelToSpacings(levelType, difficulty, ref nextLineUniqueId); } } levels = new Queue <Level>(levelsCount); Level.levels = levels; Level.lastlLevel = new EmptyLevel(); for (int i = 1; i < levelsCount; i++) { AwaitingLevel awaitingLevel = awaitingLevels.Dequeue(); Level.lastlLevel = ((StaticLevel)levelsKinds[(int)awaitingLevel.levelType]).CreateNew( awaitingLevel.difficulty, awaitingLevel.startPosition); Level.lastlLevel.nextLevelType = awaitingLevels.Peek().levelType; levels.Enqueue(Level.lastlLevel); } }
public override void Update() { if (Score.isGameStarted) { Level.difficulty = Mathf.Clamp01(0.0001f * Score.fscore); CameraMover.SetSpeed(Mathf.Lerp(easyMoveSpeed, hardMoveSpeed, Level.difficulty)); } else { Level.difficulty = 0; CameraMover.UnlockSpeed(); CameraMover.SetSpeed(0); } Level.forest.Update(); Level.roadSystem.Update(); if (levels.Count > 0 && levels.Peek().IsLevelСompleted()) { levels.Dequeue().Finish(); } foreach (Level l in levels) { l.Update(); if (l.firstStartcall && l.IsLevelActive()) { l.Start(); l.firstStartcall = false; } } if (levels.Count < levelsCount) { AwaitingLevel awaitingLevel = awaitingLevels.Dequeue(); Level.lastlLevel = ((StaticLevel)levelsKinds[(int)awaitingLevel.levelType]).CreateNew( awaitingLevel.difficulty, awaitingLevel.startPosition); Level.lastlLevel.nextLevelType = awaitingLevels.Peek().levelType; levels.Enqueue(Level.lastlLevel); } }