tge/engine/editor/missionAreaEditor.h
2017-04-17 06:17:10 -06:00

146 lines
4.0 KiB
C++
Executable File

//-----------------------------------------------------------------------------
// Torque Game Engine
// Copyright (C) GarageGames.com, Inc.
//-----------------------------------------------------------------------------
#ifndef _MISSIONAREAEDITOR_H_
#define _MISSIONAREAEDITOR_H_
#ifndef _GUIBITMAPCTRL_H_
#include "gui/controls/guiBitmapCtrl.h"
#endif
#ifndef _GUITYPES_H_
#include "gui/core/guiTypes.h"
#endif
#ifndef _MISSIONAREA_H_
#include "game/missionArea.h"
#endif
class GBitmap;
class TerrainBlock;
class MissionAreaEditor : public GuiBitmapCtrl
{
private:
typedef GuiBitmapCtrl Parent;
SimObjectPtr<MissionArea> mMissionArea;
SimObjectPtr<TerrainBlock> mTerrainBlock;
GBitmap * createTerrainBitmap();
void onUpdate();
void setControlObjPos(const Point2F & pos);
bool clampArea(RectI & area);
// --------------------------------------------------
// conversion
VectorF mScale;
Point2F mCenterPos;
Point2F worldToScreen(const Point2F &);
Point2F screenToWorld(const Point2F &);
void getScreenMissionArea(RectI & rect);
void getScreenMissionArea(RectF & rect);
void setupScreenTransform(const Point2I & offset);
// --------------------------------------------------
// mouse
enum {
DefaultCursor = 0,
HandCursor,
GrabCursor,
VertResizeCursor,
HorizResizeCursor,
DiagRightResizeCursor,
DiagLeftResizeCursor,
NumCursors
};
bool grabCursors();
GuiCursor * mCurrentCursor;
GuiCursor * mCursors[NumCursors];
void getCursor(GuiCursor *&cursor, bool &showCursor, const GuiEvent &lastGuiEvent);
void setCursor(U32 cursor);
S32 mLastHitMode;
Point2I mLastMousePoint;
// --------------------------------------------------
// mission area
enum {
NUT_SIZE = 3
};
enum {
nothing = 0,
sizingLeft = BIT(0),
sizingRight = BIT(1),
sizingTop = BIT(2),
sizingBottom = BIT(3),
moving = BIT(4)
};
void updateCursor(S32 hit);
bool inNut(const Point2I & pt, S32 x, S32 y);
S32 getSizingHitKnobs(const Point2I & pt, const RectI & box);
void drawNut(const Point2I & nut);
void drawNuts(RectI & box);
public:
MissionAreaEditor();
//
bool missionAreaObjValid() { return(!mMissionArea.isNull()); }
bool terrainObjValid() { return(!mTerrainBlock.isNull()); }
TerrainBlock * getTerrainObj();
const RectI & getArea();
void setArea(const RectI & area);
void updateTerrainBitmap();
// GuiControl
void parentResized(const Point2I &oldParentExtent, const Point2I &newParentExtent);
void onRender(Point2I offset, const RectI &updateRect);
bool onWake();
void onSleep();
void onMouseUp(const GuiEvent & event);
void onMouseDown(const GuiEvent & event);
void onMouseMove(const GuiEvent & event);
void onMouseDragged(const GuiEvent & event);
void onMouseEnter(const GuiEvent & event);
void onMouseLeave(const GuiEvent & event);
// SimObject
bool onAdd();
// field data..
bool mSquareBitmap;
bool mEnableEditing;
bool mRenderCamera;
ColorI mHandleFrameColor;
ColorI mHandleFillColor;
ColorI mDefaultObjectColor;
ColorI mWaterObjectColor;
ColorI mMissionBoundsColor;
ColorI mCameraColor;
bool mEnableMirroring;
S32 mMirrorIndex;
ColorI mMirrorLineColor;
ColorI mMirrorArrowColor;
static void initPersistFields();
DECLARE_CONOBJECT(MissionAreaEditor);
};
#endif