public void DoSolverGUI(Solver2D solver) { if (solver == null || !solver.isValid) { return; } IKManager2D manager = IKEditorManager.instance.FindManager(solver); if (!solver.isActiveAndEnabled || manager == null || !manager.isActiveAndEnabled) { return; } var solverData = manager.GetSolverEditorData(solver); if (!solverData.showGizmo) { return; } DrawSolver(solver, solverData); var allChainsHaveTargets = solver.allChainsHaveTargets; for (int i = 0; i < solver.chainCount; ++i) { var chain = solver.GetChain(i); if (chain == null) { continue; } if (allChainsHaveTargets) { if (!IsTargetTransformSelected(chain)) { DoTargetGUI(solver, chain); } } else if (chain.target == null) { DoIkPoseGUI(solver, chain); } } if (GUIUtility.hotControl == 0) { isDragging = false; } }
public void Setup() { editorManager = IKEditorManager.instance; go = new GameObject(); var child1GO = new GameObject(); child1GO.transform.parent = go.transform; var child2GO = new GameObject(); child2GO.transform.parent = child1GO.transform; var child3GO = new GameObject(); child3GO.transform.parent = child2GO.transform; targetGO = new GameObject(); targetGO.transform.parent = child3GO.transform; go.transform.position = Vector3.zero; child1GO.transform.position = new Vector3(1.0f, 0.0f, 0.0f); child2GO.transform.position = new Vector3(3.0f, 0.0f, 0.0f); child3GO.transform.position = new Vector3(6.0f, 0.0f, 0.0f); targetGO.transform.position = new Vector3(10.0f, 0.0f, 0.0f); ikGO = new GameObject(); manager = ikGO.AddComponent <IKManager2D>(); var lsGO = new GameObject(); solver = lsGO.AddComponent <FabrikSolver2D>(); lsGO.transform.parent = ikGO.transform; effectorGO = new GameObject(); effectorGO.transform.parent = solver.transform; effectorGO.transform.position = new Vector3(10.0f, 0.0f, 0.0f); chain = solver.GetChain(0); chain.target = targetGO.transform; chain.effector = effectorGO.transform; chain.transformCount = 5; solver.Initialize(); manager.AddSolver(solver); editorManager.Initialize(); }
private void DrawSolver(Solver2D solver, IKManager2D.SolverEditorData editorData) { if (Event.current.type != EventType.Repaint) { return; } for (int i = 0; i < solver.chainCount; ++i) { var chain = solver.GetChain(i); if (chain != null) { DrawChain(chain, editorData.color, solver.allChainsHaveTargets); } } }
public void Setup() { go = new GameObject(); var child1GO = new GameObject(); child1GO.transform.parent = go.transform; var child2GO = new GameObject(); child2GO.transform.parent = child1GO.transform; var child3GO = new GameObject(); child3GO.transform.parent = child2GO.transform; targetGO = new GameObject(); targetGO.transform.parent = child3GO.transform; go.transform.position = Vector3.zero; child1GO.transform.position = new Vector3(1.0f, 0.0f, 0.0f); child2GO.transform.position = new Vector3(3.0f, 0.0f, 0.0f); child3GO.transform.position = new Vector3(6.0f, 0.0f, 0.0f); targetGO.transform.position = new Vector3(10.0f, 0.0f, 0.0f); ikGO = new GameObject(); manager = ikGO.AddComponent <IKManager2D>(); var lsGO = new GameObject(); // Using FABRIKSolver2D here, but tests are generalised for all Solver2Ds solver = lsGO.AddComponent <FabrikSolver2D>(); lsGO.transform.parent = ikGO.transform; effectorGO = new GameObject(); effectorGO.transform.parent = solver.transform; var chain = solver.GetChain(0); chain.target = targetGO.transform; chain.effector = effectorGO.transform; chain.transformCount = 5; chain.Initialize(); manager.AddSolver(solver); }
private void DrawSolver(Solver2D solver) { if (Event.current.type != EventType.Repaint) { return; } IKManager2D manager = IKEditorManager.instance.FindManager(solver); bool isManagerDisabled = !solver.isActiveAndEnabled || manager == null || !manager.isActiveAndEnabled; for (int i = 0; i < solver.chainCount; ++i) { var chain = solver.GetChain(i); if (chain != null) { DrawChain(chain, isManagerDisabled, solver.allChainsHaveTargets); } } }
private bool PrepareEffectorOverrides(Solver2D solver) { m_EffectorPositions.Clear(); for (int i = 0; i < solver.chainCount; ++i) { var chain = solver.GetChain(i); Vector3 positionOverride; if (!m_ChainPositionOverrides.TryGetValue(chain, out positionOverride)) { m_EffectorPositions.Clear(); return(false); } m_EffectorPositions.Add(positionOverride); } return(true); }
public void DoSolverGUI(Solver2D solver) { if (solver == null || !solver.isValid) { return; } DrawSolver(solver); var allChainsHaveTargets = solver.allChainsHaveTargets; for (int i = 0; i < solver.chainCount; ++i) { var chain = solver.GetChain(i); if (chain == null) { continue; } if (allChainsHaveTargets) { if (!IsTargetTransformSelected(chain)) { DoTargetGUI(solver, chain); } } else if (chain.target == null) { DoIkPoseGUI(solver, chain); } } if (GUIUtility.hotControl == 0) { isDragging = false; } }
public void TargetIsReachableForChain_EndPointReachesTarget() { var targetPosition = new Vector3(9.0f, 1.0f, 0.0f); effectorGO.transform.position = targetPosition; manager.UpdateManager(); var chain = solver.GetChain(0); Assert.That(targetPosition, Is.EqualTo(chain.target.position).Using(vec3Compare)); Assert.That(0.0f, Is.EqualTo((targetPosition - chain.target.position).magnitude).Using(floatCompare)); }
public static Transform Target(this Solver2D solver, int chainIndex = 0) { return(solver.GetChain(chainIndex).target); }