Client LuaCsForBarotrauma
BarotraumaShared/SharedSource/GameSession/GameModes/MissionMode.cs
1 using System;
2 using System.Collections.Generic;
3 
4 namespace Barotrauma
5 {
6  abstract partial class MissionMode : GameMode
7  {
8  private readonly List<Mission> missions = new List<Mission>();
9 
10  public override IEnumerable<Mission> Missions
11  {
12  get
13  {
14  return missions;
15  }
16  }
17 
18  public MissionMode(GameModePreset preset, IEnumerable<MissionPrefab> missionPrefabs)
19  : base(preset)
20  {
22  foreach (MissionPrefab missionPrefab in missionPrefabs)
23  {
24  missions.Add(missionPrefab.Instantiate(locations, Submarine.MainSub));
25  }
26  }
27 
28  public MissionMode(GameModePreset preset, MissionType missionType, string seed)
29  : base(preset)
30  {
32  var mission = Mission.LoadRandom(locations, seed, requireCorrectLocationType: false, missionType, difficultyLevel: GameMain.NetworkMember.ServerSettings.SelectedLevelDifficulty);
33  if (mission != null)
34  {
35  missions.Add(mission);
36  }
37  }
38 
39  protected static IEnumerable<MissionPrefab> ValidateMissionPrefabs(IEnumerable<MissionPrefab> missionPrefabs, Dictionary<MissionType, Type> missionClasses)
40  {
41  foreach (MissionPrefab missionPrefab in missionPrefabs)
42  {
43  if (ValidateMissionType(missionPrefab.Type, missionClasses) != missionPrefab.Type)
44  {
45  throw new InvalidOperationException("Cannot start gamemode with mission type " + missionPrefab.Type);
46  }
47  }
48  return missionPrefabs;
49  }
50 
51  protected static MissionType ValidateMissionType(MissionType missionType, Dictionary<MissionType, Type> missionClasses)
52  {
53  var missionTypes = (MissionType[])Enum.GetValues(typeof(MissionType));
54  for (int i = 0; i < missionTypes.Length; i++)
55  {
56  var type = missionTypes[i];
57  if (type == MissionType.None || type == MissionType.All) { continue; }
58  if (!missionClasses.ContainsKey(type))
59  {
60  missionType &= ~(type);
61  }
62  }
63  return missionType;
64  }
65  }
66 }
static GameSession?? GameSession
Definition: GameMain.cs:88
static NetworkMember NetworkMember
Definition: GameMain.cs:190
static Mission LoadRandom(Location[] locations, string seed, bool requireCorrectLocationType, MissionType missionType, bool isSinglePlayer=false, float? difficultyLevel=null)
MissionMode(GameModePreset preset, MissionType missionType, string seed)
static IEnumerable< MissionPrefab > ValidateMissionPrefabs(IEnumerable< MissionPrefab > missionPrefabs, Dictionary< MissionType, Type > missionClasses)
static MissionType ValidateMissionType(MissionType missionType, Dictionary< MissionType, Type > missionClasses)
MissionMode(GameModePreset preset, IEnumerable< MissionPrefab > missionPrefabs)
Mission Instantiate(Location[] locations, Submarine sub)