axmol/tests/live2d-tests/Classes/LAppLive2DManager.hpp

156 lines
4.9 KiB
C++
Raw Normal View History

/**
* Copyright(c) Live2D Inc. All rights reserved.
*
* Use of this source code is governed by the Live2D Open Software license
* that can be found at https://www.live2d.com/eula/live2d-open-software-license-agreement_en.html.
*/
#pragma once
#include <CubismFramework.hpp>
#include <Math/CubismMatrix44.hpp>
#include <Type/csmVector.hpp>
#include "LAppModel.hpp"
class LAppSprite;
/**
* @brief CubismModelを管理するクラス<br>
*
*
*/
class LAppLive2DManager
{
public:
/**
* @brief LAppModelのレンダリング先
*/
enum SelectTarget
{
SelectTarget_None, ///< デフォルトのフレームバッファにレンダリング
SelectTarget_ModelFrameBuffer, ///< LAppModelが各自持つフレームバッファにレンダリング
SelectTarget_ViewFrameBuffer, ///< LAppViewの持つフレームバッファにレンダリング
};
/**
* @brief <br>
*
*
* @return
*/
static LAppLive2DManager* GetInstance();
/**
* @brief
*
*/
static void ReleaseInstance();
/**
* @brief
*
* @param[in] no
* @return NULLを返す
*/
LAppModel* GetModel(Csm::csmUint32 no) const;
/**
* @brief
*
* @return
*/
Csm::csmUint32 GetModelCount() const;
/**
* @brief
*
*/
void ReleaseAllModel();
/**
* @brief
*
*/
void RecreateRenderer() const;
/**
* @brief View行列をセットする
*
* @param[in] matrix View行列
*
*/
void SetViewMatrix(Csm::CubismMatrix44* matrix);
/**
* @brief
*
* @param[in] x X座標
* @param[in] y Y座標
*/
void OnDrag(Csm::csmFloat32 x, Csm::csmFloat32 y) const;
/**
* @brief
*
* @param[in] x X座標
* @param[in] y Y座標
*/
void OnTap(Csm::csmFloat32 x, Csm::csmFloat32 y);
/**
* @brief
*
*/
void OnUpdate(Csm::Rendering::CubismCommandBuffer_Cocos2dx* commandBuffer) const;
/**
* @brief <br>
*
*/
void NextScene();
/**
* @brief <br>
*
*/
void ChangeScene(Csm::csmInt32 index);
/**
* @brief
* @param[in] r (0.0~1.0)
* @param[in] g (0.0~1.0)
* @param[in] b (0.0~1.0)
*/
void SetRenderTargetClearColor(float r, float g, float b);
private:
/**
* @brief
*/
LAppLive2DManager();
/**
* @brief
*/
virtual ~LAppLive2DManager();
/**
* @brief
*/
void CreateShader();
Csm::CubismMatrix44* _viewMatrix; ///< モデル描画に用いるView行列
Csm::csmVector<LAppModel*> _models; ///< モデルインスタンスのコンテナ
Csm::csmInt32 _sceneIndex; ///< 表示するシーンのインデックス値
// レンダリング先を別ターゲットにする方式の場合に使用
SelectTarget _renderTarget; ///< レンダリング先の選択肢
LAppSprite* _sprite; ///< テクスチャの単純描画クラス
Csm::Rendering::CubismOffscreenFrame_Cocos2dx* _renderBuffer; ///< モードによってはCubismモデル結果をこっちにレンダリング
float _clearColor[4]; ///< レンダリングターゲットのクリアカラー
axis::backend::Program* _program;
};