示例#1
0
    public void SetNode2(VerletNode node)
    {
        if (Node2 != null)
            Node2.RemoveConstraint(this);

        Node2 = node;
        Node2.AddConstraint(this);
    }
示例#2
0
    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);
    }
示例#3
0
    public void SetNode1(VerletNode node)
    {
        if (Node1 != null)
            Node1.RemoveConstraint(this);

        Node1 = node;
        Node1.AddConstraint(this);
    }
示例#4
0
    public void SetNode2(VerletNode node)
    {
        if (Node2 != null)
        {
            Node2.RemoveConstraint(this);
        }

        Node2 = node;
        Node2.AddConstraint(this);
    }
示例#5
0
    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();
            }
        }
    }
示例#8
0
    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);
    }
示例#10
0
 public void AttachToNode(VerletNode node)
 {
     AttachedTo = node;
     Trans.SetParent(node.StableTrans, true);
     Trans.localPosition = Vector3.zero;
 }
示例#11
0
    VerletNode GetClosestNode(VerletNode except, float maxDistance = float.MaxValue)
    {
        float dummy;

        return(GetClosestNode(except, out dummy, maxDistance));
    }
示例#12
0
 public void AttachToNode(VerletNode node)
 {
     AttachedTo = node;
     Trans.SetParent(node.StableTrans, true);
     Trans.localPosition = Vector3.zero;
 }
示例#13
0
 void ReCalcLengthOnConnectedConstraints(VerletNode node)
 {
     foreach (var constr in SystemUpdater.AllConstraints)
     {
         if (constr.Node1 == node || constr.Node2 == node)
         {
             constr.ReCalcLength = true;
         }
     }
 }
示例#14
0
    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;
    }
示例#15
0
 VerletNode GetClosestNode(VerletNode except, float maxDistance = float.MaxValue)
 {
     float dummy;
     return GetClosestNode(except, out dummy, maxDistance);
 }
示例#16
0
    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);
    }