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(); }
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!!!"); } }
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); }