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