1 /*---------------------------------------------------------------------------* 2 Project: NintendoWare 3 File: snd_MoveValue.h 4 5 Copyright (C)2009-2010 Nintendo Co., Ltd./HAL Laboratory, Inc. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Revision: 13145 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NW_SND_MOVE_VALUE_H_ 17 #define NW_SND_MOVE_VALUE_H_ 18 19 namespace nw { 20 namespace snd { 21 namespace internal { 22 23 template< typename ValueType, typename CountType > 24 class MoveValue 25 { 26 public: 27 /*---------------------------------------------------------------------------* 28 Name: MoveValue 29 30 Description: コンストラクタ 31 32 Arguments: なし 33 34 Returns: なし 35 *---------------------------------------------------------------------------*/ MoveValue()36 MoveValue() : m_Origin(0), m_Target(0), m_Frame(0), m_Counter(0) {} 37 38 /*---------------------------------------------------------------------------* 39 Name: InitValue 40 41 Description: 値を初期化 42 43 Arguments: value : 初期化値 44 45 Returns: なし 46 *---------------------------------------------------------------------------*/ InitValue(ValueType value)47 void InitValue( ValueType value ) 48 { 49 m_Origin = value; 50 m_Target = value; 51 m_Frame = 0; 52 m_Counter = 0; 53 } 54 55 /*---------------------------------------------------------------------------* 56 Name: SetTarget 57 58 Description: 変化させる値の目的値を設定する 59 60 Arguments: targetValue : 目的値 61 frames : 変化に要するフレーム数 62 63 Returns: なし 64 *---------------------------------------------------------------------------*/ SetTarget(ValueType targetValue,CountType frames)65 void SetTarget( ValueType targetValue, CountType frames ) 66 { 67 m_Origin = GetValue(); 68 m_Target = targetValue; 69 m_Frame = frames; 70 m_Counter = 0; 71 } 72 73 /*---------------------------------------------------------------------------* 74 Name: GetTarget 75 76 Description: 変化させる値の目的値を取得する 77 78 Arguments: targetValue : 目的値 79 frames : 変化に要するフレーム数 80 81 Returns: なし 82 *---------------------------------------------------------------------------*/ GetTarget()83 ValueType GetTarget() const { return m_Target; } 84 85 /*---------------------------------------------------------------------------* 86 Name: GetValue 87 88 Description: 現在の値を取得する 89 90 Arguments: なし 91 92 Returns: 現在の値 93 *---------------------------------------------------------------------------*/ GetValue()94 ValueType GetValue() const 95 { 96 if ( IsFinished() ) return m_Target; 97 return static_cast<ValueType>( 98 m_Origin + ( m_Target - m_Origin ) * m_Counter / m_Frame 99 ); 100 } 101 102 /*---------------------------------------------------------------------------* 103 Name: Update 104 105 Description: 値を更新する 106 107 Arguments: なし 108 109 Returns: なし 110 *---------------------------------------------------------------------------*/ Update()111 void Update() { if ( m_Counter < m_Frame ) ++m_Counter; } 112 113 /*---------------------------------------------------------------------------* 114 Name: IsFinished 115 116 Description: カウンタが完了しているかどうかを返す 117 118 Arguments: なし 119 120 Returns: 完了していたら true 121 *---------------------------------------------------------------------------*/ IsFinished()122 bool IsFinished() const { return m_Counter >= m_Frame; } 123 124 /*---------------------------------------------------------------------------* 125 Name: GetRemainingCount 126 127 Description: ターゲット値に達するまでの残りのUpdate回数を取得する 128 129 Arguments: なし 130 131 Returns: 残りのUpdate回数 132 *---------------------------------------------------------------------------*/ GetRemainingCount()133 CountType GetRemainingCount() const 134 { 135 if ( IsFinished() ) return static_cast<CountType>( 0 ); 136 return m_Frame - m_Counter; 137 } 138 139 private: 140 ValueType m_Origin; 141 ValueType m_Target; 142 CountType m_Frame; 143 CountType m_Counter; 144 }; 145 146 } // namespace nw::snd::internal 147 } // namespace nw::snd 148 } // namespace nw 149 150 #endif /* NW_SND_MOVE_VALUE_H_ */ 151