#pragma once #include "base.h" #include "datatypes/cframe.h" #include "objects/base/service.h" #include "objects/part.h" #include #include #include class HandleFace { HandleFace(int index, glm::vec3 normal) : index(index), normal(normal){} public: int index; glm::vec3 normal; static HandleFace XPos; static HandleFace XNeg; static HandleFace YPos; static HandleFace YNeg; static HandleFace ZPos; static HandleFace ZNeg; static std::array Faces; }; enum HandlesType { MoveHandles, ScaleHandles, RotateHandles, }; class Handles : public Instance { public: const static InstanceType TYPE; bool nixAxes = false; // XYZ -> ZXY, used with rotation bool active; std::weak_ptr adornee; HandlesType handlesType; // inline std::weak_ptr GetAdornee() { return adornee; } // inline void SetAdornee(std::weak_ptr newAdornee) { this->adornee = newAdornee; updateAdornee(); }; Handles(); // World-space handles vs local-space handles bool worldMode = false; CFrame GetCFrameOfHandle(HandleFace face); CFrame PartCFrameFromHandlePos(HandleFace face, Vector3 newPos); Vector3 HandleSize(HandleFace face); std::optional RaycastHandle(rp3d::Ray ray); static inline std::shared_ptr New() { return std::make_shared(); }; virtual const InstanceType* GetClass() override; };