Пример #1
0
        public void Enum_FlagsRemoveTest()
        {
            //////////////////////////////////////////////////////////////////////////
            // Test by-ref
            const FlagsEnum kExpectedResult1 = FlagsEnum.Flag0;
            FlagsEnum       e1 = FlagsEnum.Flag0 | FlagsEnum.Flag2;

            EnumFlags.Remove(ref e1, FlagsEnum.Flag2);
            Assert.AreEqual(kExpectedResult1, e1);
            //////////////////////////////////////////////////////////////////////////
            // Test by-value
            const FlagsEnum kExpectedResult2 = 0;
            FlagsEnum       e2 = EnumFlags.Remove(e1, FlagsEnum.Flag0);

            Assert.AreEqual(kExpectedResult2, e2);
        }
Пример #2
0
        void DecodeParseSwitches(string switches,
                                 out MegaloModel.MegaloScriptModelTagElementStreamFlags modelStreamFlags,
                                 ref bool ignoreWritePredicates)
        {
            modelStreamFlags =
                MegaloModel.MegaloScriptModelTagElementStreamFlags.EmbedObjects |
                MegaloModel.MegaloScriptModelTagElementStreamFlags.UseEnumNames |
                MegaloModel.MegaloScriptModelTagElementStreamFlags.UseIndexNames |
                MegaloModel.MegaloScriptModelTagElementStreamFlags.WriteConditionTypeNames |
                MegaloModel.MegaloScriptModelTagElementStreamFlags.WriteActionTypeNames |

                MegaloModel.MegaloScriptModelTagElementStreamFlags.EmbedObjectsWriteSansIds
            ;
            if (switches == null)
            {
                switches = "";
            }
            const string k_switches_ctxt = "GameVariant:Decode";

            bool using_op_names = false;

            if (SwitchIsOn(switches, 0, k_switches_ctxt + ":Megalo", "Use operation names (instead of DBIDs)"))
            {
                EnumFlags.Add(ref modelStreamFlags,
                              MegaloModel.MegaloScriptModelTagElementStreamFlags.UseConditionTypeNames |
                              MegaloModel.MegaloScriptModelTagElementStreamFlags.UseActionTypeNames);

                EnumFlags.Remove(ref modelStreamFlags,
                                 MegaloModel.MegaloScriptModelTagElementStreamFlags.WriteConditionTypeNames |
                                 MegaloModel.MegaloScriptModelTagElementStreamFlags.WriteActionTypeNames);

                using_op_names = true;
            }
            if (SwitchIsOn(switches, 1, k_switches_ctxt + ":Megalo", "Write operation parameter names"))
            {
                EnumFlags.Add(ref modelStreamFlags,
                              MegaloModel.MegaloScriptModelTagElementStreamFlags.WriteParamNames);
            }
            if (SwitchIsOn(switches, 2, k_switches_ctxt + ":Megalo", "Write operation parameter contexts"))
            {
                EnumFlags.Add(ref modelStreamFlags,
                              MegaloModel.MegaloScriptModelTagElementStreamFlags.WriteParamKinds);
            }
            if (mGameBuildAndTarget.Build.IsWithinSameBranch(KBlam.Engine.EngineRegistry.EngineBranchHaloReach) &&
                SwitchIsOn(switches, 3, k_switches_ctxt + ":Megalo", "Try to port Reach operations to H4"))
            {
                if (using_op_names)
                {
                    Console.WriteLine("\tIgnoring switch since you have me writing operation names");
                }
                else
                {
                    EnumFlags.Add(ref modelStreamFlags,
                                  MegaloModel.MegaloScriptModelTagElementStreamFlags.TryToPort);
                }
            }
            if (SwitchIsOn(switches, 4, k_switches_ctxt + ":Megalo", "Don't use enum/index names"))
            {
                EnumFlags.Remove(ref modelStreamFlags,
                                 MegaloModel.MegaloScriptModelTagElementStreamFlags.UseEnumNames |
                                 MegaloModel.MegaloScriptModelTagElementStreamFlags.UseIndexNames);
            }
            if (SwitchIsOn(switches, 5, k_switches_ctxt + ":Megalo", "Serialize with object IDs"))
            {
                EnumFlags.Remove(ref modelStreamFlags,
                                 MegaloModel.MegaloScriptModelTagElementStreamFlags.EmbedObjectsWriteSansIds);
            }
            if (SwitchIsOn(switches, 6, k_switches_ctxt + ":Megalo", "Don't embed objects"))
            {
                EnumFlags.Remove(ref modelStreamFlags,
                                 MegaloModel.MegaloScriptModelTagElementStreamFlags.EmbedObjects |
                                 MegaloModel.MegaloScriptModelTagElementStreamFlags.EmbedObjectsWriteSansIds);
            }
            if (SwitchIsOn(switches, 7, k_switches_ctxt + ":Megalo", "Always write 'default' data"))
            {
                ignoreWritePredicates = true;
            }
        }
Пример #3
0
        void InterpretFlags(KSoft.Collections.BitVector32 flags)
        {
            bool using_op_names = false;

            if (flags.Test(GvarDisassemblerFlags.WriteOperationNamesOnly))
            {
                EnumFlags.Add(ref mModelStreamFlags,
                              MegaloModel.MegaloScriptModelTagElementStreamFlags.UseConditionTypeNames |
                              MegaloModel.MegaloScriptModelTagElementStreamFlags.UseActionTypeNames);

                EnumFlags.Remove(ref mModelStreamFlags,
                                 MegaloModel.MegaloScriptModelTagElementStreamFlags.WriteConditionTypeNames |
                                 MegaloModel.MegaloScriptModelTagElementStreamFlags.WriteActionTypeNames);

                using_op_names = true;
            }
            if (flags.Test(GvarDisassemblerFlags.WriteOperationParameterNames))
            {
                EnumFlags.Add(ref mModelStreamFlags,
                              MegaloModel.MegaloScriptModelTagElementStreamFlags.WriteParamNames);
            }
            if (flags.Test(GvarDisassemblerFlags.WriteOperationParameterContexts))
            {
                EnumFlags.Add(ref mModelStreamFlags,
                              MegaloModel.MegaloScriptModelTagElementStreamFlags.WriteParamKinds);
            }
            if (flags.Test(GvarDisassemblerFlags.TryToPort) &&
                mGameBuildAndTarget.Build.IsWithinSameBranch(KBlam.Engine.EngineRegistry.EngineBranchHaloReach))
            {
                if (using_op_names)
                {
                    Debug.Trace.MgloGui.TraceInformation("Ignoring TryToPort since you have me writing operation names");
                }
                else
                {
                    EnumFlags.Add(ref mModelStreamFlags,
                                  MegaloModel.MegaloScriptModelTagElementStreamFlags.TryToPort);
                }
            }
            if (flags.Test(GvarDisassemblerFlags.DoNotWriteEnumOrIndexNames))
            {
                EnumFlags.Remove(ref mModelStreamFlags,
                                 MegaloModel.MegaloScriptModelTagElementStreamFlags.UseEnumNames |
                                 MegaloModel.MegaloScriptModelTagElementStreamFlags.UseIndexNames);
            }
            if (flags.Test(GvarDisassemblerFlags.WriteWithObjectIds))
            {
                EnumFlags.Remove(ref mModelStreamFlags,
                                 MegaloModel.MegaloScriptModelTagElementStreamFlags.EmbedObjectsWriteSansIds);
            }
            if (flags.Test(GvarDisassemblerFlags.DoNotEmbedObjects))
            {
                EnumFlags.Remove(ref mModelStreamFlags,
                                 MegaloModel.MegaloScriptModelTagElementStreamFlags.EmbedObjects |
                                 MegaloModel.MegaloScriptModelTagElementStreamFlags.EmbedObjectsWriteSansIds);
            }
            if (flags.Test(GvarDisassemblerFlags.AlwaysWriteDefaultData))
            {
                mIgnoreWritePredicates = true;
            }
        }