public MissionTemplateObjective(string presetID, Amount targetCount = Amount.Average) { DBEntryObjectivePreset preset = Database.Instance.GetEntry <DBEntryObjectivePreset>(presetID); if (preset == null) // Preset doesn't exist. { Features = new List <string>(); Options = new List <ObjectiveOption>(); Preset = ""; Target = "VehicleAny"; TargetBehavior = "Idle"; TargetCount = Amount.Average; Task = "DestroyAll"; } else { Features = preset.Features.ToList(); Options = preset.Options.ToList(); Preset = presetID; Target = Toolbox.RandomFrom(preset.Targets); TargetBehavior = Toolbox.RandomFrom(preset.TargetsBehaviors); TargetCount = targetCount; Task = Toolbox.RandomFrom(preset.Tasks); } }
private static void GetObjectiveData(MissionTemplateObjectiveRecord objectiveTemplate, bool useObjectivePreset, out string[] featuresID, out DBEntryObjectiveTarget targetDB, out DBEntryObjectiveTargetBehavior targetBehaviorDB, out DBEntryObjectiveTask taskDB, out ObjectiveOption[] objectiveOptions) { featuresID = objectiveTemplate.Features.ToArray(); targetDB = Database.Instance.GetEntry <DBEntryObjectiveTarget>(objectiveTemplate.Target); targetBehaviorDB = Database.Instance.GetEntry <DBEntryObjectiveTargetBehavior>(objectiveTemplate.TargetBehavior); taskDB = Database.Instance.GetEntry <DBEntryObjectiveTask>(objectiveTemplate.Task); objectiveOptions = objectiveTemplate.Options.ToArray(); if (useObjectivePreset && objectiveTemplate.Preset != "Custom") { DBEntryObjectivePreset presetDB = Database.Instance.GetEntry <DBEntryObjectivePreset>(objectiveTemplate.Preset); if (presetDB != null) { featuresID = presetDB.Features.ToArray(); targetDB = Database.Instance.GetEntry <DBEntryObjectiveTarget>(Toolbox.RandomFrom(presetDB.Targets)); targetBehaviorDB = Database.Instance.GetEntry <DBEntryObjectiveTargetBehavior>(Toolbox.RandomFrom(presetDB.TargetsBehaviors)); taskDB = Database.Instance.GetEntry <DBEntryObjectiveTask>(Toolbox.RandomFrom(presetDB.Tasks)); objectiveOptions = presetDB.Options.ToArray(); } } if (targetDB == null) { throw new BriefingRoomException($"Target \"{targetDB.UIDisplayName}\" not found for objective."); } if (targetBehaviorDB == null) { throw new BriefingRoomException($"Target behavior \"{targetBehaviorDB.UIDisplayName}\" not found for objective."); } if (taskDB == null) { throw new BriefingRoomException($"Task \"{taskDB.UIDisplayName}\" not found for objective."); } if (!taskDB.ValidUnitCategories.Contains(targetDB.UnitCategory)) { throw new BriefingRoomException($"Task \"{taskDB.UIDisplayName}\" not valid for objective targets, which belong to category \"{targetDB.UnitCategory}\"."); } }