Skip to content

GameSystem.Camera ​

2Dカメラ / インスタンス生成

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

読み方 ​

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

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

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

cpp
export module GameSystem.Camera;

import MyLib.Math.Vector2;
import GameSystem.Window;
import Object.GameObject;

using namespace math;

export namespace gameSystem
{
    /// <summary>
    /// 2Dカメラ
    /// </summary>
    export class Camera final
    {
    public:
        /// <summary>
        /// インスタンス生成
        /// </summary>
        /// <returns>カメラインスタンス</returns>
        static Camera& Instance()
        {
            static Camera inst;
            return inst;
        }

        /// <summary>
        /// 追尾ターゲット設定
        /// </summary>
        /// <param name="target">追尾対象のゲームオブジェクト</param>
        void SetTarget(Vector2f* target)
        {
            m_target = target;
        }

        /// <summary>
        /// 追尾ターゲット解除(自分が登録したターゲットの場合のみ)
        /// </summary>
        /// <param name="target">解除するターゲット</param>
        void ClearTarget(const Vector2f* target)
        {
            if (m_target == target)
            {
                m_target = nullptr;
            }
        }

        /// <summary>
        /// ワールド全体サイズ設定
        /// </summary>
        /// <param name="worldSize">ワールドサイズ</param>
        void SetWorldSize(const Vector2f& worldSize= Vector2f(1920.0f, 1080.0f))
        {
            m_worldSize = worldSize;
            ClampPosition();
        }

        /// <summary>
        /// 更新
        /// </summary>
        void Update();

        /// <summary>
        /// 現在のオフセット
        /// </summary>
        Vector2f GetOffset() const
        {
            return m_pos;
        }

        /// <summary>
        /// ワールド→スクリーン座標変換
        /// </summary>
        /// <param name="worldPos">ワールド座標</param>
        /// <returns>スクリーン座標</returns>
        Vector2f WorldToScreen(const Vector2f& worldPos) const
        {
            return worldPos - m_pos;
        }

        /// <summary>
        /// ワールド→スクリーン座標変換
        /// </summary>
        /// <param name="x">ワールド座標X</param>
        /// <param name="y">ワールド座標Y</param>
        /// <returns>スクリーン座標</returns>
        Vector2f WorldToScreen(float x, float y) const
        {
            return Vector2f(x, y) - m_pos;
        }

    private:
        /// <summary>
        /// コンストラクタ
        /// </summary>
        Camera();

        /// <summary>
        /// 位置クランプ
        /// </summary>
        void ClampPosition();

        Vector2f* m_target;           // 追尾ターゲット
        Vector2f m_pos;              // カメラ位置(オフセット)
        Vector2f m_worldSize;        // ワールド全体サイズ
        float m_followStrength;      // 追尾強度
    };
}

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