/*
** Command & Conquer Generals Zero Hour(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** 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, see .
*/
// WorldBuilder.h : main header file for the WORLDBUILDER application
//
#if !defined(AFX_WORLDBUILDER_H__FBA41345_2826_11D5_8CE0_00010297BBAC__INCLUDED_)
#define AFX_WORLDBUILDER_H__FBA41345_2826_11D5_8CE0_00010297BBAC__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif
#include "resource.h" // main symbols
#include "Common/STLTypedefs.h"
#include "BrushTool.h"
#include "TileTool.h"
#include "FeatherTool.h"
#include "AutoEdgeOutTool.h"
#include "FloodFillTool.h"
#include "MoundTool.h"
#include "EyedropperTool.h"
#include "ObjectTool.h"
#include "FenceTool.h"
#include "PointerTool.h"
#include "BlendEdgeTool.h"
#include "BorderTool.h"
#include "GroveTool.h"
#include "HandScrollTool.h"
#include "RoadTool.h"
#include "MeshMoldTool.h"
#include "WaypointTool.h"
#include "PolygonTool.h"
#include "WaterTool.h"
#include "BuildListTool.h"
#include "RampTool.h"
#include "ScorchTool.h"
#include "RulerTool.h"
#include "Common/Debug.h"
/////////////////////////////////////////////////////////////////////////////
// CWorldBuilderApp:
// See WorldBuilder.cpp for the implementation of this class
//
// Force maps into a directory structure.
#define DO_MAPS_IN_DIRECTORIES 1
#define NONE_STRING ""
enum {THREE_D_VIEW_WIDTH=800, THREE_D_VIEW_HEIGHT=600};
enum {MAX_OBJECTS_IN_MAP = 3000};
class CWorldBuilderApp : public CWinApp
{
public:
CWorldBuilderApp();
~CWorldBuilderApp();
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CWorldBuilderApp)
public:
virtual BOOL InitInstance();
virtual int ExitInstance();
//}}AFX_VIRTUAL
// Implementation
//{{AFX_MSG(CWorldBuilderApp)
afx_msg void OnAppAbout();
afx_msg void OnResetWindows();
afx_msg void OnFileOpen();
afx_msg void OnTexturesizingMapclifftextures();
afx_msg void OnUpdateTexturesizingMapclifftextures(CCmdUI* pCmdUI);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
protected:
enum {NUM_VIEW_TOOLS=25};
Tool *m_tools[NUM_VIEW_TOOLS]; ///< array of tool pointers.
Tool *m_curTool; ///< Currently active tool.
Tool *m_selTool; ///< Normal tool. If we hit alt, curTool turns to eyedropper.
BrushTool m_brushTool; ///< Height brush tool.
TileTool m_tileTool; ///< Single texture tile tool.
BigTileTool m_bigTileTool; ///< Wide texture tile tool.
FeatherTool m_featherTool; ///< Feather the height values tool.
AutoEdgeOutTool m_autoEdgeOutTool; ///< Auto blend texture edges out tool.
FloodFillTool m_floodFillTool; ///< Flood fill tool.
MoundTool m_moundTool; ///< Add height to height values tool.
DigTool m_digTool; ///< Remove height from height values tool.
EyedropperTool m_eyedropperTool; ///< Eyedropper tool.
ObjectTool m_objectTool; ///< Add and orient object tool.
PointerTool m_pointerTool; ///< Select and move/rotate tool.
BlendEdgeTool m_blendEdgeTool; ///< Blend a single edge tool.
GroveTool m_groveTool; ///< Plant a grove of trees tool.
HandScrollTool m_handScrollTool; ///< Scroll tool.
RoadTool m_roadTool; ///< Road tool.
MeshMoldTool m_meshMoldTool; ///< Mesh shaping mold tool.
WaypointTool m_waypointTool; ///< Waypoint tool.
PolygonTool m_polygonTool; ///< Polygon tool.
WaterTool m_waterTool; ///< Water tool.
BuildListTool m_buildListTool; ///< Build List tool.
FenceTool m_fenceTool; ///< Fence tool.
RampTool m_rampTool; ///< Ramp tool.
ScorchTool m_scorchTool; ///< Scorch tool.
BorderTool m_borderTool; ///< Border tool.
RulerTool m_rulerTool; ///< Ruler tool.
Int m_lockCurTool;
AsciiString m_currentDirectory; ///< Current directory for open file.
CDocTemplate *m_3dtemplate;
MapObject *m_pasteMapObjList; ///< List of copied/cut map objects.
protected:
void deletePasteObjList(void)
{
if (m_pasteMapObjList)
m_pasteMapObjList->deleteInstance();
m_pasteMapObjList = NULL;
};
public:
CDocTemplate *Get3dTemplate() { return m_3dtemplate; }
/// Set the brush tool as the active tool.
void selectBrushTool(void) { setActiveTool(&m_brushTool); }
/// Set the pointer tool as the active tool.
void selectPointerTool(void);
/// Set the hand tool as the cur tool (but not active tool)
void selectHandToolTemp(void) { m_curTool = &m_handScrollTool; }
/// Set the tool that will be active.
void setActiveTool(Tool *newTool);
/// Sets the current directry for file opens.
void setCurrentDirectory(AsciiString dir) {m_currentDirectory = dir;};
Tool *getCurTool() { return m_curTool; }
/// Check to see if any keyboard overrides are changing the current tool.
void updateCurTool(Bool forceHand);
/// Switch to the poly tool if we aren't already.
void setPolyTool(void){ setActiveTool(&m_polygonTool); };
/// Return true if the hand scroll tool is active.
Bool isHandScroll(void) {return m_curTool == &m_handScrollTool; }
void lockCurTool() { DEBUG_ASSERTCRASH(!m_lockCurTool,("already locked")); m_lockCurTool = 1; }
void unlockCurTool() { m_lockCurTool = 0; }
Bool isCurToolLocked() { return m_lockCurTool != 0; }
/// Note - read only data - make yourself a copy.
MapObject *getMapObjPasteList(void) { return(m_pasteMapObjList);};
/// Note - the app owns this, and will delete it on close.
void setMapObjPasteList(MapObject *list) { deletePasteObjList(); m_pasteMapObjList = list; };
/// Handles command messages.
virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra,
AFX_CMDHANDLERINFO* pHandlerInfo);
};
inline CWorldBuilderApp *WbApp() { return (CWorldBuilderApp*)::AfxGetApp(); }
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_WORLDBUILDER_H__FBA41345_2826_11D5_8CE0_00010297BBAC__INCLUDED_)