/* Copyright 2003-2005 ROBLOX Corporation, All Rights Reserved */ #pragma once #include "V8DataModel/MouseCommand.h" #include "V8DataModel/ManualJointHelper.h" namespace RBX { class PartInstance; class Decal; ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// // // ARROW #define STUDIO_CAMERA_CONTROL_SHORTCUTS 1 class ArrowToolBase : public MouseCommand { private: typedef MouseCommand Super; bool altKeyDown; protected: Decal* findDecal(PartInstance* p, const shared_ptr& inputObject); virtual void onMouseIdle(const shared_ptr& inputObject); virtual void onMouseHover(const shared_ptr& inputObject); virtual shared_ptr onMouseDown(const shared_ptr& inputObject); virtual const std::string getCursorName() const; virtual shared_ptr onPeekKeyDown(const shared_ptr& inputObject); virtual void render3dAdorn(Adorn* adorn); void renderHoverOver(Adorn* adorn,bool drillDownOnly = true); PartInstance* overInstance; public: ArrowToolBase(Workspace* workspace) : MouseCommand(workspace), overInstance(NULL), altKeyDown(false) { FASTLOG1(FLog::MouseCommandLifetime, "ArrowTool created: %p", this); } virtual ~ArrowToolBase() { FASTLOG1(FLog::MouseCommandLifetime, "ArrowTool destroyed: %p", this); } static bool showDraggerGrid; }; ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// // // ADVANCED ARROW (parent class for all advanced mouse manipulation class AdvArrowToolBase : public ArrowToolBase { private: ManualJointHelper manualJointHelper; typedef ArrowToolBase Super; protected: typedef std::map, float> PartsTransparencyCollection; static PartsTransparencyCollection originalPartsTransparency; public: AdvArrowToolBase(Workspace* workspace) : ArrowToolBase(workspace), manualJointHelper(workspace) {} virtual ~AdvArrowToolBase() {} enum JointCreationMode { WELD_ALL = 0, SURFACE_JOIN_ONLY = 1, NO_JOIN = 2 }; virtual shared_ptr onMouseDown(const shared_ptr& inputObject); virtual void onMouseMove(const shared_ptr& inputObject); virtual shared_ptr onMouseUp(const shared_ptr& inputObject); virtual const std::string getCursorName() const; shared_ptr onKeyDown(const shared_ptr& inputObject); void determineManualJointConditions(void); static DRAG::DraggerGridMode advGridMode; static bool advManualJointMode; static DRAG::ManualJointType advManualJointType; static bool advManipInProgress; static bool advCollisionCheckMode; static bool advLocalTranslationMode; static bool advLocalRotationMode; static bool advCreateJointsMode; static void restoreSavedPartsTransparency(); static void savePartTransparency(shared_ptr part); static AdvArrowToolBase::JointCreationMode getJointCreationMode(); virtual void getSelectedTargetPrimitives(std::vector& targetPrims) {} virtual void setCursor(std::string cursor) {} }; extern const char* const sAdvArrowTool; class AdvArrowTool : public Named { public: AdvArrowTool(Workspace* workspace) : Named(workspace) { } /*override*/ shared_ptr isSticky() const {return Creatable::create(workspace);} virtual void setCursor(std::string cursor) {} }; ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// // // BOX SELECT extern const char* const sBoxSelectCommand; class BoxSelectCommand : public Named { private: typedef Named Super; ServiceClient selection; bool reverseSelecting; Vector2int16 mouseDownView; Vector2int16 mouseCurrentView; std::set< shared_ptr > previousItemsInBox; void getMouseInstances(std::set< shared_ptr >& instances, const shared_ptr& inputObject, const Rect2D& selectBox, const Camera* camera, Instance* currentInstance); void selectAnd(const std::set< shared_ptr >& newItemsInBox); void selectReverse(const std::set< shared_ptr >& newItemsInBox); public: /*override*/ shared_ptr onMouseDown(const shared_ptr& inputObject); /*override*/ void onMouseMove(const shared_ptr& inputObject); /*override*/ void render2d(Adorn* adorn); BoxSelectCommand(Workspace* workspace); ~BoxSelectCommand(); }; } // namespace RBX