Пример #1
0
        public override void Update(uint updateMode, MemoryInputStream stream)
        {
            base.Update(updateMode, stream);

            if ((updateMode & 0x02) != 0)
            {
                Value = stream.ReadS32();
            }

            if ((updateMode & 0x04) != 0)
            {
                RangeMin = stream.ReadS32();
                RangeMax = stream.ReadS32();
            }

            AfterUpdate();
        }
Пример #2
0
        public void ProcessTag(JHITag tag)
        {
            var            stream      = new MemoryInputStream(tag.Data);
            JORMessageType messageType = (JORMessageType)stream.ReadS32();

            // Debug.WriteLine("<- ORef {1}  {0}", tag.Dump(), messageType);

            if (messageType == JORMessageType.Reset)
            {
                this.Root.Reset();
                SendGetRootObjectRef();
            }
            else if (messageType == JORMessageType.InvalidNode)
            {
                Assert(stream.ReadU32() == 0x07u);
                JORNode node = ReadNodeID(stream);
                // Debug.WriteLine("<- InvalidNode {0}", node);
                if (node != null)
                {
                    node.Invalidate();
                }
                Assert(stream.ReadU32() == 0x03u);
            }
            else if (messageType == JORMessageType.GetRootObjectRef)
            {
                // Reply from GetRootObjectRef request
                JORNode node = ReadGenNodeSub(stream, false, this.Root.TreeRoot);
                SendGenObjectInfo(node);
            }
            else if (messageType == JORMessageType.GenObjectInfo)
            {
                // Reply from GenObjectInfo request
                ProcessObjectInfo(stream);
            }
            else if (messageType == JORMessageType.StartNode)
            {
                uint mode = stream.ReadU32();
                // startNode = 0, genNode = 3
                Assert(mode == 0u || mode == 3u || mode == 11u);

                if (mode == 0u || mode == 3u)
                {
                    uint    unk1       = stream.ReadU32();
                    JORNode parentNode = ReadNodeID(stream);
                    JORNode node       = ReadGenNodeSub(stream, true);
                    // Debug.WriteLine("<- StartNode {0} Parent = 0x{1:X8}", node?.Name, parentNode);
                }
                else if (mode == 11u)
                {
                    JORNode node = ReadNodeID(stream);
                }
            }
            else if (messageType == JORMessageType.StartUpdateNode)
            {
                JORNode node = ReadNodeID(stream);
                if (node == null)
                {
                    return;
                }

                ProcessUpdateNode(stream, node);
            }
            else if (messageType == JORMessageType.OpenMessageBox)
            {
                uint   retPtr = stream.ReadU32();
                uint   style  = stream.ReadU32();
                string msg    = stream.ReadSJIS();
                string title  = stream.ReadSJIS();
                MessageBox.Show(msg, title);
                SendResultU32(retPtr);
            }
            else if (messageType == JORMessageType.ShellExecute)
            {
                uint   retPtr = stream.ReadU32();
                string str0   = stream.ReadSJIS();
                string str1   = stream.ReadSJIS();
                string str2   = stream.ReadSJIS();
                string str3   = stream.ReadSJIS();
                int    unk4   = stream.ReadS32();
                // not actually gonna ShellExecute lol
                Debug.WriteLine("<- ShellExecute {0} {1} {2} {3} {4}", str0, str1, str2, str3, unk4);
                SendResultU32(retPtr);
            }
            else
            {
                Debug.WriteLine("<- JOR UNKNOWN!!!");
            }
        }
Пример #3
0
        private JORControl ReadControlSub(MemoryInputStream stream, JORNode node)
        {
            string controlType = stream.ReadMagic();

            JORControl control;

            if (controlType == "LABL")
            {
                control = new JORControlLabel();
            }
            else if (controlType == "BUTN")
            {
                control = new JORControlButton();
            }
            else if (controlType == "CHBX")
            {
                control = new JORControlCheckBox();
            }
            else if (controlType == "RNGi")
            {
                control = new JORControlRangeInt();
            }
            else if (controlType == "RNGf")
            {
                control = new JORControlRangeFloat();
            }
            else if (controlType == "CMBX" || controlType == "RBTN")
            {
                control = new JORControlSelector();
            }
            else if (controlType == "EDBX")
            {
                control = new JORControlEditBox();
            }
            else
            {
                control = new JORControlImmutable();
            }

            control.Node  = node;
            control.Type  = controlType;
            control.Kind  = (EKind)stream.ReadU32();
            control.Name  = stream.ReadSJIS();
            control.Style = stream.ReadU32();
            control.ID    = stream.ReadU32();
            // Debug.WriteLine("<- Control {0} {1} {2}", control.Type, control.Kind, control.Name);

            if ((control.Kind & EKind.HasListener) != 0)
            {
                control.ListenerPtr = stream.ReadU32();
            }

            if (((control.Kind & EKind.ValueID) != 0) && control.Type != "EDBX")
            {
                control.Kind |= (EKind)0x20;
            }

            float valueF = 0.0f;
            uint  valueU = 0xFFFFFFFF;

            uint kindSize = (uint)(control.Kind & EKind.SizeMask);

            if (kindSize != 0)
            {
                if ((control.Kind & EKind.FloatValue) != 0)
                {
                    valueF = stream.ReadF32();
                }
                else
                {
                    valueU = stream.ReadU32();
                }
            }

            if (control is JORControlCheckBox)
            {
                var cb = control as JORControlCheckBox;
                cb.Mask  = valueU >> 16;
                cb.Value = (valueU & 0xFF) != 0;
            }
            else if (control is JORControlRangeInt)
            {
                var range = control as JORControlRangeInt;
                range.RangeMin = stream.ReadS32();
                range.RangeMax = stream.ReadS32();
                range.Value    = (int)valueU;
            }
            else if (control is JORControlRangeFloat)
            {
                var range = control as JORControlRangeFloat;
                range.RangeMin = stream.ReadF32();
                range.RangeMax = stream.ReadF32();
                range.Value    = valueF;
            }
            else if (control is JORControlEditBox)
            {
                var editBox = control as JORControlEditBox;
                editBox.MaxChars = stream.ReadU16();
                editBox.Text     = stream.ReadSJIS();
            }

            ReadControlLocation(stream, ref control.Location);

            node.Controls.Add(control);
            return(control);
        }