internal string ToIndexName(Proto.MegaloScriptValueIndexTarget target, int index) { if (index.IsNone()) { return(kIndexNameNone); } switch (target) { case Proto.MegaloScriptValueIndexTarget.Trigger: return(Triggers[index].Name); case Proto.MegaloScriptValueIndexTarget.Option: return(MegaloVariant.UserDefinedOptions[index].CodeName); case Proto.MegaloScriptValueIndexTarget.String: return(MegaloVariant.StringTable[index].CodeName); case Proto.MegaloScriptValueIndexTarget.PlayerTraits: return(MegaloVariant.PlayerTraits[index].CodeName); case Proto.MegaloScriptValueIndexTarget.Statistic: return(GameStatistics[index].CodeName); case Proto.MegaloScriptValueIndexTarget.Widget: return(HudWidgets[index].CodeName); case Proto.MegaloScriptValueIndexTarget.ObjectFilter: return(ObjectFilters[index].CodeName); case Proto.MegaloScriptValueIndexTarget.GameObjectFilter: return(CandySpawnerFilters[index].CodeName); default: return(Database.StaticDatabase.ToIndexName(target, index)); } }
/// <summary>Validates that the index is valid based on its target and traits</summary> /// <param name="target">Target which the index is for</param> /// <param name="traits">Specify <see cref="Proto.MegaloScriptValueIndexTraits.Reference"/> if <paramref name="index"/> can't be NONE</param> /// <param name="index"></param> /// <returns></returns> public bool IndexTargetIsValid(Proto.MegaloScriptValueIndexTarget target, Proto.MegaloScriptValueIndexTraits traits, int index) { if (traits == Proto.MegaloScriptValueIndexTraits.Reference && index < 0) { return(false); } var sdb = Database.StaticDatabase; switch (target) { case Proto.MegaloScriptValueIndexTarget.Undefined: return(true); case Proto.MegaloScriptValueIndexTarget.Trigger: return(index < Triggers.Count); #region Static case Proto.MegaloScriptValueIndexTarget.ObjectType: return(index < sdb.ObjectTypeList.Types.Count); case Proto.MegaloScriptValueIndexTarget.Name: return(index < sdb.Names.Count); case Proto.MegaloScriptValueIndexTarget.Sound: return(index < sdb.Sounds.Count); case Proto.MegaloScriptValueIndexTarget.Incident: return(index < sdb.Incidents.Count); case Proto.MegaloScriptValueIndexTarget.HudWidgetIcon: return(index < sdb.HudWidgetIcons.Count); case Proto.MegaloScriptValueIndexTarget.GameEngineIcon: return(index < sdb.GameEngineIcons.Count); case Proto.MegaloScriptValueIndexTarget.Medal: return(index < sdb.Medals.Count); case Proto.MegaloScriptValueIndexTarget.Ordnance: return(index < sdb.OrdnanceList.Types.Count); #endregion #region Variant // #TODO_IMPLEMENT: log when we're indexing to an unused loadout palette case Proto.MegaloScriptValueIndexTarget.LoadoutPalette: return(index < MegaloVariant.BaseVariant.LoadoutOptions.Palettes.Length); case Proto.MegaloScriptValueIndexTarget.Option: return(index < MegaloVariant.UserDefinedOptions.Count); case Proto.MegaloScriptValueIndexTarget.String: return(index < MegaloVariant.StringTable.Count); case Proto.MegaloScriptValueIndexTarget.PlayerTraits: return(index < MegaloVariant.PlayerTraits.Count); case Proto.MegaloScriptValueIndexTarget.Statistic: return(index < GameStatistics.Count); case Proto.MegaloScriptValueIndexTarget.Widget: return(index < HudWidgets.Count); case Proto.MegaloScriptValueIndexTarget.ObjectFilter: return(index < ObjectFilters.Count); #endregion } return(false); }
internal int GetTargetIndexFromName(Proto.MegaloScriptValueIndexTarget target, string indexName) { Contract.Requires(target.HasIndexName(), "Can't get an index value by name which doesn't support naming"); Contract.Requires(!string.IsNullOrEmpty(indexName)); var id_resolving_ctxt = new IndexNameResolvingContext(this, target); int result = IndexNameResolvingContext.IdResolver(id_resolving_ctxt, indexName); if (!result.IsNoneOrPositive()) { throw new ArgumentException(indexName); } return(result); }
internal int FromIndexName(Proto.MegaloScriptValueIndexTarget target, string name) { if (name == kIndexNameNone) { return(TypeExtensions.kNone); } int id = TypeExtensionsBlam.IndexOfByPropertyNotFoundResult; switch (target) { case Proto.MegaloScriptValueIndexTarget.Trigger: id = FindNameIndex(Triggers, name); break; case Proto.MegaloScriptValueIndexTarget.Option: id = FindNameIndex(MegaloVariant.UserDefinedOptions, name); break; case Proto.MegaloScriptValueIndexTarget.String: id = MegaloVariant.StringTable.FindNameIndex(name); break; case Proto.MegaloScriptValueIndexTarget.PlayerTraits: id = FindNameIndex(MegaloVariant.PlayerTraits, name); break; case Proto.MegaloScriptValueIndexTarget.Statistic: id = FindNameIndex(GameStatistics, name); break; case Proto.MegaloScriptValueIndexTarget.Widget: id = FindNameIndex(HudWidgets, name); break; case Proto.MegaloScriptValueIndexTarget.ObjectFilter: id = FindNameIndex(ObjectFilters, name); break; case Proto.MegaloScriptValueIndexTarget.GameObjectFilter: id = FindNameIndex(CandySpawnerFilters, name); break; default: id = Database.StaticDatabase.FromIndexName(target, name); break; } if (id == TypeExtensionsBlam.IndexOfByPropertyNotFoundResult) { throw new KeyNotFoundException(string.Format(Util.InvariantCultureInfo, "Couldn't find an {0} object named {1}", target, name)); } return(id); }
public IndexNameResolvingContext(MegaloScriptModel model, Proto.MegaloScriptValueIndexTarget indexTarget) { Model = model; IndexTarget = indexTarget; }