示例#1
0
        private void SerializeEffect(string[] tokens, StreamReader reader, BinaryWriter binaryWriter)
        {
            while (!reader.EndOfStream)
            {
                tokens = reader.ReadLine().Split(Utilities.SplitCharacters, StringSplitOptions.RemoveEmptyEntries);

                string macroName = tokens[0];
                if (macroName == "fxdone")
                {
                    binaryWriter.Write((byte)this.doneOpcode);
                    break;
                }

                FxMacroDefinition macroDefinition = this.macroDefinitionTable.MacroDefinitions
                                                    .Values
                                                    .FirstOrDefault(x => x.Name.Equals(macroName, StringComparison.OrdinalIgnoreCase) && x.FxDefGroup.Count() == tokens[1..].Length);

                binaryWriter.Write((byte)macroDefinition.Opcode);

                if (macroDefinition == null)
                {
                    throw new InvalidOperationException("Unknown macro '{macroName}'");
                }

                var parameters     = new List <object>();
                int parameterIndex = 1;
                foreach (var line in macroDefinition.FxDefGroup)
                {
                    if (line is DataDefinitionMacroLine dataDefinitionMacroLine)
                    {
                        dataDefinitionMacroLine.Serialize(tokens[parameterIndex++], this.macroDefinitionTable.SymbolTable, binaryWriter);
                    }
                }
            }
        }
 private void ProcessMacroDefinitions(IList <MacroDefinition> macroDefinitions)
 {
     // Try to map each opcode we know about to a pre-processed form of the macro definition with conditional branches eliminated
     foreach (int opcode in this.SymbolTable.GetSymbolGroup(KnownSymbolGroupNames.Fx).Values)
     {
         FxMacroDefinition fxMacroDefinition = this.GetFxMacroDefinition(macroDefinitions, opcode);
         if (fxMacroDefinition != null)
         {
             this.MacroDefinitions[opcode] = fxMacroDefinition;
         }
         else
         {
             logger.Warn($"Opcode {opcode} has no macro defined");
         }
     }
 }