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

215 lines
8.8 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 "2d/CCRenderTexture.h"
#include <CubismFramework.hpp>
#include <Model/CubismUserModel.hpp>
#include <ICubismModelSetting.hpp>
#include <Type/csmRectF.hpp>
2022-10-01 16:24:52 +08:00
#include <Rendering/axmol/CubismOffscreenSurface_Cocos2dx.hpp>
#include "LAppDefine.hpp"
#include "AppDelegate.h"
/**
* @brief 使<br>
*
*
*/
class LAppModel : public Csm::CubismUserModel
{
public:
/**
* @brief
*/
LAppModel();
/**
* @brief
*
*/
virtual ~LAppModel();
/**
* @brief model3.jsonが置かれたディレクトリとファイルパスからモデルを生成する
*
*/
void LoadAssets(const Csm::csmChar dir[], const Csm::csmChar fileName[]);
/**
* @brief
*
*/
void ReloadRnederer();
/**
* @brief
*
*/
void Update();
/**
* @brief View-Projection行列を渡す
*
* @param[in] matrix View-Projection行列
*/
void Draw(Csm::Rendering::CubismCommandBuffer_Cocos2dx* commandBuffer, Csm::CubismMatrix44& matrix);
/**
* @brief
*
* @param[in] group
* @param[in] no
* @param[in] priority
* @param[in] onFinishedMotionHandler NULLの場合
* @return IsFinished()使-1
*/
Csm::CubismMotionQueueEntryHandle StartMotion(const Csm::csmChar* group, Csm::csmInt32 no, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL);
/**
* @brief
*
* @param[in] group
* @param[in] priority
* @param[in] onFinishedMotionHandler NULLの場合
* @return IsFinished()使-1
*/
Csm::CubismMotionQueueEntryHandle StartRandomMotion(const Csm::csmChar* group, Csm::csmInt32 priority, Csm::ACubismMotion::FinishedMotionCallback onFinishedMotionHandler = NULL);
/**
* @brief
*
* @param expressionID ID
*/
void SetExpression(const Csm::csmChar* expressionID);
/**
* @brief
*
*/
void SetRandomExpression();
/**
* @brief
*
*/
virtual void MotionEventFired(const Live2D::Cubism::Framework::csmString& eventValue);
/**
* @brief <br>
* IDの頂点リストから矩形を計算し
*
* @param[in] hitAreaName ID
* @param[in] x X座標
* @param[in] y Y座標
*/
virtual Csm::csmBool HitTest(const Csm::csmChar* hitAreaName, Csm::csmFloat32 x, Csm::csmFloat32 y);
Csm::csmRectF GetDrawableArea(Csm::csmInt32 drawableIndex, const Csm::CubismMatrix44& vpMatrix, const Csm::CubismVector2& windowSize) const;
const Csm::csmVector<Csm::csmRectF>& GetHitAreas(const Csm::CubismMatrix44& vpMatrix, const Csm::CubismVector2& windowSize);
const Csm::csmVector<Csm::csmRectF>& GetUserDataAreas(const Csm::CubismMatrix44& vpMatrix, const Csm::CubismVector2& windowSize);
/**
* @brief 使
* SampleSceneへ登録する
*/
void MakeRenderingTarget();
/**
* @brief
* @param[in] r (0.0~1.0)
* @param[in] g (0.0~1.0)
* @param[in] b (0.0~1.0)
* @param[in] a α(0.0~1.0)
*/
void SetSpriteColor(float r, float g, float b, float a);
protected:
/**
* @brief View-Projection行列を渡す
*
*/
void DoDraw();
private:
/**
* @brief model3.jsonからモデルを生成する<br>
* model3.jsonの記述に従ってモデル生成
*
* @param[in] setting ICubismModelSettingのインスタンス
*
*/
void SetupModel(Csm::ICubismModelSetting* setting);
/**
* @brief OpenGLのテクスチャユニットにテクスチャをロードする
*
*/
void SetupTextures();
/**
* @brief <br>
* ModelSettingから取得する
*
* @param[in] group
*/
void PreloadMotionGroup(const Csm::csmChar* group);
/**
* @brief <br>
* ModelSettingから取得する
*
* @param[in] group
*/
void ReleaseMotionGroup(const Csm::csmChar* group) const;
/**
* @brief
*
*
*/
void ReleaseMotions();
/**
* @brief
*
*
*/
void ReleaseExpressions();
Csm::ICubismModelSetting* _modelSetting; ///< モデルセッティング情報
Csm::csmString _modelHomeDir; ///< モデルセッティングが置かれたディレクトリ
Csm::csmFloat32 _userTimeSeconds; ///< デルタ時間の積算値[秒]
Csm::csmVector<Csm::CubismIdHandle> _eyeBlinkIds; ///< モデルに設定されたまばたき機能用パラメータID
Csm::csmVector<Csm::CubismIdHandle> _lipSyncIds; ///< モデルに設定されたリップシンク機能用パラメータID
Csm::csmMap<Csm::csmString, Csm::ACubismMotion*> _motions; ///< 読み込まれているモーションのリスト
Csm::csmMap<Csm::csmString, Csm::ACubismMotion*> _expressions; ///< 読み込まれている表情のリスト
Csm::csmVector<Csm::csmRectF>_hitArea;
Csm::csmVector<Csm::csmRectF>_userArea;
const Csm::CubismId* _idParamAngleX; ///< パラメータID: ParamAngleX
const Csm::CubismId* _idParamAngleY; ///< パラメータID: ParamAngleX
const Csm::CubismId* _idParamAngleZ; ///< パラメータID: ParamAngleX
const Csm::CubismId* _idParamBodyAngleX; ///< パラメータID: ParamBodyAngleX
const Csm::CubismId* _idParamEyeBallX; ///< パラメータID: ParamEyeBallX
const Csm::CubismId* _idParamEyeBallY; ///< パラメータID: ParamEyeBallXY
Csm::Rendering::CubismOffscreenFrame_Cocos2dx* _renderBuffer; ///< モードによってはCubismOffscreenFrameのテクスチャを描画
axis::RenderTexture* _renderSprite; ///< _renderBufferを描画するスプライト
float _clearColor[4]; ///< _renderBufferをクリアする際の色
Csm::csmVector<axis::Texture2D*> _loadedTextures;
axis::GroupCommand _groupCommand;
};