//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
// $NoKeywords: $
//=============================================================================//

#ifndef PHYSICS_FLUID_H
#define PHYSICS_FLUID_H
#pragma once

#include "vphysics_interface.h"

class IVP_Compact_Surface;
class IVP_Environment;
class IVP_Listener_Phantom;
class CBuoyancyAttacher;
class IVP_Liquid_Surface_Descriptor;
class CPhysicsObject;
class CPhysicsObject;

class CPhysicsFluidController : public IPhysicsFluidController
{
public:
	CPhysicsFluidController( CBuoyancyAttacher *pBuoy, IVP_Liquid_Surface_Descriptor *pLiquid, CPhysicsObject *pObject, int nContents );
	~CPhysicsFluidController( void );

	virtual void SetGameData( void *pGameData );
	virtual void *GetGameData( void ) const;
	virtual void GetSurfacePlane( Vector *pNormal, float *pDist ) const;
	virtual float GetDensity() const;
	virtual void WakeAllSleepingObjects(); 
	virtual int	GetContents() const;

	class IVP_Real_Object *GetIVPObject();
	const class IVP_Real_Object *GetIVPObject() const;

private:
	CBuoyancyAttacher				*m_pBuoyancy;
	IVP_Liquid_Surface_Descriptor	*m_pLiquidSurface;
	CPhysicsObject					*m_pObject;
	int								m_nContents;
	void							*m_pGameData;
};

extern CPhysicsFluidController *CreateFluidController( IVP_Environment *pEnvironment, CPhysicsObject *pFluidObject, fluidparams_t *pParams );


#endif // PHYSICS_FLUID_H