#pragma once class Butterfly : public GameObject { public: enum class Type : UINT { Yellow, White, Blue, Count, Random }; enum class Direction : int { CCW = -1, Clockwise = 1 }; Butterfly(const XMFLOAT3& startPos, Butterfly::Type type = Butterfly::Type::Random, Butterfly::Direction direction = Butterfly::Direction::Clockwise); ~Butterfly() override = default; Butterfly(const Butterfly& other) = delete; Butterfly(Butterfly&& other) noexcept = delete; Butterfly& operator=(const Butterfly& other) = delete; Butterfly& operator=(Butterfly&& other) noexcept = delete; void DrawImGui(); protected: void Initialize(const SceneContext&) override; void Update(const SceneContext&) override; private: static std::vector m_MaterialIds; const float m_Radius{ 5.f }; const float m_RotationSpeed{ 60.f }; const float m_Amplitude{ 0.1f }; const float m_Frequency{ 5.f }; const float m_Size{ 5.f }; static int m_Count; XMFLOAT3 m_StartPos; GameObject* m_pButterflyGo; int m_RotationSign; int m_MaterialId; float m_RotationAngle{}; float m_OffsetY{}; };