//----------------------------------------------------------------------------- // 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 mMissionArea; SimObjectPtr 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