コード例 #1
0
        private static void UpdateMirrorSymmetryCounterpartsPosition(CompoundPart part, bool targetActive)
        {
            Vector3 mirrorPosition;

            if (targetActive)
            {
                Vector3 targetPosition = PartUtil.GetPosition(part, Space.World, targetActive);
                mirrorPosition = MirrorPosition(targetPosition);
            }
            else
            {
                mirrorPosition = MirrorPosition(part.transform.position);
            }

            foreach (CompoundPart symmetryCounterpart in part.symmetryCounterparts)
            {
                if (targetActive)
                {
                    SetTargetPosition(symmetryCounterpart, mirrorPosition);
                }
                else
                {
                    symmetryCounterpart.transform.position = mirrorPosition;
                }
                UpdateEditorGizmo(symmetryCounterpart, targetActive);
                GameEvents.onEditorPartEvent.Fire(ConstructionEventType.PartOffset, symmetryCounterpart);
            }
        }
コード例 #2
0
        public void UpdateAxis(Part part, Space space, bool compoundTargetSelected)
        {
            if (part == null)
            {
                Hide();
                return;
            }

            bool isRootPart = (part.parent == null);

            if (visible && space == axisSpace && compoundTargetSelected == axisCompoundTargetSelected && part.transform.position == transform.position &&
                (isRootPart || part.parent.transform.rotation == transform.rotation))
            {
                return;
            }

            bool isTargetActive = PartUtil.IsTargetActive(part, compoundTargetSelected);

            transform.position         = PartUtil.GetPosition(part, Space.World, isTargetActive);
            transform.rotation         = isRootPart ? part.transform.rotation : part.parent.transform.rotation;
            axisSpace                  = space;
            axisCompoundTargetSelected = compoundTargetSelected;
            Vector3[] directions = new Vector3[] { transform.right, transform.up, transform.forward };

            for (int index = 0; index < axis.Length; index++)
            {
                LineRenderer lineRenderer = axis[index].GetComponent <LineRenderer>();
                Vector3[]    axisBounds   = (axisSpace == Space.World || isRootPart) ? GetWorldSpaceAxisBounds(transform.position, index) : GetSelfSpaceAxisBounds(transform.position, directions[index]);
                lineRenderer.SetPosition(0, axisBounds[0]);
                lineRenderer.SetPosition(1, axisBounds[1]);
            }
        }
コード例 #3
0
        private void Translate(int vectorIndex, bool inverse)
        {
            float   offset       = inverse ? -deltaPosition : deltaPosition;
            Vector3 position     = PartUtil.GetPosition(part, referenceSpace, compoundTargetSelected);
            float   currentValue = position[vectorIndex];
            float   newValue     = currentValue + offset;

            SetPosition(vectorIndex, newValue.ToString());
        }
コード例 #4
0
        private Vector3 GetWorldPositionToBeSet(int vectorIndex, string value)
        {
            float   fValue   = float.Parse(value, CultureInfo.InvariantCulture.NumberFormat);
            Vector3 position = PartUtil.GetPosition(part, referenceSpace, compoundTargetSelected);

            position[vectorIndex] = fValue;

            return((referenceSpace == Space.Self && part.parent != null) ? part.parent.transform.TransformPoint(position) : position);
        }
コード例 #5
0
 public void Update()
 {
     if (IsVisible() || attachmentWindow.IsVisible() || colliderWindow.IsVisible())
     {
         if (ValidatePart())
         {
             position = PartUtil.GetPosition(part, referenceSpace, compoundTargetSelected);
             rotation = PartUtil.GetRotation(part, referenceSpace, compoundTargetSelected);
             axisLines.UpdateAxis(part, referenceSpace, compoundTargetSelected);
         }
     }
 }
コード例 #6
0
        private string SetRotation(int vectorIndex, string value)
        {
            float      fValue          = float.Parse(value, CultureInfo.InvariantCulture.NumberFormat);
            Quaternion rotation        = PartUtil.GetRotation(part, referenceSpace, compoundTargetSelected);
            Vector3    partEulerAngles = rotation.eulerAngles;
            Vector3    eulerAngles     = new Vector3(0, 0, 0);

            eulerAngles[vectorIndex] = fValue - partEulerAngles[vectorIndex];
            if (part.isCompund)
            {
                CompoundPartTransform.Rotate((CompoundPart)part, eulerAngles, referenceSpace, compoundTargetSelected);
            }
            else
            {
                PartTransform.Rotate(part, eulerAngles, referenceSpace);
            }
            return(value);
        }
コード例 #7
0
        private string SetPosition(int vectorIndex, string value)
        {
            Vector3 newPosition = GetWorldPositionToBeSet(vectorIndex, value);
            Vector3 oldPosition = PartUtil.GetPosition(part, Space.World, compoundTargetSelected);
            Bounds  partBounds;

            if (PartUtil.IsTargetActive(part, compoundTargetSelected))
            {
                partBounds = FindChildGameObjectByName(part.gameObject, "obj_targetCollider").GetComponent <Collider>().bounds;
            }
            else
            {
                partBounds = part.collider.bounds;
            }

            if (!AreBoundsOutOfHangarBounds(partBounds))
            {
                Vector3 boundsOffset = partBounds.center - oldPosition;

                partBounds.center = newPosition + boundsOffset;
                if (AreBoundsOutOfHangarBounds(partBounds))
                {
                    return(value);
                }
            }
            if (newPosition == oldPosition)
            {
                return(value);
            }

            if (part.isCompund)
            {
                CompoundPartTransform.SetWorldPosition((CompoundPart)part, newPosition, compoundTargetSelected);
            }
            else
            {
                PartTransform.SetWorldPosition(part, newPosition);
            }

            return(value);
        }