예제 #1
0
 protected override void OnContact(ItemContactState contactState, Single deltaTime)
 {
     _IsContactOcurred = true;
     if (_MaxDepth < contactState.Contact.Depth)
     {
         _MaxDepth      = contactState.Contact.Depth;
         _MaxDepthState = contactState;
     }
     if (Scale.Y < _SpringContractedY || _TotalContraction < 0 ||
         !Vector3.Dot(_Collider.Top, contactState.Normal).TolerantEquals(1))
     {
         if (_TotalContraction < 0)
         {
             _Contract(-_TotalContraction);
             if (_SoundEffect != null)
             {
                 _SoundEffect.play(false);
             }
             _TotalContraction = 0;
         }
         base.OnContact(contactState, deltaTime);
     }
     else
     {
         contactState.Interactive.AddForceAt(contactState.Radius, _RealElasticity * _TotalContraction * _Collider.Top);
     }
 }
예제 #2
0
 protected override void OnRestitutiveContact(ItemContactState contactState)
 {
     if (Scale.Y < _SpringContractedY ||
         !Vector3.Dot(_Collider.Top, contactState.Normal).TolerantEquals(1))
     {
         base.OnRestitutiveContact(contactState);
     }
 }
예제 #3
0
        public virtual Boolean React(ItemContactState contactState, Single deltaTime)
        {
            var reacted = false;

            if (contactState.TimesReacted == 0)
            {
                OnContact(contactState, deltaTime);
                reacted = true;
            }
            if (contactState.Weight > 0)
            {
                OnRestingContact(contactState);
                reacted = true;
            }
            if (contactState.Approach > 0)
            {
                OnRestitutiveContact(contactState);
                reacted = true;
            }
            return(reacted);
        }
예제 #4
0
 public override Boolean React(ItemContactState contactState, Single deltaTime)
 {
     return(false);
 }
예제 #5
0
 public override Boolean React(ItemContactState contactState, Single deltaTime)
 {
     return false;
 }
예제 #6
0
 protected virtual void OnRestingContact(ItemContactState contactState)
 {
     contactState.ApplyFriction();
 }
예제 #7
0
 protected virtual void OnRestitutiveContact(ItemContactState contactState)
 {
     contactState.ApplyRestitution();
 }
예제 #8
0
 protected virtual void OnContact(ItemContactState contactState, Single deltaTime)
 {
     contactState.ApplyMinimumTranslation();
 }
예제 #9
0
 protected override void OnRestitutiveContact(ItemContactState contactState)
 {
     if (Scale.Y < _SpringContractedY
     || !Vector3.Dot(_Collider.Top, contactState.Normal).TolerantEquals(1))
         base.OnRestitutiveContact(contactState);
 }
예제 #10
0
 public override void Animate(Single deltaTime)
 {
     if (_MaxDepthState != null)
     {
         var contraction = _MaxDepthState.ComputeApproachVelocity() * deltaTime;
         _Contract(contraction);
         _MaxDepthState = null;
         _MaxDepth = 0;
     }
     else if (!_IsContactOcurred && _TotalContraction > 0)
         _Contract(-_SpringElasticVelocityY * deltaTime * Scale.Y);
     _IsContactOcurred = false;
 }
예제 #11
0
 protected override void OnContact(ItemContactState contactState, Single deltaTime)
 {
     _IsContactOcurred = true;
     if (_MaxDepth < contactState.Contact.Depth)
     {
         _MaxDepth = contactState.Contact.Depth;
         _MaxDepthState = contactState;
     }
     if (Scale.Y < _SpringContractedY || _TotalContraction < 0
     || !Vector3.Dot(_Collider.Top, contactState.Normal).TolerantEquals(1))
     {
         if (_TotalContraction < 0)
         {
             _Contract(-_TotalContraction);
             if (_SoundEffect != null)
                 _SoundEffect.play(false);
             _TotalContraction = 0;
         }
         base.OnContact(contactState, deltaTime);
     }
     else contactState.Interactive.AddForceAt(contactState.Radius, _RealElasticity * _TotalContraction * _Collider.Top);
 }
예제 #12
0
 protected virtual void OnRestitutiveContact(ItemContactState contactState)
 {
     contactState.ApplyRestitution();
 }
예제 #13
0
 protected virtual void OnRestingContact(ItemContactState contactState)
 {
     contactState.ApplyFriction();
 }
예제 #14
0
 protected override void OnContact(ItemContactState contactState, Single deltaTime)
 {
     base.OnContact(contactState, deltaTime);
     _Dust.Start(contactState.Point, contactState.Approach, contactState.Normal);
 }
예제 #15
0
 protected virtual void OnContact(ItemContactState contactState, Single deltaTime)
 {
     contactState.ApplyMinimumTranslation();
 }
예제 #16
0
 protected override void OnContact(ItemContactState contactState, Single deltaTime)
 {
     base.OnContact(contactState, deltaTime);
     _Dust.Start(contactState.Point, contactState.Approach, contactState.Normal);
 }
예제 #17
0
 public virtual Boolean React(ItemContactState contactState, Single deltaTime)
 {
     var reacted = false;
     if (contactState.TimesReacted == 0)
     {
         OnContact(contactState, deltaTime);
         reacted = true;
     }
     if (contactState.Weight > 0)
     {
         OnRestingContact(contactState);
         reacted = true;
     }
     if (contactState.Approach > 0)
     {
         OnRestitutiveContact(contactState);
         reacted = true;
     }
     return reacted;
 }