예제 #1
0
 public override void Apply(XDataHolder input)
 {
     AddPiece.PlacementOffset.position = input.ReadVector3("Position");
     AddPiece.PlacementOffset.rotation =
         Quaternion.Euler(
             input.ReadVector3("Rotation")
             );
 }
예제 #2
0
        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());
        }
예제 #3
0
 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
                        );
                }
            }
        }