Example #1
0
        protected override void Apply()
        {
            if (IsDynamic(Object))
            {
                IPhysicsObject physObj      = (IPhysicsObject)Object;
                double         d            = (Object.Position - Center).ScalarProjection(Axis);
                double         angularFreq  = 2 * Math.PI * Frequency;
                double         k            = Math.Pow(angularFreq, 2) * physObj.Mass;
                double         force        = -k * d;
                double         dampingForce = physObj.Velocity.ScalarProjection(Axis) * Damping * physObj.Mass;
                double         totalForce   = force - dampingForce;

                physObj.Push(totalForce * Axis);
            }
            else
            {
                Object.Position = Center + GetOffset();
            }
        }
Example #2
0
        protected override void Apply()
        {
            if (IsDynamic(Object))
            {
                IPhysicsObject physObj      = (IPhysicsObject)Object;
                double         d            = (Object.Position - Center).ScalarProjection(Axis);
                double         angularFreq  = 2 * Math.PI * Frequency;
                double         k            = Math.Pow(angularFreq, 2) * physObj.Mass;
                double         force        = -k * d;
                double         dampingForce = physObj.Velocity.ScalarProjection(Axis) * Damping * physObj.Mass;
                double         totalForce   = force - dampingForce;

                physObj.Push(totalForce * Axis);
            }
            else if (Object is PhysicsObject obj)
            {
                obj.Velocity = GetVelocity();
            }
            else
            {
                Object.Position = Center + GetOffset();
            }
            if (stopGradually)
            {
                double origDst = Vector.Distance(OriginalPosition, prevPos);
                double currDst = Vector.Distance(OriginalPosition, Object.Position);
                if (!distanceDecreasing && origDst > currDst)
                {
                    distanceDecreasing = true;
                }
                if (distanceDecreasing && origDst < currDst)
                {
                    Stop(true);
                }
            }
            prevPos = Object.Position;
        }
Example #3
0
 public void ShokkiaaltoOsuu(IPhysicsObject vihu, Vector Shokki)
 {
     vihu.Push(Shokki);
     ((Vihulainen)vihu).Vahingoita(Vahinko);
 }