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