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); }
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; } }
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; } }