Beispiel #1
0
        public void Read(OsiReader reader)
        {
            Index = reader.ReadUInt32();
            Name  = reader.ReadString();
            SubGoalCombination = reader.ReadByte();

            ParentGoals = new List <uint>();
            var numItems = reader.ReadUInt32();

            while (numItems-- > 0)
            {
                ParentGoals.Add(reader.ReadUInt32());
            }

            SubGoals = new List <uint>();
            numItems = reader.ReadUInt32();
            while (numItems-- > 0)
            {
                SubGoals.Add(reader.ReadUInt32());
            }

            Unknown = reader.ReadByte();

            if (reader.MajorVersion > 1 || (reader.MajorVersion == 1 && reader.MinorVersion >= 1))
            {
                InitCalls = reader.ReadList <Call>();
                ExitCalls = reader.ReadList <Call>();
            }
            else
            {
                InitCalls = new List <Call>();
                ExitCalls = new List <Call>();
            }
        }
Beispiel #2
0
        public void Read(OsiReader reader)
        {
            Name = reader.ReadString();
            if (Name.Length > 0)
            {
                var hasParams = reader.ReadByte();
                if (hasParams > 0)
                {
                    Parameters = new List <TypedValue>();
                    var numParams = reader.ReadByte();
                    while (numParams-- > 0)
                    {
                        TypedValue param;
                        var        type = reader.ReadByte();
                        if (type == 1)
                        {
                            param = new Variable();
                        }
                        else
                        {
                            param = new TypedValue();
                        }
                        param.Read(reader);
                        Parameters.Add(param);
                    }
                }

                Negate = reader.ReadBoolean();
            }

            GoalIdOrDebugHook = reader.ReadInt32();
        }
Beispiel #3
0
        public void Read(OsiReader reader)
        {
            Name      = reader.ReadString();
            Index     = reader.ReadByte();
            IsBuiltin = false;

            if (reader.Ver >= OsiVersion.VerTypeAliases)
            {
                Alias = reader.ReadByte();
            }
            else
            {
                // D:OS 1 only supported string aliases
                Alias = (int)Value.Type_OS1.String;
            }
        }
Beispiel #4
0
        public void Read(OsiReader reader)
        {
            Physical.Clear();
            Logical.Clear();

            var count = reader.ReadByte();

            while (count-- > 0)
            {
                var index = reader.ReadByte();
                var value = new Value();
                value.Read(reader);

                Physical.Add(value);
                Logical.Add(index, value);
            }
        }
Beispiel #5
0
        private Dictionary <uint, Node> ReadNodes(OsiReader reader)
        {
            var nodes = new Dictionary <uint, Node>();
            var count = reader.ReadUInt32();

            while (count-- > 0)
            {
                Node node   = null;
                var  type   = reader.ReadByte();
                var  nodeId = reader.ReadUInt32();
                switch ((Node.Type)type)
                {
                case Node.Type.Database:
                    node = new DatabaseNode();
                    break;

                case Node.Type.Proc:
                    node = new ProcNode();
                    break;

                case Node.Type.DivQuery:
                    node = new DivQueryNode();
                    break;

                case Node.Type.InternalQuery:
                    node = new InternalQueryNode();
                    break;

                case Node.Type.And:
                    node = new AndNode();
                    break;

                case Node.Type.NotAnd:
                    node = new NotAndNode();
                    break;

                case Node.Type.RelOp:
                    node = new RelOpNode();
                    break;

                case Node.Type.Rule:
                    node = new RuleNode();
                    break;

                case Node.Type.UserQuery:
                    node = new UserQueryNode();
                    break;

                default:
                    throw new NotImplementedException("No serializer found for this node type");
                }

                node.Read(reader);
                nodes.Add(nodeId, node);
            }

            return(nodes);
        }
Beispiel #6
0
 public void Read(OsiReader reader)
 {
     Name = reader.ReadString();
     Type = reader.ReadByte();
     Key1 = reader.ReadUInt32();
     Key2 = reader.ReadUInt32();
     Key3 = reader.ReadUInt32();
     Key4 = reader.ReadUInt32();
 }
Beispiel #7
0
 public virtual void Read(OsiReader reader)
 {
     DatabaseRef = reader.ReadDatabaseRef();
     Name        = reader.ReadString();
     if (Name.Length > 0)
     {
         NameIndex = reader.ReadByte();
     }
 }
Beispiel #8
0
        public override void Read(OsiReader reader)
        {
            base.Read(reader);
            LeftParentRef  = reader.ReadNodeRef();
            RightParentRef = reader.ReadNodeRef();
            Adapter1Ref    = reader.ReadAdapterRef();
            Adapter2Ref    = reader.ReadAdapterRef();

            Database1Ref = reader.ReadDatabaseRef();
            Database1    = new NodeEntryItem();
            Database1.Read(reader);
            Database1Flag = reader.ReadByte();

            Database2Ref = reader.ReadDatabaseRef();
            Database2    = new NodeEntryItem();
            Database2.Read(reader);
            Database2Flag = reader.ReadByte();
        }
Beispiel #9
0
        public override void Read(OsiReader reader)
        {
            base.Read(reader);
            LeftParentRef   = reader.ReadNodeRef();
            RightParentRef  = reader.ReadNodeRef();
            LeftAdapterRef  = reader.ReadAdapterRef();
            RightAdapterRef = reader.ReadAdapterRef();

            LeftDatabaseNodeRef = reader.ReadNodeRef();
            LeftDatabaseJoin    = new NodeEntryItem();
            LeftDatabaseJoin.Read(reader);
            LeftDatabaseIndirection = reader.ReadByte();

            RightDatabaseNodeRef = reader.ReadNodeRef();
            RightDatabaseJoin    = new NodeEntryItem();
            RightDatabaseJoin.Read(reader);
            RightDatabaseIndirection = reader.ReadByte();
        }
Beispiel #10
0
        public override void Read(OsiReader reader)
        {
            base.Read(reader);
            LeftParentRef   = reader.ReadNodeRef();
            RightParentRef  = reader.ReadNodeRef();
            LeftAdapterRef  = reader.ReadAdapterRef();
            RightAdapterRef = reader.ReadAdapterRef();

            LeftDatabaseRef = reader.ReadDatabaseRef();
            LeftDatabase    = new NodeEntryItem();
            LeftDatabase.Read(reader);
            LeftDatabaseFlag = reader.ReadByte();

            RightDatabaseRef = reader.ReadDatabaseRef();
            RightDatabase    = new NodeEntryItem();
            RightDatabase.Read(reader);
            RightDatabaseFlag = reader.ReadByte();
        }
        public void Read(OsiReader reader)
        {
            Types = new List <UInt32>();
            var count = reader.ReadByte();

            while (count-- > 0)
            {
                Types.Add(reader.ReadUInt32());
            }
        }
Beispiel #12
0
        public virtual void Read(OsiReader reader)
        {
            var wtf = reader.ReadByte();

            if (wtf == 49)
            {
                TypeId   = reader.ReadUInt32();
                IntValue = reader.ReadInt32();
            }
            else if (wtf == 48)
            {
                TypeId = reader.ReadUInt32();
                switch ((Type)TypeId)
                {
                case Type.Unknown:
                    break;

                case Type.Integer:
                    IntValue = reader.ReadInt32();
                    break;

                case Type.Float:
                    FloatValue = reader.ReadSingle();
                    break;

                case Type.String:
                    if (reader.ReadByte() > 0)
                    {
                        StringValue = reader.ReadString();
                    }
                    break;

                default:
                    StringValue = reader.ReadString();
                    break;
                }
            }
            else
            {
                throw new InvalidDataException("Unrecognized value type");
            }
        }
Beispiel #13
0
 public void Read(OsiReader reader)
 {
     Line     = reader.ReadUInt32();
     Unknown1 = reader.ReadUInt32();
     Unknown2 = reader.ReadUInt32();
     NodeRef  = reader.ReadNodeRef();
     Type     = (FunctionType)reader.ReadByte();
     GUID     = reader.ReadGuid();
     Name     = new FunctionSignature();
     Name.Read(reader);
 }
Beispiel #14
0
        public void Read(OsiReader reader)
        {
            Columns = new List <Value>();
            var count = reader.ReadByte();

            while (count-- > 0)
            {
                var value = new Value();
                value.Read(reader);
                Columns.Add(value);
            }
        }
Beispiel #15
0
        public void Read(OsiReader reader)
        {
            Constants = new Tuple();
            Constants.Read(reader);

            LogicalIndices = new List <sbyte>();
            var count = reader.ReadByte();

            while (count-- > 0)
            {
                LogicalIndices.Add(reader.ReadSByte());
            }

            LogicalToPhysicalMap = new Dictionary <byte, byte>();
            count = reader.ReadByte();
            while (count-- > 0)
            {
                var key   = reader.ReadByte();
                var value = reader.ReadByte();
                LogicalToPhysicalMap.Add(key, value);
            }
        }
Beispiel #16
0
        public void Read(OsiReader reader)
        {
            Index = reader.ReadUInt32();
            Name  = reader.ReadString();
            SubGoalCombination = reader.ReadByte();

            ParentGoals = reader.ReadRefList <GoalReference, Goal>();
            SubGoals    = reader.ReadRefList <GoalReference, Goal>();

            Flags = reader.ReadByte();

            if (reader.Ver >= OsiVersion.VerAddInitExitCalls)
            {
                InitCalls = reader.ReadList <Call>();
                ExitCalls = reader.ReadList <Call>();
            }
            else
            {
                InitCalls = new List <Call>();
                ExitCalls = new List <Call>();
            }
        }
Beispiel #17
0
        public void Read(OsiReader reader)
        {
            reader.ReadByte();
            Version      = reader.ReadString();
            MajorVersion = reader.ReadByte();
            MinorVersion = reader.ReadByte();
            BigEndian    = reader.ReadBoolean();
            Unused       = reader.ReadByte();

            if (Ver >= OsiVersion.VerAddVersionString)
            {
                reader.ReadBytes(0x80); // Version string buffer
            }
            if (Ver >= OsiVersion.VerAddDebugFlags)
            {
                DebugFlags = reader.ReadUInt32();
            }
            else
            {
                DebugFlags = 0;
            }
        }
Beispiel #18
0
        public void Read(OsiReader reader)
        {
            reader.ReadByte();
            Version      = reader.ReadString();
            MajorVersion = reader.ReadByte();
            MinorVersion = reader.ReadByte();
            BigEndian    = reader.ReadBoolean();
            Unused       = reader.ReadByte();

            if (MajorVersion > 1 || (MajorVersion == 1 && MinorVersion >= 2))
            {
                reader.ReadBytes(0x80); // Version string buffer
            }
            if (MajorVersion > 1 || (MajorVersion == 1 && MinorVersion >= 3))
            {
                DebugFlags = reader.ReadUInt32();
            }
            else
            {
                DebugFlags = 0;
            }
        }
 public void Read(OsiReader reader)
 {
     Line = reader.ReadUInt32();
     ConditionReferences = reader.ReadUInt32();
     ActionReferences    = reader.ReadUInt32();
     NodeRef             = reader.ReadNodeRef();
     Type  = (FunctionType)reader.ReadByte();
     Meta1 = reader.ReadUInt32();
     Meta2 = reader.ReadUInt32();
     Meta3 = reader.ReadUInt32();
     Meta4 = reader.ReadUInt32();
     Name  = new FunctionSignature();
     Name.Read(reader);
 }
        public void Read(OsiReader reader)
        {
            Name         = reader.ReadString();
            OutParamMask = new List <byte>();
            var outParamBytes = reader.ReadUInt32();

            while (outParamBytes-- > 0)
            {
                OutParamMask.Add(reader.ReadByte());
            }

            Parameters = new ParameterList();
            Parameters.Read(reader);
        }
Beispiel #21
0
        public override void Read(OsiReader reader)
        {
            base.Read(reader);
            Calls = reader.ReadList <Call>();

            Variables = new List <Variable>();
            var variables = reader.ReadByte();

            while (variables-- > 0)
            {
                var type = reader.ReadByte();
                if (type != 1)
                {
                    throw new InvalidDataException("Illegal value type in rule variable list");
                }
                var variable = new Variable();
                variable.Read(reader);
                if (variable.Adapted)
                {
                    variable.VariableName = String.Format("_Var{0}", Variables.Count + 1);
                }

                Variables.Add(variable);
            }

            Line = reader.ReadUInt32();

            if (reader.Ver >= OsiVersion.VerAddQuery)
            {
                IsQuery = reader.ReadBoolean();
            }
            else
            {
                IsQuery = false;
            }
        }
Beispiel #22
0
        public virtual void Read(OsiReader reader)
        {
            // possibly isReference?
            var wtf = reader.ReadByte();

            if (wtf == '1')
            {
                TypeId   = reader.ReadUInt32();
                IntValue = reader.ReadInt32();
            }
            else if (wtf == '0')
            {
                TypeId = reader.ReadUInt32();
                uint writtenTypeId = TypeId;

                uint alias;
                bool dos1alias = false;
                if (reader.TypeAliases.TryGetValue(writtenTypeId, out alias))
                {
                    writtenTypeId = alias;
                    if (reader.Ver < OsiVersion.VerEnhancedTypes)
                    {
                        dos1alias = true;
                    }
                }

                if (reader.Ver < OsiVersion.VerEnhancedTypes)
                {
                    // Convert D:OS 1 type ID to D:OS 2 type ID
                    writtenTypeId = ConvertOS1ToOS2Type(writtenTypeId);
                }

                switch ((Type)writtenTypeId)
                {
                case Type.Unknown:
                    break;

                case Type.Integer:
                    IntValue = reader.ReadInt32();
                    break;

                case Type.Integer64:
                    Int64Value = reader.ReadInt64();
                    break;

                case Type.Float:
                    FloatValue = reader.ReadSingle();
                    break;

                case Type.GuidString:
                case Type.String:
                    // D:OS 1 aliased strings didn't have a flag byte
                    if (dos1alias)
                    {
                        StringValue = reader.ReadString();
                    }
                    else if (reader.ReadByte() > 0)
                    {
                        StringValue = reader.ReadString();
                    }
                    break;

                default:
                    StringValue = reader.ReadString();
                    break;
                }
            }
            else
            {
                throw new InvalidDataException("Unrecognized value type");
            }
        }
Beispiel #23
0
 public void Read(OsiReader reader)
 {
     Name  = reader.ReadString();
     Index = reader.ReadByte();
 }