public override void Apply(XDataHolder input) { AddPiece.PlacementOffset.position = input.ReadVector3("Position"); AddPiece.PlacementOffset.rotation = Quaternion.Euler( input.ReadVector3("Rotation") ); }
private UIObject[] GetObjects( Plugin plugin, XDataHolder input, ValueInfo valueInfo ) { ///Create UI elements for each input var uiObjects = new List <UIObject>(); foreach (var data in input.ReadAll()) { switch (data.Type) { case "Single": uiObjects.Add(new UIObject(data.Key)); uiObjects.Add( new UIObject( data.RawValue, null, (single) => { input.Write(data.Key, (float)single); valueInfo.ValueChanged = true; }, true ) ); break; case "Integer": uiObjects.Add(new UIObject(data.Key)); uiObjects.Add( new UIObject( (float)(int)data.RawValue, null, (single) => { input.Write(data.Key, (int)(float)single); valueInfo.ValueChanged = true; }, true ) ); break; case "Vector3": void Put(object single, int i) { var v3 = input.ReadVector3(data.Key); v3[i] = (float)single; input.Write(data.Key, v3); valueInfo.ValueChanged = true; } uiObjects.Add(new UIObject(data.Key)); uiObjects.Add( new UIObject( ((Vector3)data.RawValue).x, null, f => Put(f, 0) ) ); uiObjects.Add( new UIObject( ((Vector3)data.RawValue).y, null, f => Put(f, 1) ) ); uiObjects.Add( new UIObject( ((Vector3)data.RawValue).z, null, f => Put(f, 2), true ) ); break; case "Boolean": uiObjects.Add(new UIObject(data.Key)); uiObjects.Add( new UIObject( data.RawValue, null, (boolean) => { input.Write(data.Key, (bool)boolean); valueInfo.ValueChanged = true; }, true ) ); break; } } if (uiObjects.Count > 0) { var lastObj = uiObjects[uiObjects.Count - 1]; lastObj.NewLine = true; uiObjects[uiObjects.Count - 1] = lastObj; } ///Create global UI elements ApplyRule applyRule = (ApplyRule)((int)plugin.ApplyRule % (int)ApplyRule.NoEnable); if (applyRule == ApplyRule.OnApply) { uiObjects.Add( new UIObject( null, "Apply", (b) => { valueInfo.WasApplied |= b is bool?(bool)b: false; } ) ); } if ((plugin.ApplyRule & ApplyRule.NoEnable) == ApplyRule.Disabled) { uiObjects.Add( new UIObject( "Enabled:" ) ); uiObjects.Add( new UIObject( plugin.Enabled, null, (b) => { plugin.Enabled = b is bool ?(bool)b : plugin.Enabled; valueInfo.ValueChanged = true; valueInfo.WasApplied = true; }, true ) ); } return(uiObjects.ToArray()); }
public override void Apply(XDataHolder input) { _scale = input.ReadVector3("Scale"); }
public override void Apply(XDataHolder input) { var buildingBlocks = Machine.Active()?.BuildingBlocks; var machine = Machine.Active().transform; if (buildingBlocks == null) { return; } var position = input.ReadVector3("Position"); var rotation = Quaternion.Euler(input.ReadVector3("Rotation")); var scale = input.ReadVector3("Scale"); var translator = new GameObject().transform; translator.position = machine.TransformPoint(position); translator.rotation = machine.rotation * rotation; translator.localScale = machine.TransformVector(scale); Vector3 Translate(Vector3 pos) { return(machine.InverseTransformPoint( translator.TransformPoint( pos ) )); } foreach (var block in buildingBlocks) { var dragged = block as GenericDraggedBlock; Vector3 start = Vector3.zero, end = Vector3.zero; if (dragged) { start = dragged.startPoint.position; end = dragged.endPoint.position; start = Translate(start); end = Translate(end); } var transform = block.transform; block.SetPosition(Translate(transform.position)); block.SetRotation(rotation * transform.rotation); block.SetScale( transform.InverseTransformVector( Vector3.Scale( transform.TransformVector( transform.localScale ), scale ) ) ); if (dragged) { var parentEuler = dragged.ParentMachine .boundingBoxController .transform .eulerAngles; dragged.SetPositionsGlobal( start, dragged.startPoint.eulerAngles - parentEuler, end, dragged.startPoint.eulerAngles - parentEuler, true ); } } }