public override void Update(uint updateMode, MemoryInputStream stream) { base.Update(updateMode, stream); if ((updateMode & 0x02) != 0) { Value = stream.ReadF32(); } if ((updateMode & 0x04) != 0) { RangeMin = stream.ReadF32(); RangeMax = stream.ReadF32(); } AfterUpdate(); }
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); }