Exemplo n.º 1
0
        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));
            }
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
 public IndexNameResolvingContext(MegaloScriptModel model, Proto.MegaloScriptValueIndexTarget indexTarget)
 {
     Model = model; IndexTarget = indexTarget;
 }