Serious-Engine/Sources/WorldEditor/WorldEditor.h
zcaliptium ef0b970490 Fixes
2016-03-22 21:03:12 +03:00

749 lines
23 KiB
C++

/* 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<DOUBLE3D> 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