/* Copyright 2003-2005 ROBLOX Corporation, All Rights Reserved */ #pragma once #include "V8DataModel/MouseCommand.h" #include "V8Xml/Reference.h" #include "V8Tree/Verb.h" #include "Tool/ICancelableTool.h" #include "util/NormalId.h" #include "V8DataModel/Decal.h" #include "v8datamodel/Surface.h" namespace RBX { class SurfaceTool : public MouseCommand { private: typedef MouseCommand Super; /*override*/ shared_ptr onMouseDown(const shared_ptr& inputObject); /*override*/ void render3dAdorn(Adorn* adorn); int surfaceId; std::string name; protected: virtual void doAction(Surface* surface) = 0; /*override*/ void onMouseHover(const shared_ptr& inputObject); shared_ptr partInstance; Surface surface; public: SurfaceTool(Workspace* workspace); ~SurfaceTool(); }; extern const char* const sDecalTool; class DecalTool : public Named , public ICancelableTool { private: shared_ptr decal; RBX::InsertMode insertMode; bool parentIsPart; /*override*/ const std::string getCursorName() const {return "ArrowCursorDecalDrag";} /*override*/ void doAction(Surface* surface) {} /*override*/ void onMouseHover(const shared_ptr& inputObject); /*override*/ shared_ptr onMouseUp(const shared_ptr& inputObject); /*override*/ shared_ptr onKeyDown(const shared_ptr& inputObject); public: DecalTool(Workspace* workspace, Decal *decal, RBX::InsertMode insertMode); /*override*/ //MouseCommand* isSticky() const {return new DecalTool(workspace);} /*override*/ virtual shared_ptr onCancelOperation(); }; extern const char* const sFlatTool; class FlatTool : public Named { private: /*override*/ const std::string getCursorName() const {return "FlatCursor";} /*override*/ void doAction(Surface* surface); public: FlatTool(Workspace* workspace) : Named(workspace) {} /*override*/ shared_ptr isSticky() const {return Creatable::create(workspace);} }; extern const char* const sGlueTool; class GlueTool : public Named { private: /*override*/ const std::string getCursorName() const {return "GlueCursor";} /*override*/ void doAction(Surface* surface); public: GlueTool(Workspace* workspace) : Named(workspace) {} /*override*/ shared_ptr isSticky() const {return Creatable::create(workspace);} }; extern const char* const sWeldTool; class WeldTool : public Named { private: /*override*/ const std::string getCursorName() const {return "WeldCursor";} /*override*/ void doAction(Surface* surface); public: WeldTool(Workspace* workspace) : Named(workspace) {} /*override*/ shared_ptr isSticky() const {return Creatable::create(workspace);} }; extern const char* const sStudsTool; class StudsTool : public Named { private: /*override*/ const std::string getCursorName() const {return "StudsCursor";} /*override*/ void doAction(Surface* surface); public: StudsTool(Workspace* workspace) : Named(workspace) {} /*override*/ shared_ptr isSticky() const {return Creatable::create(workspace);} }; extern const char* const sInletTool; class InletTool : public Named { private: /*override*/ const std::string getCursorName() const {return "InletCursor";} /*override*/ void doAction(Surface* surface); public: InletTool(Workspace* workspace) : Named(workspace) {} /*override*/ shared_ptr isSticky() const {return Creatable::create(workspace);} }; extern const char* const sUniversalTool; class UniversalTool : public Named { private: /*override*/ const std::string getCursorName() const {return "UniversalCursor";} /*override*/ void doAction(Surface* surface); public: UniversalTool(Workspace* workspace) : Named(workspace) {} /*override*/ shared_ptr isSticky() const {return Creatable::create(workspace);} }; extern const char* const sHingeTool; class HingeTool : public Named { private: /*override*/ const std::string getCursorName() const {return "HingeCursor";} /*override*/ void doAction(Surface* surface); public: static bool isStickyVerb; HingeTool(Workspace* workspace) : Named(workspace) {} /*override*/ shared_ptr isSticky() const; }; extern const char* const sRightMotorTool; class RightMotorTool : public Named { private: /*override*/ const std::string getCursorName() const {return "MotorCursor";} /*override*/ void doAction(Surface* surface); public: static bool isStickyVerb; RightMotorTool(Workspace* workspace) : Named(workspace) {} /*override*/ shared_ptr isSticky() const; }; extern const char* const sLeftMotorTool; class LeftMotorTool : public Named { private: /*override*/ const std::string getCursorName() const {return "MotorCursor";} /*override*/ void doAction(Surface* surface); public: LeftMotorTool(Workspace* workspace) : Named(workspace) {} }; extern const char* const sOscillateMotorTool; class OscillateMotorTool : public Named { private: /*override*/ const std::string getCursorName() const {return "MotorCursor";} /*override*/ void doAction(Surface* surface); public: OscillateMotorTool(Workspace* workspace) : Named(workspace) {} }; extern const char* const sSmoothNoOutlinesTool; class SmoothNoOutlinesTool : public Named { private: /*override*/ const std::string getCursorName() const {return "FlatCursor";} /*override*/ void doAction(Surface* surface); public: SmoothNoOutlinesTool(Workspace* workspace) : Named(workspace) {} /*override*/ shared_ptr isSticky() const {return Creatable::create(workspace);} }; } // namespace RBX