diff -r 000000000000 -r 2f259fa3e83a uifw/AvKon/aknphysics/inc/aknphysicsengine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uifw/AvKon/aknphysics/inc/aknphysicsengine.h Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,301 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: AknPhysics engine +* +*/ + + +#ifndef C_AKNPHYSICSENGINE_H +#define C_AKNPHYSICSENGINE_H + + +#include +#include + +class CAknPhysics; +class RAlfDirectClient; + +/** + * Physics engine + * + * @lib aknphysics + * @since S60 v5.0 + */ +NONSHARABLE_CLASS( CAknPhysicsEngine ) : public CBase + { + +public: + + /** + * Collision definitions. + */ + enum TAknPhysicsCollision + { + EAknPhysicsNoCollision, + EAknPhysicsBottomCollision, + EAknPhysicsTopCollision + }; + + /** + * Two-phased constructor. + */ + static CAknPhysicsEngine* NewL( CAknPhysics* aPhysics ); + + /** + * Two-phased constructor. + */ + static CAknPhysicsEngine* NewLC( CAknPhysics* aPhysics ); + + /** + * Destructor. + */ + virtual ~CAknPhysicsEngine(); + + /** + * Return ETrue if ODE world exists. + * + * @return ETrue if ODE world exists. + */ + TBool WorldExists() const; + + /** + * Creates ODE world. + * + * @param aGravity World gravity factor. + */ + void CreateWorld( const TInt& aGravity ); + + /** + * Creates ODE planes. + * + * @param aIh + * @param aX + * @param aY + * @param aR + */ + void CreatePlanes( const TInt64& aIh, + const TInt64& aX, + const TInt64& aY, + const TInt64& aR ); + + /** + * Creates ODE view body. + * + * @param aWidth View width. + * @param aHeight View height. + * @param aMass View mass. + */ + void CreateViewBody( const TInt64& aWidth, + const TInt64& aHeight, + const TInt64& aMass ); + + /** + * Set view body position. + * + * @param aPosition View body position. + */ + void SetViewBodyPosition( const TPoint& aPosition ); + + /** + * Get view body position. + * + * @param aPosition New view body position. + */ + void GetViewBodyPosition( TPoint& aPosition ); + + /** + * Resets view body force and velocity. + */ + void ResetViewBodyForceAndVelocity(); + + /** + * Enables view body. + */ + void EnableViewBody(); + + /** + * Returns ETrue if view body is enabled. + * + * @return ETrue if view body is enabled. + */ + TBool IsViewBodyEnabled() const; + + /** + * Applies force factor. + * + * @param aDrag Dragging distance. + * @param aMoveTime Dragging move time. + */ + void ApplyDragForce( const TPoint& aDrag, + const TInt& aMoveTime ); + + /** + * Returns collision state. + * + * @return Collision state. + */ + const TAknPhysicsCollision& CollisionState(); + + /** + * Resets collision state. + */ + void ResetCollisionState(); + + /** + * Takes physics step. + */ + void TakePhysicsStep(); + + /** + * Deletes physics. + */ + void DeletePhysics(); + + /** + * Sets friction. + * + * @param aFriction New friction value. + */ + void SetFriction( TReal aFriction ); + + /** + * Resets friction. + */ + void ResetFriction(); + + /** + * Starts FPS logging. + */ + void StartFpsLogging(); + + /** + * Stops FPS logging. + */ + void StopFpsLogging(); + +private: + + /** + * C++ constructor. + */ + CAknPhysicsEngine( CAknPhysics* aPhysics ); + + /** + * Symbian second-phase constructor. + */ + void ConstructL(); + + /** + * Physics collision step callback function. + * + * @param aData Pointer to CAknPhysicsEngine instance. + * @param o0 + * @param o1 + */ + static void CallbackFunc( void* aData, dGeomID o0, dGeomID o1 ); + + /** + * Physics collision handling function. + * + * @param o0 + * @param o1 + */ + void HandleCollisionBetween( dGeomID aObject1, dGeomID aObject2 ); + +private: // data + + /** + * ODE world. + */ + dWorldID iWorldId; + + /** + * ODE collision space. + */ + dSpaceID iSpace; + + /** + * ODE collision contact group. + */ + dJointGroupID iContactGroup; + + /** + * ODE top plane. + */ + dGeomID iPlaneTop; + + /** + * ODE bottom plane. + */ + dGeomID iPlaneBottom; + + /** + * ODE left plane. + */ + dGeomID iPlaneLeft; + + /** + * ODE right plane. + */ + dGeomID iPlaneRight; + + /** + * ODE friction plane. + */ + dGeomID iPlaneFriction; + + /** + * ODE view box geom. + */ + dGeomID iViewBox; + + /** + * ODE view box body. + */ + dBodyID iViewBody; + + /** + * Collision state. + */ + TAknPhysicsCollision iCollision; + + /** + * Friction value. + */ + TReal iFriction; + + /** + * Pointer to CAknPhysics. + * Not own. + */ + CAknPhysics* iPhysics; + + /** + * View position. + */ + TPoint iViewPosition; + + /** + * Client to Alf, used for FPS logging. + * Own. + */ + RAlfDirectClient* iAlfClient; + + /** + * Using application's UID. Used for FPS logging. + */ + TUid iLogUid; + }; + +#endif // C_AKNPHYSICSENGINE_H