Skip to content

Component.ComponentManager ​

コンポーネント関連 / コンポーネントを管理する

所属:componentのAPI解説 · 全モジュール索引

読み方 ​

このページは実ファイルから生成したソース照合用資料です。公開関数の引数・戻り値の型、オーバーロード、列挙値を確認できます。public/protected/privateを区別し、privateメンバーを呼び出し例に使わないでください。コメントは原文であり、古い説明や誤記を含む場合があります。利用条件・訂正は上記のAPI解説と既知の制約を優先してください。

元ファイル:ProjectName/code/Component/ComponentManager/ComponentManager.ixx。確認基準:08f9fa53。

インターフェースとインライン実装 ​

cpp
export module Component.ComponentManager;

import <unordered_map>;
import <memory>;
import <typeindex>;

import Component;

/// <summary>
/// コンポーネント関連
/// </summary>
export namespace component
{
    /// <summary>
    /// コンポーネントを管理する
    /// </summary>
    export class ComponentManager final
    {
    public:
        /// <summary>
        /// コンストラクタ
        /// </summary>
        ComponentManager() = default;

        /// <summary>
        /// デストラクタ
        /// </summary>
        ~ComponentManager() = default;

        /// <summary>
        /// 更新処理
        /// </summary>
        /// <param name="deltaTime">デルタタイム</param>
        void Update(const float& deltaTime);

        /// <summary>
        /// 描画処理
        /// </summary>
        virtual void Draw();

        /// <summary>
        /// コンポーネント追加
        /// </summary>
        /// <typeparam name="T">コンポーネント名</typeparam>
        /// <typeparam name="...Args">引数群</typeparam>
        /// <param name="...args">引数群</param>
        /// <returns>追加したコンポーネント</returns>
        template<typename T, typename... Args>
        std::shared_ptr<T> AddComponent(Args&&... args)
        {
            auto component = std::make_shared<T>(std::forward<Args>(args)...);
            m_components[typeid(T)] = component;
            return component;
        }

        /// <summary>
        /// コンポーネントの取得
        /// </summary>
        /// <typeparam name="T">取得対象のコンポーネント名</typeparam>
        /// <returns>コンポーネント</returns>
        template<typename T>
        std::shared_ptr<T> GetComponent()
        {
            if (HasComponent<T>())
            {
                return std::dynamic_pointer_cast<T>(m_components[typeid(T)]);
            }
            return nullptr;
        }

        /// <summary>
        /// コンポーネントの存在確認
        /// </summary>
        /// <typeparam name="T">確認対象のコンポーネント</typeparam>
        /// <returns>存在するかどうか</returns>
        template<typename T>
        bool HasComponent()
        {
            return m_components.find(typeid(T)) != m_components.end();
        }

        /// <summary>
        /// コンポーネント削除
        /// </summary>
        /// <param name="component">削除するコンポーネント</param>
        template<typename T>
        void RemoveComponent()
        {
            m_components.erase(typeid(T));
        }

    private:
        std::unordered_map<std::type_index, std::shared_ptr<component::ComponentBase>> m_components;   //コンポーネント群
    };
}

コード確認基準:08f9fa53 · C++実機検証は別途実施