Alexandria.Engines.DarkSouls.EffectInstruction.EffectInstruction C# (CSharp) Méthode

EffectInstruction() private méthode

private EffectInstruction ( IList tokens, int &index ) : System
tokens IList
index int
Résultat System
        internal EffectInstruction(IList<EffectToken> tokens, ref int index)
        {
            Opcode = tokens[index++];

            string format;

            if (Opcode.MaybeInt32 && InstructionFormats.TryGetValue(Opcode.AsInt32, out format)) {
                if (Opcode.AsInt32 == 0x85) {
                    while (index < tokens.Count && !tokens[index].IsFunction)
                        OperandsMutable.Add(tokens[index++]);
                } else if(Opcode.AsInt32 == 0x88) {
                    while (index < tokens.Count)
                        OperandsMutable.Add(tokens[index++]);
                } else foreach (char operandType in format) {
                        if (index >= tokens.Count) {
                            Opcode.AddError("Expected '{0}'; end of tokens.", operandType);
                            break;
                        }

                        if (tokens[index].IsFunction) {
                            tokens[index].AddError("Last instruction expected '{0}', not a function.", operandType);
                            break;
                        }

                        var operand = tokens[index++];
                        OperandsMutable.Add(operand);

                        switch (operandType) {
                            case 'i':
                                if (!operand.MaybeInt32)
                                    operand.AddError("Expected an integer.");
                                break;

                            case 'p':
                                if (!operand.MaybePointer)
                                    operand.AddError("Expected a pointer.");
                                break;

                            case 'z':
                                if (!operand.IsZero)
                                    operand.AddError("Expected zero.");
                                break;

                            case 's':
                                if (!operand.MaybeSingle)
                                    operand.AddError("Expected a Single.");
                                break;
                        }
                    }
            } else {
                Opcode.AddError("Opcode is unknown or invalid; operands are crap.");
                while (index < tokens.Count && !(tokens[index].MaybeInt32 && InstructionFormats.ContainsKey(tokens[index].AsInt32)) && !tokens[index].IsFunction)
                    OperandsMutable.Add(tokens[index++]);
            }
        }