private void HandleCollision(Hashtable payload)
    {
        Collision collision = (Collision)payload.GetAs<Collision>("collision");
        foreach( ContactPoint contact in collision.contacts ){
          //Register impact
          Impact impact = new Impact();

          impact.thisGameObject   = gameObject;
          impact.otherGameObject  = collision.gameObject;
          impact.relativeVelocity = collision.relativeVelocity;
          impact.normal           = contact.normal;
          impact.point            = contact.point;
          impact.thisCollider     = contact.thisCollider;
          impact.otherCollider    = contact.otherCollider;

          impacts.Add(impact.otherGameObject, impact);
          impacts.Add(impact.otherCollider, impact);
          impacts.Add(collision.rigidbody, impact);

          //Update OnGround
          float oldDot = Vector3.Dot(groundNormal, Physics.gravity.normalized);
          float newDot = Vector3.Dot(contact.normal, Physics.gravity.normalized);
          if(newDot > oldDot)
        groundNormal = contact.normal;
        }
    }