00001 //------------------------------------------------------------------------------ 00002 // Lamp : Open source game middleware 00003 // Copyright (C) 2004 Junpei Ohtani ( Email : junpee@users.sourceforge.jp ) 00004 // 00005 // This library is free software; you can redistribute it and/or 00006 // modify it under the terms of the GNU Lesser General Public 00007 // License as published by the Free Software Foundation; either 00008 // version 2.1 of the License, or (at your option) any later version. 00009 // 00010 // This library is distributed in the hope that it will be useful, 00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 // Lesser General Public License for more details. 00014 // 00015 // You should have received a copy of the GNU Lesser General Public 00016 // License along with this library; if not, write to the Free Software 00017 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00018 //------------------------------------------------------------------------------ 00019 00020 /** @file 00021 * アドレスモードスプライトステートヘッダ 00022 * @author Junpee 00023 */ 00024 00025 #ifndef ADDRESS_MODE_SPRITE_STATE_H_ 00026 #define ADDRESS_MODE_SPRITE_STATE_H_ 00027 00028 #include "Graphics2D/SpriteState/SpriteState.h" 00029 00030 namespace Lamp{ 00031 00032 //------------------------------------------------------------------------------ 00033 /** 00034 * アドレスモードスプライトステート 00035 */ 00036 class AddressModeSpriteState : public SpriteState{ 00037 public: 00038 //-------------------------------------------------------------------------- 00039 // テンプレートステート 00040 //-------------------------------------------------------------------------- 00041 /// クランプ 00042 static const AddressModeSpriteState clampState; 00043 00044 /// ラップ 00045 static const AddressModeSpriteState wrapState; 00046 00047 /// ミラー 00048 static const AddressModeSpriteState mirrorState; 00049 00050 /// デフォルト 00051 static const AddressModeSpriteState defaultState; 00052 00053 //-------------------------------------------------------------------------- 00054 // アドレスモード 00055 //-------------------------------------------------------------------------- 00056 /// アドレスモード 00057 enum AddressMode{ 00058 addressModeWrap = 0, 00059 addressModeClamp, 00060 addressModeMirror, 00061 addressModeMax, 00062 }; 00063 00064 /** 00065 * アドレスモードから文字列への変換 00066 * @param addressMode アドレスモード 00067 * @return アドレスモード文字列 00068 */ 00069 static const String& addressModeToString(AddressMode addressMode); 00070 00071 /** 00072 * 文字列からアドレスモードへの変換 00073 * @param addressModeString アドレスモード文字列 00074 * @return アドレスモード 00075 */ 00076 static AddressMode addressModeFromString(const String& addressModeString); 00077 00078 //-------------------------------------------------------------------------- 00079 // 生成、破棄 00080 //-------------------------------------------------------------------------- 00081 /** 00082 * コンストラクタ 00083 */ 00084 AddressModeSpriteState(); 00085 00086 /** 00087 * コンストラクタ 00088 * @param addressModeU アドレスモードU 00089 * @param addressModeV アドレスモードV 00090 */ 00091 AddressModeSpriteState(AddressMode addressModeU, AddressMode addressModeV); 00092 00093 /** 00094 * デストラクタ 00095 */ 00096 virtual ~AddressModeSpriteState(); 00097 00098 //-------------------------------------------------------------------------- 00099 // デフォルトステート 00100 //-------------------------------------------------------------------------- 00101 /** 00102 * デフォルトステートの取得 00103 * @return デフォルトステート 00104 */ 00105 virtual const SpriteRequest* getDefaultState() const{ 00106 return &defaultState; 00107 } 00108 00109 //-------------------------------------------------------------------------- 00110 // 描画 00111 //-------------------------------------------------------------------------- 00112 /** 00113 * 適用 00114 * @param renderState レンダーステート 00115 */ 00116 virtual void apply(SpriteRenderState* renderState); 00117 00118 //-------------------------------------------------------------------------- 00119 // アドレス 00120 //-------------------------------------------------------------------------- 00121 /** 00122 * アドレスモードの設定 00123 * @param addressModeU アドレスモードU 00124 * @param addressModeV アドレスモードV 00125 */ 00126 virtual void setAddressMode( 00127 AddressMode addressModeU, AddressMode addressModeV){ 00128 Assert((addressModeU >= 0) && (addressModeU < addressModeMax)); 00129 Assert((addressModeV >= 0) && (addressModeV < addressModeMax)); 00130 addressModeU_ = addressModeU; 00131 addressModeV_ = addressModeV; 00132 } 00133 00134 //-------------------------------------------------------------------------- 00135 /** 00136 * アドレスモードUの設定 00137 * @param addressModeU アドレスモードU 00138 */ 00139 virtual void setAddressModeU(AddressMode addressModeU){ 00140 Assert((addressModeU >= 0) && (addressModeU < addressModeMax)); 00141 addressModeU_ = addressModeU; 00142 } 00143 00144 /** 00145 * アドレスモードUの取得 00146 * @return アドレスモードU 00147 */ 00148 virtual AddressMode getAddressModeU() const{ return addressModeU_; } 00149 00150 //-------------------------------------------------------------------------- 00151 /** 00152 * アドレスモードVの設定 00153 * @param addressModeV アドレスモードV 00154 */ 00155 virtual void setAddressModeV(AddressMode addressModeV){ 00156 Assert((addressModeV >= 0) && (addressModeV < addressModeMax)); 00157 addressModeV_ = addressModeV; 00158 } 00159 00160 /** 00161 * アドレスモードVの取得 00162 * @return アドレスモードV 00163 */ 00164 virtual AddressMode getAddressModeV() const{ return addressModeV_; } 00165 00166 private: 00167 //-------------------------------------------------------------------------- 00168 // アドレスモードU 00169 AddressMode addressModeU_; 00170 // アドレスモードV 00171 AddressMode addressModeV_; 00172 00173 // アドレスモード文字列テーブル 00174 static const String addressModeStringTable[]; 00175 00176 }; 00177 00178 //------------------------------------------------------------------------------ 00179 } // End of namespace Lamp 00180 #endif // End of ADDRESS_MODE_SPRITE_STATE_H_ 00181 //------------------------------------------------------------------------------