Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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}\".");
            }
        }