/*---------------------------------------------------------------------------* Project: NintendoWare File: SmModel.h Copyright (C)2009-2010 Nintendo Co., Ltd./HAL Laboratory, Inc. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Revision: 1 $ *---------------------------------------------------------------------------*/ #ifndef SM_MODEL_H_ #define SM_MODEL_H_ #include #include "../include/SmBase.h" //------------------------------------------------------------------------------ // NW4C モデル各機能へのアクセサクラス class SmModel : public SmBase { friend class GfxCtrl; // アニメーション配列 #define ANIM_COUNT (32) typedef nw::ut::FixedSizeArray AnimEvaluatorArray; private: // コンストラクタ SmModel(); // コンストラクタ ~SmModel(); public: // ノードをセットする void SetSceneNode( nw::gfx::SceneNode* pParentNode, nw::gfx::SceneNode* pSceneNode = NULL ); // ノードを取得する nw::gfx::SceneNode* GetSceneNode() const { return m_pSceneNode; } // モデルをセットする void SetModel( nw::gfx::Model* pModel, nw::gfx::SkeletalModel* pSkelModel ); // アップデート void Update(); /* 配置機能 */ // 位置 void SetPosition( f32 x, f32 y, f32 z ); // 拡縮 void SetScale( f32 x, f32 y, f32 z ); // 回転 void SetRotate( f32 x, f32 y, f32 z ); // マトリクス void SetMatrix( const nw::math::MTX34* matrix ); void SetWorldMatrix( const nw::math::MTX34* matrix ); // 表示/非表示 void SetVisible( bool visible ); void SwapVisible(); bool IsVisible(); // 複製する SmModel* Duplicate(); /* アニメーション機能 */ // アニメーションを追加する void AddAnimEvaluator( nw::gfx::TransformAnimEvaluator* animEvaluator ); // アニメーション数を取得する uint GetAnimEvaluatorNum() const; // アニメーションを設定する bool SetAnimEvaluatorNo( uint animEvaluatorNo ); // アニメーションフレームを設定する void SetAnimationFrame( f32 setFrame ); // アニメーションフレームを進める bool AddAnimationFrame( f32 addFrame, bool loop = true ); // アニメーションフレームを取得する f32 GetAnimationFrame() const; // 設定されているアニメーションの最大フレームを取得する f32 GetAnimationMaxFrame() const; /* マテリアルアニメーション機能 */ // マテリアルアニメーションを設定する bool SetMaterialAnim( nw::gfx::AnimEvaluator* animEvaluator ); /* 親子継承を解決する機能 */ void SetConstrainId( s32 nodeId ); /* テスト機能 */ void SetVisibleZone( f32 term ); void SetLayerId( u8 id ) { if ( m_SkeletalModel ) { m_SkeletalModel->SetLayerId( id ); } } u8 GetLayerId() const { if ( m_SkeletalModel ) { return m_SkeletalModel->GetLayerId(); } return 0; } private: // 親子継承を解決 void updateConstrain(); private: nw::gfx::SceneNode* m_pParentNode; nw::gfx::SceneNode* m_pSceneNode; nw::gfx::Model* m_Model; nw::gfx::SkeletalModel* m_SkeletalModel; AnimEvaluatorArray m_AnimEvaluatorArray; f32 m_AnimationFrame; s32 m_CurrentAnimEvNo; s32 m_CostrainId; bool m_Duplicated; }; #endif // SM_MODEL_H_