reman3/Rayman_X/cpa/public/ITF/devvp3d.hpp

219 lines
7.7 KiB
C++
Raw Blame History

/*=========================================================================*/
/* DEVVp3D.hpp : Viewport 3D.*/
/* This is a part of the PCA project.*/
/**/
/* Version 1.0*/
/* Creation date 17/07/96*/
/* Revision date*/
/**/
/* (c) Ubi Studios 1996*/
/**/
/* DO NOT MODIFY THAT FILE. IF SOMETHING NEEDS TO BE CHANGE, PLEASE CONTACT*/
/* OLIVIER DIDELOT.*/
/*=========================================================================*/
#ifndef __DEVVP3D_HPP__
#define __DEVVP3D_HPP__
#include "DEVViewp.hpp"
/*#include "CPACam.hpp"*/
#include "itf/DEVDevic.hpp"
#include "lst.hpp"
#include "spo.h"
#ifdef ACTIVE_EDITOR
class CPA_SuperObject;
class CPA_BaseObject;
class CPA_CameraDLLBase;
class CPA_MainWorld;
#endif
/****************************************/
#ifndef CPA_EXPORT
#if defined(CPA_WANTS_IMPORT)
#define CPA_EXPORT __declspec(dllimport)
#elif defined(CPA_WANTS_EXPORT)
#define CPA_EXPORT __declspec(dllexport)
#else
#define CPA_EXPORT
#endif
#endif
/****************************************/
/*##########################################################################*/
/* Definition of mouse position in main view*/
typedef struct tdstMousePos_
{
CPoint stPos; /* 2D pos of editor*/
GLI_tdst2DVertex stPos2D; /* GLI 2D pos of editor*/
MTH3D_tdstVector stPos3D; /* GLI 3D pos of editor*/
} tdstMousePos;
/*##########################################################################*/
/*#################################################################################*/
/* Definition of mouse swap in main view*/
typedef enum eForceSwap
{
eNone,
eSwapRight,
eSwapLeft,
eSwapBoth
}
tdeForceSwap;
/*#################################################################################*/
/*##########################################################################*/
/* Definition of light for selection*/
typedef struct tdstSaveLight_
{
GLI_tdxHandleToLight hLight;
long lInitialState;
} tdstSaveLight;
/*##########################################################################*/
template <class DEV_ViewPort3D> class DEV_Timer;
class CPA_EXPORT DEV_ViewPort3D : public DEV_ViewPort
{
/* public functions, with and without editor*/
public:
DEV_ViewPort3D();
virtual ~DEV_ViewPort3D();
DECLARE_DYNCREATE(DEV_ViewPort3D)
void CreateViewPort(void *, GLD_tdhDevice);
GLI_tdxHandleToCamera GetEngineCamera ();
void m_vFakeMouseMove(CPoint oScreenMousePoint);
void m_vFakeMouseLButtonDown(CPoint oScreenMousePoint);
BOOL m_bWasInSecondScreen;
BOOL m_bIsVerticalSwap;
/* private member, with and without editor*/
private:
GLI_tdstSpecificAttributesFor3D m_Attributes3D;
UINT m_uiLastMouseState;
#ifdef ACTIVE_EDITOR
private:
CPA_SuperObject *m_p_oCameraSO;
CPA_BaseObject *m_p_oCamera;
CPA_CameraDLLBase *m_p_oCameraInterface;
CPoint m_oLastCursorScreenPos;
MTH3D_tdstVector m_stMousePos; /* The 3D-coordinates of the mouse*/
MTH3D_tdstVector m_stInitMousePos; /* The 3D-coordinates of the initial position of the mouse ( when we start to move the object )*/
public:
tdstSaveLight m_a_tdxhArrayOfLights[C_lMaxLightInViewport];
long m_lCurrentLights;
CPA_SuperObject *GetCameraSO (void) { return m_p_oCameraSO; }
CPA_BaseObject *GetCamera (void) { return m_p_oCamera; }
CPA_CameraDLLBase *GetCameraInterface (void) { return m_p_oCameraInterface; }
CPA_SuperObject *ChangeCamera (CPA_SuperObject *p_oCamera, BOOL bWithPrevCam = TRUE);
void fn_vInitLightsInViewport (GLD_tdxHandleToViewportAttributes _hVpt, GLI_tdxHandleToLight _hLight, CPA_MainWorld *pMainWorld);
void DrawObject (GLI_tdxHandleToLight hLight, HIE_tdxHandleToSuperObject hObject);
void DrawEditorObject(GLI_tdxHandleToLight hLight, CPA_SuperObject *pRoot);
void DetectMouseSwap (BOOL bDrawCursor = FALSE, GLD_tdstViewportAttributes *p_stViewportAttr = NULL);
void fn_vUpdateStatusBarMessage (void);
void SetSelectedInstance (CString csName) { m_csSelectedInstance = csName; }
void SetPickedInstance (CString csName) { m_csPickedInstance = csName; }
void SetPosition (MTH3D_tdstVector *pNewPos);
void SetMoveVector (MTH3D_tdstVector *pNewMove);
void AddtoMoveVector (MTH3D_tdstVector *pNewMove);
void SetDistanceVector (MTH3D_tdstVector *pDist);
void SetDistanceToCamera (MTH3D_tdstVector *pDist);
/*fonctions <20> revoire FBFFBF*/
/* void SetPlaneForMouseMove (MTH3D_tdstVector * p_stX_Axe , MTH3D_tdstVector * p_stY_Axe);*/
/*void GetPlaneForMouseMove (MTH3D_tdstVector * p_stX_Axe , MTH3D_tdstVector * p_stY_Axe);*/
void Convert3dTo2d(GLI_tdst2DVertex *p_stDest, MTH3D_tdstVector *p_stSource);
void InitMouseMove (MTH3D_tdstVector *stMousePos3D, GLI_tdst2DVertex* stMousePos2D);
void DoneMouseMove (void);
/*CPA2 Gabi Dumitrascu 98/06/26*/
BOOL IsCursorInFirstScreen ();
void SetCursorInFirstScreen ();
void SetCursorInSecondScreen ();
BOOL IsCursorInDeadScreen ();
void mfn_vChangeCursorFrom1To2 (CPoint &rptMouse, tdeForceSwap eSwapMode, BOOL bVerticalSwap = FALSE);
void mfn_vChangeCursorFrom2To1 (CPoint &rptMouse, tdeForceSwap eSwapMode, BOOL bVerticalSwap = FALSE);
/*End CPA2 Gabi Dumitrascu 98/06/26*/
private:
CString m_csMessage;
CString m_csSelectedInstance;
CString m_csPickedInstance;
MTH3D_tdstVector m_stPosition;
MTH3D_tdstVector m_stMoveVector;
MTH3D_tdstVector m_stCameraDistance;
MTH3D_tdstVector m_stDistance;
CString fn_csGetSelectedInstanceName( ACP_tdxIndex, HIE_tdstPickInfo*, tdstMousePos* );
/* Function used by OnMouseMove to compute mouse move into the selected plane*/
/* Input : p_stOriginalMouseMove, output : p_stConstrainedMouseMove*/
BOOL ComputeMouseMoveIntoPlane(MTH3D_tdstVector *p_stConstrainedMouseMove, MTH3D_tdstVector *p_stOriginalMouseMove);
/*FBFFBF to remove when we have rush voodoo cards*/
public:
BOOL m_bObjectIsMoving;
BOOL m_bBeginMove;
MTH3D_tdstVector m_stCamToEndingPos;
void ClientToVoodooFullScreen(CPoint &point);
void ClientToVoodoo(CPoint &point);
void VoodooToClient(CPoint &point);
void ClientToVoodoo(GLI_tdst2DVertex & point);
void PointToMousePos(CPoint point, tdstMousePos* pPos);
#endif /* ACTIVE_EDITOR*/
protected:
/*{{AFX_MSG(DEV_ViewPort3D)*/
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnDestroy();
#ifdef ACTIVE_EDITOR
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg void OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); /* CPA2 Corneliu Babiuc (Alt Key) 14-05-98 */
afx_msg void OnSysKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags); /* CPA2 Corneliu Babiuc (Alt Key) 14-05-98 */
afx_msg void OnSetFocus(CWnd* pOldWnd);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
afx_msg void OnRButtonUp(UINT nFlags, CPoint point); /* CPA_Ed_1 FS*/
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg LONG OnDragDropEnd(WPARAM wparam, LPARAM lparam);
afx_msg LONG OnDragDropLooseFocus(WPARAM wparam, LPARAM lparam);
afx_msg LONG OnDragDropGainFocus(WPARAM wparam, LPARAM lparam);
afx_msg LONG OnDragDropMove(WPARAM wparam, LPARAM lparam);
afx_msg void OnTimer( UINT nIDEvent );
/*CPA2 Gabi Dumitrascu 98/07/13*/
afx_msg void OnNcMouseMove (UINT nHitTest, CPoint point);
afx_msg UINT OnNcHitTest (CPoint point);
afx_msg void OnKillFocus(CWnd* pNewWnd);
/*End CPA2 Gabi Dumitrascu 98/07/13*/
#endif /* ACTIVE_EDITOR*/
/*}}AFX_MSG*/
DECLARE_MESSAGE_MAP()
};
/*///////////////////////////////////////////////////////////////////////////*/
#endif /* __DEVVP3D_HPP__*/