/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Function Name: CheckStaticCollisions()
// Purpose: Check collisions with all static objects
// Original Author: Ethan Pendergraft
// Creation Date: 6/13/2012
// Last Modification By: 
// Last Modification Date: 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CComponent_CrateCollision::CheckStaticCollisions( CComponent_Collision* pCurCollision, CCollisionVolume* pCurVolume, float fDT )
{
	Box* BoxCollisionVolume = (Box*)m_pParent->GetCollidableObject();
	vec2f Contact;
	vec2f Direction;

	switch( pCurVolume->GetVolumeType() )
	{
	case VMT_AABB:
		{
			// handle crate collision
			// with world AABB
			if ( BoxCollisionVolume->BoxToAABBWorld( *(AABB*)pCurVolume, Contact, Direction ) )
			{
				// Create an offset vector.
				vec3f MoveDirection = vec3f (Direction.x, Direction.y, 0.0f);

				//Save the last offset for use elsewhere.
				m_fLastOffset = vec3f( Direction.x, Direction.y, 0.0f );

				// If it has a physics Box.
				//if(!m_bPlayed && !m_bCollideSoundCap)
				//{
				//	if(m_nCollisionCount < 5)
				//	{
				//		m_pSoundComponent->PlaySound(SFX_CRATE_CRASH);
				//		m_bPlayed = true;
				//		++m_nCollisionCount;
				//	}
				//	else
				//	{
				//		m_bCollideSoundCap = true;
				//	}
				//}

				////////// FRICTION
				vec3f fCross;
				cross_product( fCross, MoveDirection, vec3f( 0.0f, 0.0f, 1.0f ) );
				float3 fProj = prjPoint2Line( m_pPhysicsBox->m_pPoints[0]->m_CurrPos, m_pPhysicsBox->m_pPoints[0]->m_PrevPos, m_pPhysicsBox->m_pPoints[0]->m_PrevPos + fCross );
				float3 fPrevPush = fProj - m_pPhysicsBox->m_pPoints[0]->m_PrevPos;
				fPrevPush *= -0.1f;
				//////////

				vec3f NormalizedDirection = vec3f (Direction.x, Direction.y, 0.0f).normalize();
				float fDotProductUp = dot_product( NormalizedDirection, vec3f( 0.0f, 1.0f, 0.0f ) );
				float fDotProductSide = dot_product( NormalizedDirection, vec3f( 1.0f, 0.0f, 0.0f ) );
				if( fDotProductUp > 0.5f )
				{
					m_bCollidingGround = true;
				}
				if( abs( fDotProductSide ) > 0.5f )
				{
					fPrevPush = vec3f( 0.0f, 0.0f, 0.0f );
				}
				
				CleanOffset( vec2f( MoveDirection.x, MoveDirection.y ) );
				CleanForce( vec2f( fPrevPush.x, fPrevPush.y ) + vec2f( MoveDirection.x, MoveDirection.y ) * 0.1f );
				m_bCol = true;
			}
			break;
		}
	default:
		break;
	}
}