/* Copyright (c) 2002-2012 Croteam Ltd. This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ // WorldEditor.h : main header file for the WORLDEDITOR application // #ifndef WORLDEDITOR_H #define WORLDEDITOR_H 1 #ifndef __AFXWIN_H__ #error include 'stdafx.h' before including this file for PCH #endif #include "resource.h" // main symbols #include "Viewers.h" #define CHILD_CONFIGURATION_VER "V012" #define VIEW_PREFERENCES_VER "V012" #define VIEW_PREFERENCES_CT 10 #define CHILD_CONFIGURATIONS_CT 10 extern FLOAT _fLastMipBrushingOptionUsed; extern INDEX wed_iMaxFPSActive; extern struct GameGUI_interface *_pGameGUI; extern UINT _uiMessengerMsg; extern UINT _uiMessengerForcePopup; extern FLOAT _fFlyModeSpeedMultiplier; class CWorldEditorDoc; class CWorldEditorView; class CVirtualTreeNode; extern CEntity *GetTerrainEntity(void); extern CTerrain *GetTerrain(void); extern CTerrainLayer *GetLayer(void); extern void SelectLayer(INDEX iLayer); extern INDEX GetLayerIndex(void); extern CTerrainLayer *GetLayer(INDEX iLayer); #define ALLOW_TERRAINS 1 ///////////////////////////////////////////////////////////////////////////// // CWorldEditorApp: // See WorldEditor.cpp for the implementation of this class // enum PrimitiveType { PT_NONE =0, PT_CONUS, PT_TORUS, PT_STAIRCASES, PT_SPHERE, PT_TERRAIN, }; enum TriangularisationType { TT_NONE=0, TT_CENTER_VERTEX, TT_FROM_VTX00, TT_FROM_VTX01, TT_FROM_VTX02, TT_FROM_VTX03, TT_FROM_VTX04, TT_FROM_VTX05, TT_FROM_VTX06, TT_FROM_VTX07, TT_FROM_VTX08, TT_FROM_VTX09, TT_FROM_VTX10, TT_FROM_VTX11, TT_FROM_VTX12, TT_FROM_VTX13, TT_FROM_VTX14, TT_FROM_VTX15, }; #define VALUES_FOR_PRIMITIVE_VERSION2 "VFP2" #define VALUES_FOR_PRIMITIVE_VERSION3 "VFP3" // values for primitive class CValuesForPrimitive { public: enum CSGType vfp_csgtCSGOperation; // global parameters enum PrimitiveType vfp_ptPrimitiveType; CStaticArray vfp_avVerticesOnBaseOfPrimitive; CObject3D vfp_o3dPrimitive; CPlacement3D vfp_plPrimitive; enum TriangularisationType vfp_ttTriangularisationType; BOOL vfp_bClosed; BOOL vfp_bDummy; BOOL vfp_bAutoCreateMipBrushes; COLOR vfp_colSectorsColor; COLOR vfp_colPolygonsColor; // parameters for *Conus* primitives FLOAT vfp_fXMin; FLOAT vfp_fXMax; FLOAT vfp_fYMin; FLOAT vfp_fYMax; FLOAT vfp_fZMin; FLOAT vfp_fZMax; FLOAT vfp_fShearX; FLOAT vfp_fShearZ; FLOAT vfp_fStretchX; FLOAT vfp_fStretchY; BOOL vfp_bLinearStaircases; BOOL vfp_bOuter; INDEX vfp_iSlicesIn360; INDEX vfp_iNoOfSlices; FLOAT vfp_fRadius; INDEX vfp_iMeridians; INDEX vfp_iParalels; INDEX vfp_iSlicesPerWidth; INDEX vfp_iSlicesPerHeight; INDEX vfp_iTopShape; INDEX vfp_iBottomShape; FLOAT vfp_fAmplitude; FLOAT vfp_fMipStart; FLOAT vfp_fMipStep; CTFileName vfp_fnDisplacement; CValuesForPrimitive(); inline CValuesForPrimitive (CValuesForPrimitive &vfpToCopy) { vfp_avVerticesOnBaseOfPrimitive = vfpToCopy.vfp_avVerticesOnBaseOfPrimitive; vfp_ptPrimitiveType = vfpToCopy.vfp_ptPrimitiveType; vfp_o3dPrimitive = vfpToCopy.vfp_o3dPrimitive; vfp_plPrimitive = vfpToCopy.vfp_plPrimitive; vfp_ttTriangularisationType = vfpToCopy.vfp_ttTriangularisationType; vfp_bDummy = vfpToCopy.vfp_bDummy; vfp_ptPrimitiveType = vfpToCopy.vfp_ptPrimitiveType; vfp_bAutoCreateMipBrushes = vfpToCopy.vfp_bAutoCreateMipBrushes; vfp_colSectorsColor = vfpToCopy.vfp_colSectorsColor; vfp_colPolygonsColor = vfpToCopy.vfp_colPolygonsColor; vfp_fXMin = vfpToCopy.vfp_fXMin; vfp_fXMax = vfpToCopy.vfp_fXMax; vfp_fYMin = vfpToCopy.vfp_fYMin; vfp_fYMax = vfpToCopy.vfp_fYMax; vfp_fZMin = vfpToCopy.vfp_fZMin; vfp_fZMax = vfpToCopy.vfp_fZMax; vfp_fShearX = vfpToCopy.vfp_fShearX; vfp_fShearZ = vfpToCopy.vfp_fShearZ; vfp_fStretchX = vfpToCopy.vfp_fStretchX; vfp_fStretchY = vfpToCopy.vfp_fStretchY; vfp_bClosed = vfpToCopy.vfp_bClosed; vfp_bLinearStaircases = vfpToCopy.vfp_bLinearStaircases; vfp_bOuter = vfpToCopy.vfp_bOuter; vfp_iSlicesIn360 = vfpToCopy.vfp_iSlicesIn360; vfp_iNoOfSlices = vfpToCopy.vfp_iNoOfSlices; vfp_fRadius = vfpToCopy.vfp_fRadius; vfp_iMeridians = vfpToCopy.vfp_iMeridians; vfp_iParalels = vfpToCopy.vfp_iParalels; vfp_iSlicesPerWidth = vfpToCopy.vfp_iSlicesPerWidth; vfp_iSlicesPerHeight = vfpToCopy.vfp_iSlicesPerHeight; vfp_iTopShape = vfpToCopy.vfp_iTopShape; vfp_iBottomShape = vfpToCopy.vfp_iBottomShape; vfp_fAmplitude = vfpToCopy.vfp_fAmplitude; vfp_fnDisplacement = vfpToCopy.vfp_fnDisplacement; vfp_fMipStart = vfpToCopy.vfp_fMipStart; vfp_fMipStep = vfpToCopy.vfp_fMipStep; }; inline BOOL operator==(const CValuesForPrimitive &vfpToCompare); inline CValuesForPrimitive operator+(const CValuesForPrimitive &vfpToAdd); inline CValuesForPrimitive &operator+=(const CValuesForPrimitive &vfpToAdd); inline CValuesForPrimitive operator-(const CValuesForPrimitive &vfpToSub); inline CValuesForPrimitive &operator-=(const CValuesForPrimitive &vfpToSub); void CalculatePrimitiveBase(void); inline void CorrectInvalidValues(void); void ReadFromIniFile(CTString strPrimitiveType); void WriteToIniFile(CTString strPrimitiveType); void Read_t(CTStream &strmFile); void Write_t(CTStream &strmFile); }; // for linking of primitive into primitive history list class CPrimitiveInHistoryBuffer { public: CListNode pihb_lnNode; CValuesForPrimitive pihb_vfpPrimitive; }; // Class used for holding global modeler's preferences class CAppPrefs { public: ~CAppPrefs(); BOOL ap_CopyExistingWindowPrefs; BOOL ap_AutoMaximizeWindow; BOOL ap_SetDefaultColors; BOOL ap_AutomaticInfo; BOOL ap_BinaryGrid; BOOL ap_UpdateAllways; BOOL ap_bSaveUndoForDelete; BOOL ap_bAutoColorize; BOOL ap_bShowAllOnOpen; BOOL ap_bHideShadowsOnOpen; BOOL ap_bAutoUpdateDisplaceMap; INDEX ap_iUndoLevels; INDEX ap_iStartupWindowSetup; COLOR ap_DefaultInkColor; COLOR ap_DefaultPaperColor; COLOR ap_DefaultSelectionColor; COLOR ap_DefaultGridColor; CTString ap_strSourceSafeProject; FLOAT ap_fDefaultFlyModeSpeed; INDEX ap_iTerrainSelectionVisible; INDEX ap_iTerrainSelectionHidden; INDEX ap_iMemoryForTerrainUndo; BOOL ap_bAutoUpdateTerrainDistribution; void ReadFromIniFile(); void WriteToIniFile(); }; // Class for holding view preferences class CViewPrefs { public: // default constructor CViewPrefs(void); // set default values void SetDefaultValues(void); void ClearInvalidConfigPointers(void); // world's rendering preferences CWorldRenderPrefs m_wrpWorldRenderPrefs; // model's rendering preferences CModelRenderPrefs m_mrpModelRenderPrefs; // automatic rendering range BOOL m_bAutoRenderingRange; // rendering range if not automatic FLOAT m_fRenderingRange; // color for background paper (if not picture) COLOR m_PaperColor; // selection color COLOR m_SelectionColor; // if this view contains measurement tape BOOL m_bMeasurementTape; // grid color COLOR m_GridColor; // reserved for background texture char m_achrBcgPicture[256]; }; // Class for holding view configurations class CChildConfiguration { public: // set default values void SetDefaultValues(void); void ClearInvalidConfigPointers(void); // numbers of horizontal splitters INDEX m_iHorizontalSplitters; // numbers of vertical splitters INDEX m_iVerticalSplitters; // percentage of left splitter window FLOAT m_fPercentageLeft; // percentage of top splitter window FLOAT m_fPercentageTop; // grid on/off flag BOOL m_bGridOn; // view prefs CViewPrefs m_vpViewPrefs[4]; // type of projection enum CSlaveViewer::ProjectionType m_ptProjectionType[ 4]; }; enum CopyType { CT_NONE = 0, CT_POLYGON_PROPERTIES, CT_POLYGON_PROPERTIES_ALTERNATIVE, CT_ENTITY, CT_SECTOR, CT_WORLD, }; typedef void TTCFunction_type(void *pView, char *pToolTipText); class CCustomToolTip { public: HWND cct_hwndCaller; TTCFunction_type *cct_pCallback; void *cct_pThis; void ManualUpdate(void); void ManualOn( PIX pixManualX, PIX pixManualY, TTCFunction_type *pCallBack, void *pThis); void ManualOff( void); void MouseMoveNotify( HWND hwndCaller, ULONG ulTime, TTCFunction_type *pCallBack, void *pThis); }; class CWorldEditorApp : public CWinApp { private: CWorldEditorDoc *m_pLastActivatedDocument; public: // Atributes FLOAT3D m_vLastTerrainHit; CEntity *m_penLastTerrainHit; FLOAT m_fCurrentTerrainBrush; FLOAT m_fTerrainBrushPressure; FLOAT m_iTerrainEditMode; FLOAT m_iTerrainBrushMode; FLOAT m_fTerrainBrushPressureEnum; CTFileName m_fnDistributionNoiseTexture; CTFileName m_fnContinousNoiseTexture; INDEX m_iFBMOctaves; FLOAT m_fFBMHighFrequencyStep; FLOAT m_fFBMStepFactor; FLOAT m_fFBMMaxAmplitude; FLOAT m_fFBMfAmplitudeDecreaser; BOOL m_bFBMAddNegativeValues; BOOL m_bFBMRandomOffset; UWORD m_uwEditAltitude; FLOAT m_fPaintPower; FLOAT m_fSmoothPower; INDEX m_iFilter; FLOAT m_fFilterPower; FLOAT m_fPosterizeStep; FLOAT m_fNoiseAltitude; INDEX m_iRNDSubdivideAndDisplaceItterations; INDEX m_iTerrainGenerationMethod; INDEX m_iApi; CCustomToolTip m_cttToolTips; int m_iLastClassSortAplied; BOOL m_bInvertClassSort; FLOAT m_tmStartStatusLineInfo; CPlacement3D m_plClipboard1; CPlacement3D m_plClipboard2; CBrushPolygon *m_pbpoClipboardPolygon; CBrushPolygon *m_pbpoPolygonWithDeafultValues; CTFileName m_fnClassForDropMarker; // flag is set while changing display mode BOOL m_bChangeDisplayModeInProgress; // flag is set while adding/removing property pages BOOL m_bDisableDataExchange; // curently opened virtual directory path CTString m_strOpenedVTDirectory; // sector ambient color is stored here on copy paste ambient COLOR m_colSectorAmbientClipboard; CMappingDefinition m_mdMapping; CMappingDefinition m_mdMapping1; CMappingDefinition m_mdMapping2; CMappingDefinition m_mdMapping3; FLOATplane3D m_plMapping; FLOATplane3D m_plMapping1; FLOATplane3D m_plMapping2; FLOATplane3D m_plMapping3; FLOAT m_fTerrainSwitchStart; FLOAT m_fTerrainSwitchStep; // last copy operation type enum CopyType m_ctLastCopyType; CTString m_strCSGAndShadowStatistics; // if should display status info BOOL m_bShowStatusInfo; // visivility for texture layers BOOL m_bTexture1; BOOL m_bTexture2; BOOL m_bTexture3; // if CSG report is enabled BOOL m_bCSGReportEnabled; // false if undo remembering is disabled BOOL m_bRememberUndo; // if we are currently in measure mode BOOL m_bMeasureModeOn; // if we are currently in cut mode BOOL m_bCutModeOn; // if WED started for the fitst time BOOL m_bFirstTimeStarted; // show tip of the day on startup BOOL m_bShowTipOfTheDay; INDEX m_iCurrentTipOfTheDay; // rendering preferences for single view CViewPrefs m_vpViewPrefs[ VIEW_PREFERENCES_CT+1]; // child-view configurations remembered // pre-last buffer is for full screen // last buffer is for maximizing view CChildConfiguration m_ccChildConfigurations[ CHILD_CONFIGURATIONS_CT+2]; // object to hold our document template CMultiDocTemplate* m_pDocTemplate; // Only instance of CAppPrefs holding preferences class CAppPrefs m_Preferences; // List head for holding available modes/resolutions CListHead m_AvailableModes; // error texture CTextureData *m_ptdError; CTextureObject *m_ptoError; // icons tray texture CTextureData *m_ptdIconsTray; // default texture for primitives CTextureData *m_ptdActiveTexture; // view icons texture CTextureData *m_pViewIconsTD; // window background texture CTFileName m_fnWinBcgTexture; // application font CFontData *m_pfntSystem; // application's windows font CFont m_Font; CFont m_FixedFont; // for holding entity selection marker model CTextureData *m_ptdEntityMarkerTexture; CModelData *m_pEntityMarkerModelData; CModelObject *m_pEntityMarkerModelObject; // for holding portal selection marker model CTextureData *m_ptdPortalMarkerTexture; CModelData *m_pPortalMarkerModelData; CModelObject *m_pPortalMarkerModelObject; // for holding empty brush model CTextureData *m_ptdEmptyBrushTexture; CModelData *m_pEmptyBrushModelData; CModelObject *m_pEmptyBrushModelObject; // for holding range sphere model CTextureData *m_ptdRangeSphereTexture; CModelData *m_pRangeSphereModelData; CModelObject *m_pRangeSphereModelObject; // for holding angle3D model CTextureData *m_ptdAngle3DTexture; CModelData *m_pAngle3DModelData; CModelObject *m_pAngle3DModelObject; // for holding bounding box model CTextureData *m_ptdBoundingBoxTexture; CModelData *m_pBoundingBoxModelData; CModelObject *m_pBoundingBoxModelObject; // variables for full screen display mode CDisplayMode m_dmFullScreen; GfxAPIType m_gatFullScreen; // index of color last used for auto primitive colorization INDEX m_iLastAutoColorizeColor; // flag telling function GetActiveDocument() to return NULL (during document chg situation) BOOL m_bDocumentChangeOn; // flag telling which type of grid is curently on BOOL m_bDecadicGrid; // current values for primitive CValuesForPrimitive m_vfpCurrent; // and values for last primitive (for wizard) CValuesForPrimitive m_vfpLast; // and values for pre last primitive (for wizard) CValuesForPrimitive m_vfpPreLast; // and delta values for last primitive (for wizard) CValuesForPrimitive m_vfpDelta; // default values for conus primitives CValuesForPrimitive m_vfpConus; // default values for torus primitives CValuesForPrimitive m_vfpTorus; // default values for staircase primitives CValuesForPrimitive m_vfpStaircases; // default values for sphere primitives CValuesForPrimitive m_vfpSphere; // default values for terrain primitives CValuesForPrimitive m_vfpTerrain; // for linking primitives CListHead m_lhPrimitiveHistory; // obtain currently active view CWorldEditorDoc *GetActiveDocument(void); // obtain currently active view CWorldEditorView *GetActiveView(void); CChangeableRT m_ctTerrainPage; CChangeableRT m_ctTerrainPageCanvas; // Operations CWorldEditorApp(); ~CWorldEditorApp(); void MyParseCommandLine(void); BOOL SubInitInstance(void); void OnFileNew(); CEntity *CreateWorldBaseEntity(CWorld &woWorld, BOOL bZoning, CPlacement3D pl=CPlacement3D(FLOAT3D(0,0,0),ANGLE3D(0,0,0))); BOOL Add3DObject(CWorldEditorDoc *pDoc, CEntity *penwb, CTFileName fnFile, BOOL bAdd); INDEX Insert3DObjects(CWorldEditorDoc *pDoc); CDisplayMode *GetStartModePtr( CTString strStartMode); CWorldEditorDoc *GetLastActivatedDocument(void); void ActivateDocument(CWorldEditorDoc *pDocToActivate); void RefreshAllDocuments( void); // load world and model rendering preferences BOOL LoadRenderingPreferences(void); // save world and model rendering preferences void SaveRenderingPreferences(void); // load child configurations BOOL LoadChildConfigurations(void); // save child configurations void SaveChildConfigurations(void); // clear possibly invalid pointers in view configurations void ClearInvalidConfigPointers(void); // reads ini data that can be loaded many times void ReadFromIniFile(void); // writes ini data that can be saved many times void WriteToIniFile(void); // store/restore application ini variables void WriteToIniFileOnEnd(void); void ReadFromIniFileOnInit(void); // store/restore default polygon properties void WriteDefaultPolygonValues(void); void ReadDefaultPolygonValues(void); // sets new active texture for primitive's default material void SetNewActiveTexture( CTFileName fnFullTexName); // tries to find given item in browser void FindItemInBrowser( CTFileName fnItemFileName); // texturize selection void TexturizeSelection(void); // gets curently active document ptr CWorldEditorDoc *GetDocument(); // gets name for given virtual tree node CTString GetNameForVirtualTreeNode( CVirtualTreeNode *pvtnNode); void DisplayHelp(const CTFileName &fnHlk, UINT uCommand, DWORD dwData); void ApplyTerrainEditing(CCastRay &crRayHit); // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CWorldEditorApp) public: virtual BOOL InitInstance(); virtual BOOL SaveAllModified(); virtual int ExitInstance(); virtual BOOL OnIdle(LONG lCount); virtual int Run(); virtual BOOL PreTranslateMessage(MSG* pMsg); virtual void WinHelp(DWORD dwData, UINT nCmd = HELP_CONTEXT); //}}AFX_VIRTUAL // Implementation //{{AFX_MSG(CWorldEditorApp) afx_msg void OnAppAbout(); afx_msg void OnFilePreferences(); afx_msg void OnFileOpen(); afx_msg void OnImport3DObject(); afx_msg void OnDecadicGrid(); afx_msg void OnUpdateDecadicGrid(CCmdUI* pCmdUI); afx_msg void OnConvertWorlds(); afx_msg void OnSetAsDefault(); afx_msg void OnHelpShowTipOfTheDay(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; ///////////////////////////////////////////////////////////////////////////// // Inline functions inline BOOL CValuesForPrimitive::operator==(const CValuesForPrimitive &vfpToCompare) { return ( (vfp_avVerticesOnBaseOfPrimitive.Count() == vfpToCompare.vfp_avVerticesOnBaseOfPrimitive.Count() ) && (vfp_ptPrimitiveType == vfpToCompare.vfp_ptPrimitiveType) && (vfp_plPrimitive == vfpToCompare.vfp_plPrimitive) && (vfp_ttTriangularisationType == vfpToCompare.vfp_ttTriangularisationType) && (vfp_bDummy == vfpToCompare.vfp_bDummy) && (vfp_bAutoCreateMipBrushes == vfpToCompare.vfp_bAutoCreateMipBrushes) && (vfp_colSectorsColor == vfpToCompare.vfp_colSectorsColor) && (vfp_colPolygonsColor == vfpToCompare.vfp_colPolygonsColor) && (vfp_fXMin == vfpToCompare.vfp_fXMin) && (vfp_fXMax == vfpToCompare.vfp_fXMax) && (vfp_fYMin == vfpToCompare.vfp_fYMin) && (vfp_fYMax == vfpToCompare.vfp_fYMax) && (vfp_fZMin == vfpToCompare.vfp_fZMin) && (vfp_fZMax == vfpToCompare.vfp_fZMax) && (vfp_fShearX == vfpToCompare.vfp_fShearX) && (vfp_fShearZ == vfpToCompare.vfp_fShearZ) && (vfp_fStretchX == vfpToCompare.vfp_fStretchX) && (vfp_fStretchY == vfpToCompare.vfp_fStretchY) && (vfp_bClosed == vfpToCompare.vfp_bClosed) && (vfp_bLinearStaircases == vfpToCompare.vfp_bLinearStaircases) && (vfp_bOuter == vfpToCompare.vfp_bOuter) && (vfp_iSlicesIn360 == vfpToCompare.vfp_iSlicesIn360) && (vfp_iNoOfSlices == vfpToCompare.vfp_iNoOfSlices) && (vfp_fRadius == vfpToCompare.vfp_fRadius) && (vfp_iMeridians == vfpToCompare.vfp_iMeridians) && (vfp_iParalels == vfpToCompare.vfp_iParalels) && (vfp_iSlicesPerWidth == vfpToCompare.vfp_iSlicesPerWidth) && (vfp_iSlicesPerHeight == vfpToCompare.vfp_iSlicesPerHeight) && (vfp_iTopShape == vfpToCompare.vfp_iTopShape) && (vfp_iBottomShape == vfpToCompare.vfp_iBottomShape) && (vfp_fAmplitude == vfpToCompare.vfp_fAmplitude) && (vfp_fMipStart == vfpToCompare.vfp_fMipStart) && (vfp_fMipStep == vfpToCompare.vfp_fMipStep) && (vfp_fnDisplacement == vfpToCompare.vfp_fnDisplacement) ); } inline CValuesForPrimitive &CValuesForPrimitive::operator+=(const CValuesForPrimitive &vfpToAdd) { // add member by member vfp_fXMin += vfpToAdd.vfp_fXMin; vfp_fXMax += vfpToAdd.vfp_fXMax; vfp_fYMin += vfpToAdd.vfp_fYMin; vfp_fYMax += vfpToAdd.vfp_fYMax; vfp_fZMin += vfpToAdd.vfp_fZMin; vfp_fZMax += vfpToAdd.vfp_fZMax; vfp_fShearX += vfpToAdd.vfp_fShearX; vfp_fShearZ += vfpToAdd.vfp_fShearZ; vfp_fStretchX += vfpToAdd.vfp_fStretchX; vfp_fStretchY += vfpToAdd.vfp_fStretchY; return *this; } inline CValuesForPrimitive CValuesForPrimitive::operator+(const CValuesForPrimitive &vfpToAdd) { return CValuesForPrimitive(*this) += vfpToAdd; } inline CValuesForPrimitive &CValuesForPrimitive::operator-=(const CValuesForPrimitive &vfpToSub) { // sub member by member vfp_fXMin -= vfpToSub.vfp_fXMin; vfp_fXMax -= vfpToSub.vfp_fXMax; vfp_fYMin -= vfpToSub.vfp_fYMin; vfp_fYMax -= vfpToSub.vfp_fYMax; vfp_fZMin -= vfpToSub.vfp_fZMin; vfp_fZMax -= vfpToSub.vfp_fZMax; vfp_fShearX -= vfpToSub.vfp_fShearX; vfp_fShearZ -= vfpToSub.vfp_fShearZ; vfp_fStretchX -= vfpToSub.vfp_fStretchX; vfp_fStretchY -= vfpToSub.vfp_fStretchY; return *this; } inline CValuesForPrimitive CValuesForPrimitive::operator-(const CValuesForPrimitive &vfpToSub) { return CValuesForPrimitive(*this) -= vfpToSub; } #define SNAP_FLOAT_GRID 0.25f inline void CValuesForPrimitive::CorrectInvalidValues(void) { // some values must be valid, so if they are not, coorect them if( vfp_fXMax < vfp_fXMin) vfp_fXMax = vfp_fXMin+SNAP_FLOAT_GRID; if( vfp_fYMax < vfp_fYMin) vfp_fYMax = vfp_fYMin+SNAP_FLOAT_GRID; if( vfp_fZMax < vfp_fZMin) vfp_fZMax = vfp_fZMin+SNAP_FLOAT_GRID; } ///////////////////////////////////////////////////////////////////////////// extern CWorldEditorApp theApp; #include "CtrlEnumCombo.h" #include "CtrlEditString.h" #include "CtrlEditFloat.h" #include "CtrlEditBoolean.h" #include "CtrlBrowseFile.h" #include "CtrlAxisRadio.h" #include "WndAnimationFrames.h" #include "WndTestAnimation.h" #include "WndDisplayTexture.h" #include "PrimitiveHistoryCombo.h" #include "EntitySelectionListBox.h" #include "CSGDesitnationCombo.h" #include "TriangularisationCombo.h" #include "EditMipSwitchDistance.h" #include "ActiveTextureWnd.h" #include "BrushPaletteWnd.h" #include "CustomComboWnd.h" #include "TerrainInterface.h" #include "TerrainEditing.h" #include "WndTerrainTilePalette.h" #include "ViewTexture.h" #include "ColorPaletteWnd.h" #include "ToolTipWnd.h" #include "ColoredButton.h" #include "CtrlEditFlags.h" #include "DlgEditFloat.h" #include "DlgStretchChildOffset.h" #include "DlgFilterPolygonSelection.h" #include "DlgFilterVertexSelection.h" #include "DlgAllignVertices.h" #include "DlgSnapVertex.h" #include "DlgWorldSettings.h" #include "DlgDisplaceMapSize.h" #include "DlgSelectByName.h" #include "DlgRenderingPreferences.h" #include "DlgPgGlobal.h" #include "DlgPgTerrain.h" #include "DlgPgPosition.h" #include "DlgPgPrimitive.h" #include "DlgPgPolygon.h" #include "DlgPgShadow.h" #include "DlgPgSector.h" #include "DlgPgTexture.h" #include "DlgPgRenderingStatistics.h" #include "DlgAutoDeltaCSG.h" #include "DlgProgress.h" #include "DlgLightAnimationEditor.h" #include "DlgTreeShortcuts.h" #include "DlgBrowseByClass.h" #include "DlgNumericAlpha.h" #include "DlgMirrorAndStretch.h" #include "DlgComment.h" #include "DlgAutTexturize.h" #include "DlgEditTerrainBrush.h" #include "DlgEditTerrainLayer.h" #include "DlgTEOperationSettings.h" #include "DlgTerrainProperties.h" #include "DlgGenerateFBM.h" #include "InfoSheet.h" #include "VirtualTreeCtrl.h" #include "DlgCreateVirtualDirectory.h" #include "VirtualTreeNode.h" #include "BrowseWindow.h" #include "Browser.h" #include "InfoFrame.h" #include "PropertyComboBox.h" #include "PropertyComboBar.h" #include "DlgPreferences.h" #include "DlgLinkTree.h" #include "MainFrm.h" #include "ChildFrm.h" #include "WorldEditorDoc.h" #include "WorldEditorView.h" #include "SkyFloat.h" #endif // WORLDEDITOR_H