private static PanelColliderSerializer PanelColliderToSerializer(SpringPanelCollider sourceCollider) { return(new PanelColliderSerializer { baseInfo = TransformToColliderSerializerBaseInfo(sourceCollider.transform, PanelColliderToken), width = sourceCollider.width, height = sourceCollider.height, linkedRenderer = GetComponentName(sourceCollider.linkedRenderer) }); }
private bool CheckForGroundCollision() { // Todo: this assumes a flat ground parallel to the xz plane var worldHeadPosition = transform.position; var worldTailPosition = currTipPos; var worldRadius = transform.TransformDirection(radius, 0f, 0f).magnitude; var worldLength = (currTipPos - worldHeadPosition).magnitude; var groundHeight = manager.groundHeight; worldHeadPosition.y -= groundHeight; worldTailPosition.y -= groundHeight; var collidingWithGround = SpringPanelCollider.CheckForCollisionWithAlignedPlaneAndReact( worldHeadPosition, worldLength, ref worldTailPosition, worldRadius, SpringPanelCollider.Axis.Y); if (collidingWithGround != CollisionStatus.NoCollision) { worldTailPosition.y += groundHeight; currTipPos = FixBoneLength(transform.position, worldTailPosition, 0.5f * springLength, springLength); // Todo: bounce, friction prevTipPos = currTipPos; } return(collidingWithGround != CollisionStatus.NoCollision); }