public void SetNode2(VerletNode node) { if (Node2 != null) Node2.RemoveConstraint(this); Node2 = node; Node2.AddConstraint(this); }
void UpdateTransform() { Position = (Node1.Position + Node2.Position) / 2; transform.position = Position; Vector3 up = -(Node2.Position - Node1.Position).normalized; transform.rotation = VerletNode.LookRotationExtended(up, Node1.Rotation * Vector3.right, Vector3.right, -Vector3.forward); }
public void SetNode1(VerletNode node) { if (Node1 != null) Node1.RemoveConstraint(this); Node1 = node; Node1.AddConstraint(this); }
public void SetNode2(VerletNode node) { if (Node2 != null) { Node2.RemoveConstraint(this); } Node2 = node; Node2.AddConstraint(this); }
public void SetNode1(VerletNode node) { if (Node1 != null) { Node1.RemoveConstraint(this); } Node1 = node; Node1.AddConstraint(this); }
void ReCalcLengthOnConnectedConstraints(VerletNode node) { foreach (var constr in SystemUpdater.AllConstraints) { if (constr.Node1 == node || constr.Node2 == node) { constr.ReCalcLength = true; } } }
void DoProximityCheck() { VerletNode closest = null; float closestDist = float.MaxValue; foreach (var node in SystemUpdater.DynamicNodes) { float dist = Vector3.Distance(node.Position, HandlePoint.position); if (dist < closestDist && dist < ProximityDistance) { closestDist = dist; closest = node; } } if (closest != null && _State.NodeInHand != closest) { _State.NodeInHand = closest; FaceMenu.MenuInstance.ClearButtons(); FaceMenu.MenuInstance.RegisterButton("Fixed", () => { _State.NodeInHand.FixedPosition = true; }); FaceMenu.MenuInstance.RegisterButton("Set Length", () => { ReCalcLengthOnConnectedConstraints(_State.NodeInHand); }); FaceMenu.MenuInstance.RegisterButton("Free", () => { _State.NodeInHand.FixedPosition = false; }); FaceMenu.MenuInstance.RegisterButton("", () => { }); } if (_State.NodeInHand != null) { float dist = Vector3.Distance(_State.NodeInHand.Position, HandlePoint.position); if (dist > ProximityDistance) { FaceMenu.MenuInstance.ClearButtons(); _State.NodeInHand = null; } else { FaceMenu.ShowMenu(); } } }
public void RemoveNode(VerletNode node) { if (node.UpdateLayer.Equals("root")) { RootNodes.Remove(node); return; } DynamicNodes.Remove(node); if (SimulationSettings.LayerNames.Contains(node.UpdateLayer) == false) { Debug.Log("Tried to Remove update func by layer name " + node.UpdateLayer + " which des not exist, GameObject: " + node.name); return; } NodeUpdates[node.UpdateLayer].Remove(node); }
VerletNode GetClosestNode(VerletNode except, out float closestDist, float maxDistance = float.MaxValue) { VerletNode closest = null; closestDist = float.MaxValue; foreach (var node in SystemUpdater.DynamicNodes) { if (except == node) { continue; } float dist = Vector3.Distance(node.Position, HandlePoint.position); if (dist < closestDist && dist < maxDistance) { closestDist = dist; closest = node; } } return(closest); }
public void AttachToNode(VerletNode node) { AttachedTo = node; Trans.SetParent(node.StableTrans, true); Trans.localPosition = Vector3.zero; }
VerletNode GetClosestNode(VerletNode except, float maxDistance = float.MaxValue) { float dummy; return(GetClosestNode(except, out dummy, maxDistance)); }
VerletNode GetClosestNode(VerletNode except, out float closestDist, float maxDistance = float.MaxValue) { VerletNode closest = null; closestDist = float.MaxValue; foreach (var node in SystemUpdater.DynamicNodes) { if (except == node) continue; float dist = Vector3.Distance(node.Position, HandlePoint.position); if (dist < closestDist && dist < maxDistance) { closestDist = dist; closest = node; } } return closest; }
VerletNode GetClosestNode(VerletNode except, float maxDistance = float.MaxValue) { float dummy; return GetClosestNode(except, out dummy, maxDistance); }
public void SetUpdateNode(VerletNode node) { if (node.UpdateLayer.Equals("root")) { RootNodes.Add(node); return; } DynamicNodes.Add(node); if (SimulationSettings.LayerNames.Contains(node.UpdateLayer) == false) { Debug.Log("Tried to add update func by layer name " + node.UpdateLayer + " which des not exist, GameObject: " + node.name); return; } NodeUpdates[node.UpdateLayer].Add(node); }