public void BeginLayout() { m_HoveredBodyControlID = m_GUIWrapper.GetControlID(kBodyHashCode, FocusType.Passive); m_HoveredJointControlID = m_GUIWrapper.GetControlID(kJointHashCode, FocusType.Passive); m_HoveredTailControlID = m_GUIWrapper.GetControlID(kTailHashCode, FocusType.Passive); m_CreateBoneControlID = m_GUIWrapper.GetControlID(kCreateBoneHashCode, FocusType.Passive); if (m_GUIWrapper.eventType == EventType.Layout) { m_PrevHoveredBoneID = m_HoveredBoneID; m_NearestDistance = float.MaxValue; m_NearestBodyDistance = float.MaxValue; m_NearestJointDistance = float.MaxValue; m_NearestTailDistance = float.MaxValue; m_NearestBodyId = InvalidID; m_NearestJointId = InvalidID; m_NearestTailId = InvalidID; m_HoveredBoneID = InvalidID; m_HoveredBodyID = InvalidID; m_HoveredJointID = InvalidID; m_HoveredTailID = InvalidID; m_HoveredSliderData = SliderData.zero; if (m_GUIWrapper.IsControlHot(0)) { m_RotateControlID = -1; m_MoveControlID = -1; m_FreeMoveControlID = -1; m_MoveJointControlID = -1; m_MoveEndPositionControlID = -1; m_ChangeLengthControlID = -1; m_HotBoneID = InvalidID; } } }
public void LayoutBone(Transform boneTransform, float length) { if (IsLayerLocked(boneTransform)) { return; } var position = boneTransform.position; var endPosition = boneTransform.TransformPoint(Vector3.right * length); int boneBodyControlID = m_GUIWapper.GetControlID(boneBodyHashCode, FocusType.Passive); int boneHeadControlID = m_GUIWapper.GetControlID(boneHeadHashCode, FocusType.Passive); var headEnd = position + (endPosition - position).normalized * GetHandleSize(position) * 0.25f; m_GUIWapper.LayoutControl(boneBodyControlID, m_GUIWapper.DistanceToSegment(headEnd, endPosition)); if (m_GUIWapper.IsControlNearest(boneBodyControlID)) { m_HoveredBoneBodyControlID = boneBodyControlID; m_HoveredBoneTransform = boneTransform; } m_GUIWapper.LayoutControl(boneHeadControlID, m_GUIWapper.DistanceToSegment(position, headEnd)); if (m_GUIWapper.IsControlNearest(boneHeadControlID)) { m_HoveredBoneHeadControlID = boneHeadControlID; m_HoveredBoneTransform = boneTransform; } }
public void SetupBase() { m_EventType = EventType.Layout; m_NearestDistance = kPickDistance; m_NearestControl = GetDefaultControlID(); m_CurrentControlID = 0; m_MousePosition = Vector2.zero; m_HotControl = 0; m_GUIWrapper = Substitute.For <IGUIWrapper>(); m_GUIWrapper.GetControlID(Arg.Any <int>(), Arg.Any <FocusType>()).Returns(x => GetControlID((int)x[0], (FocusType)x[1])); m_GUIWrapper.mousePosition.Returns(x => m_MousePosition); m_GUIWrapper.eventType.Returns(x => m_EventType); m_GUIWrapper.GUIToWorld(Arg.Any <Vector2>()).Returns(x => (Vector3)(Vector2)x[0]); m_GUIWrapper.GUIToWorld(Arg.Any <Vector2>(), Arg.Any <Vector3>(), Arg.Any <Vector3>()).Returns(x => (Vector3)(Vector2)x[0]); m_GUIWrapper.IsControlNearest(Arg.Any <int>()).Returns(x => (int)x[0] == nearestControl); m_GUIWrapper.IsControlHot(Arg.Any <int>()).Returns(x => (int)x[0] == m_HotControl); m_GUIWrapper.When(x => m_GUIWrapper.LayoutControl(Arg.Any <int>(), Arg.Any <float>())).Do(x => { if (m_EventType != EventType.Layout) { return; } int controlId = (int)x[0]; float distance = (float)x[1]; if (distance <= m_NearestDistance) { m_NearestDistance = distance; m_NearestControl = controlId; } }); m_GUIWrapper.DistanceToCircle(Arg.Any <Vector3>(), Arg.Any <float>()).Returns(x => { Vector2 center = (Vector3)x[0]; float radius = (float)x[1]; float dist = (center - m_MousePosition).magnitude; if (dist < radius) { return(0f); } return(dist - radius); }); m_GUIWrapper.DistanceToSegment(Arg.Any <Vector3>(), Arg.Any <Vector3>()).Returns(x => HandleUtility.DistancePointToLineSegment(m_MousePosition, (Vector3)x[0], (Vector3)x[1])); m_GUIWrapper.DistanceToSegmentClamp(Arg.Any <Vector3>(), Arg.Any <Vector3>()).Returns(x => MathUtility.DistanceToSegmentClamp(m_MousePosition, (Vector3)x[0], (Vector3)x[1])); Vector3 sliderPos; m_GUIWrapper.DoSlider(Arg.Any <int>(), Arg.Any <SliderData>(), out sliderPos).ReturnsForAnyArgs(x => (int)x[0] == nearestControl); m_GUIWrapper.GetHandleSize(Arg.Any <Vector3>()).ReturnsForAnyArgs(x => 1f); }
public void OnGUI() { m_ControlID = m_GUIWrapper.GetControlID(kBrushHashCode, FocusType.Passive); var eventType = m_GUIWrapper.eventType; if (!m_GUIWrapper.isAltDown) { m_GUIWrapper.LayoutControl(controlID, 0f); } if (isActivable) { m_SliderData.position = m_GUIWrapper.GUIToWorld(m_GUIWrapper.mousePosition); if (m_GUIWrapper.IsMouseDown(0)) { m_DeltaAcc = 0f; onStrokeBegin(this); onStrokeStep(this); m_GUIWrapper.SetGuiChanged(true); } if (eventType == EventType.MouseMove) { onMove(this); m_GUIWrapper.UseCurrentEvent(); } if (m_GUIWrapper.isShiftDown && eventType == EventType.ScrollWheel) { var sizeDelta = HandleUtility.niceMouseDeltaZoom * kWheelSizeSpeed; size = Mathf.Max(1f, size + sizeDelta); onSize(this); m_GUIWrapper.UseCurrentEvent(); } } if (isHot && m_GUIWrapper.IsMouseUp(0)) { onStrokeEnd(this); } if (m_GUIWrapper.IsRepainting() && (isHot || isActivable)) { onRepaint(this); } Vector3 position; if (m_GUIWrapper.DoSlider(m_ControlID, m_SliderData, out position)) { step = Mathf.Max(step, 1f); var delta = position - m_SliderData.position; var direction = delta.normalized; var magnitude = delta.magnitude; m_SliderData.position -= direction * m_DeltaAcc; m_DeltaAcc += magnitude; if (m_DeltaAcc >= step) { var stepVector = direction * step; while (m_DeltaAcc >= step) { m_SliderData.position += stepVector; onMove(this); onStrokeStep(this); m_DeltaAcc -= step; } } m_SliderData.position = position; onStrokeDelta(this); } }