Skip to content

Object.ObjectManager ​

オブジェクト関連 / オブジェクトを管理する

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

読み方 ​

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

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

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

cpp
export module Object.ObjectManager;
import Object.GameObject;
import <memory>;
import <string>;
import <vector>;
import <unordered_map>;

/// <summary>
/// オブジェクト関連
/// </summary>
export namespace object
{
    /// <summary>
    /// オブジェクトを管理する
    /// </summary>
    export class ObjectManager final
    {
    public:
        /// <summary>
        /// コンストラクタ
        /// </summary>
        ObjectManager();

        /// <summary>
        /// デストラクタ
        /// </summary>
        ~ObjectManager();

        /// <summary>
        /// オブジェクト追加
        /// </summary>
        /// <param name="object">追加するオブジェクト</param>
        template<typename... Args>
        inline void AddObject(GameObject* object, Args&&... args)
        {
            // 更新中なら一時保存、そうでないなら新規追加
            if (isUpdate)
            {
                object->SetColliderManager(&m_colMgr);
                object->OnAttach();
                pendingObjects.emplace_back(object);
                return;
            }

            // 新規追加
            object->SetColliderManager(&m_colMgr);
            object->OnAttach();
            auto obj = std::shared_ptr<GameObject>(object, std::forward<Args>(args)...);
            objects[object->MyObjectTag()].emplace_back(obj);
        }

        /// <summary>
        /// オブジェクト除去
        /// </summary>
        /// <param name="object">除去するオブジェクト</param>
        void RemoveObject(GameObject* object);

        /// <summary>
        /// 更新処理前の初期化
        /// </summary>
        void InitBeforeUpdate();

        /// <summary>
        /// オブジェクト更新
        /// </summary>
        void Update();

        /// <summary>
        /// オブジェクト配列への反映
        /// </summary>
        void RefreshObjects();

        /// <summary>
        /// オブジェクト取得
        /// </summary>
        /// <param name="tag">タグ</param>
        /// <returns>タグに該当するオブジェクト群</returns>
        std::vector<std::shared_ptr<GameObject>> GetObjForTag(uint32_t tag);

        /// <summary>
        /// オブジェクト描画
        /// </summary>
        void Draw();

    private:
        // このシーン専用のコライダー管理(objectsより先に宣言=objectsの後に破棄される)
        col2d::ColliderManager m_colMgr;
        std::unordered_map<uint32_t, std::vector<std::shared_ptr<GameObject>>> objects;
        std::vector<GameObject*> pendingObjects;    //一時保存オブジェクト配列
        bool isUpdate;                              //更新状況
    };
}

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