public void StartRound(Level level) { if (isClient) { return; } pendingEventSets.Clear(); selectedEvents.Clear(); activeEvents.Clear(); pathFinder = new PathFinder(WayPoint.WayPointList, indoorsSteering: false); totalPathLength = 0.0f; if (level != null) { var steeringPath = pathFinder.FindPath(ConvertUnits.ToSimUnits(Level.Loaded.StartPosition), ConvertUnits.ToSimUnits(Level.Loaded.EndPosition)); totalPathLength = steeringPath.TotalLength; } this.level = level; SelectSettings(); var initialEventSet = SelectRandomEvents(EventSet.List); if (initialEventSet != null) { pendingEventSets.Add(initialEventSet); int seed = ToolBox.StringToInt(level.Seed); foreach (var previousEvent in level.LevelData.EventHistory) { seed ^= ToolBox.StringToInt(previousEvent.Identifier); } MTRandom rand = new MTRandom(seed); CreateEvents(initialEventSet, rand); } if (level?.LevelData?.Type == LevelData.LevelType.Outpost) { level.LevelData.EventHistory.AddRange(selectedEvents.Values.SelectMany(v => v).Select(e => e.Prefab).Where(e => !level.LevelData.EventHistory.Contains(e))); if (level.LevelData.EventHistory.Count > MaxEventHistory) { level.LevelData.EventHistory.RemoveRange(0, level.LevelData.EventHistory.Count - MaxEventHistory); } AddChildEvents(initialEventSet); void AddChildEvents(EventSet eventSet) { if (eventSet == null) { return; } foreach (EventPrefab ep in eventSet.EventPrefabs.Select(e => e.First)) { if (!level.LevelData.NonRepeatableEvents.Contains(ep)) { level.LevelData.NonRepeatableEvents.Add(ep); } } foreach (EventSet childSet in eventSet.ChildSets) { AddChildEvents(childSet); } } } PreloadContent(GetFilesToPreload()); roundDuration = 0.0f; intensityUpdateTimer = 0.0f; CalculateCurrentIntensity(0.0f); currentIntensity = targetIntensity; eventCoolDown = 0.0f; }