#pragma once class Crystal : public GameObject { public: enum class Type : UINT { Yellow, Blue, Red, Count, Random }; Crystal(const XMFLOAT3& startPos, Crystal::Type type = Crystal::Type::Random); ~Crystal() override = default; Crystal(const Crystal& other) = delete; Crystal(Crystal&& other) noexcept = delete; Crystal& operator=(const Crystal& other) = delete; Crystal& operator=(Crystal&& other) noexcept = delete; void DrawImGui(); Type GetType() { return m_Type; } //void PickupCrystal(GameObject* pTriggerObject, GameObject* pOtherObject, PxTriggerAction action); protected: void Initialize(const SceneContext&) override; void Update(const SceneContext&) override; private: static PxMaterial* m_pPxMaterial; GameObject* m_pShadow{ nullptr }; static std::vector m_MaterialIds; const float m_RotationSpeed{ 90.f }; static int m_Count; Type m_Type; XMFLOAT3 m_StartPos; GameObject* m_pCrystalGo; int m_MaterialId; float m_RotationAngle{}; float m_OffsetY{}; };