#pragma once #include "base.h" #include #include #include #include "../rendering/material.h" #include namespace rp = reactphysics3d; // For easy construction from C++. Maybe should be removed? struct PartConstructParams { glm::vec3 position; glm::quat rotation = glm::identity(); glm::vec3 scale; Material material; bool anchored = false; }; class Part : public Instance { protected: void OnParentUpdated(std::optional> oldParent, std::optional> newParent) override; void onUpdated(std::string); public: static InstanceType* TYPE; // TODO: Switch these over to our dedicated datatypes glm::vec3 position; glm::quat rotation = glm::identity(); glm::vec3 scale; Material material; bool selected = false; bool anchored = false; rp::RigidBody* rigidBody = nullptr; Part(); Part(PartConstructParams params); ~Part() override; static inline std::shared_ptr New() { return std::make_shared(); }; static inline std::shared_ptr New(PartConstructParams params) { return std::make_shared(params); }; static inline InstanceRef CreateGeneric() { return std::make_shared(); }; virtual InstanceType* GetClass() override; };