Skip to content

ColliderVisitor ​

当たり判定関連 / コライダービジター

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

読み方 ​

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

元ファイル:ProjectName/code/Collision/Collider/ColliderVisitor.ixx。確認基準:08f9fa53。

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

cpp
export module ColliderVisitor;
import ColliderDef;

/// <summary>
/// 当たり判定関連
/// </summary>
export namespace col2d
{
    // 前方宣言
    export class RectCollider;
    export class CircleCollider;

    /// <summary>
    /// コライダービジター
    /// </summary>
    export class ColliderVisitor
    {
    public:
        /// <summary>
        /// コンストラクタ
        /// </summary>
        ColliderVisitor() = default;
        /// <summary>
        /// デストラクタ
        /// </summary>
        virtual ~ColliderVisitor() = default;

        /// <summary>
        /// 矩形コライダーへ訪問
        /// </summary>
        virtual void Visit(RectCollider& target) {};

        /// <summary>
        /// 円形コライダーへ訪問
        /// </summary>
        virtual void Visit(CircleCollider& target) {};

        /// <summary>
        /// 衝突後の共通処理
        /// </summary>
        /// <typeparam name="Issue">衝突を起こしたコライダーの型</typeparam>
        /// <typeparam name="Target">衝突相手のコライダーの型</typeparam>
        /// <typeparam name="Resolve">解決処理の型</typeparam>
        template <class Issue, class Target, class Resolve>
        bool HandleContact(Issue& issue, Target& target, Resolve& resolve)
        {
            m_hadContact = true;

            // 自身が静的なら押し戻しは行わない(ループ終了)
            if (issue.GetColliderDef()->type == Type::STATIC)
            {
                return false;
            }

            // どちらかがトリガーなら押し戻しは行わない
            if (!issue.GetColliderDef()->isTrigger || !target.GetColliderDef()->isTrigger)
            {
                if (auto info = resolve.Resolve(issue, target))
                {
                    m_info = info.value();
                }
            }

            return true;
        }

    protected:
        bool m_hadContact = false;
        ContactInfo m_info; // 衝突情報
    };
}

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