00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "Common/Time.h"
00012 #include "Render/Render.h"
00013 #include "Render/Font.h"
00014
00015 #include "Mod_Aeternis_Client/A_Interface.h"
00016
00017
00018 #include "Mod_Aeternis_Client/A_WinOptionsControllers.h"
00019
00020 #define GUIDIR( __gui ) KStr( "GUI/%s/%s", GETLANGUAGEPREFIX(), __gui )
00021
00022 #define BUTTONAPPLY GUIDIR("Apply")
00023 #define BUTTONAPPLYHL GUIDIR("Apply_HL")
00024 #define BUTTONAPPLYC GUIDIR("Apply_C")
00025 #define BUTTONBACK GUIDIR("Return")
00026 #define BUTTONBACKHL GUIDIR("Return_HL")
00027 #define BUTTONBACKC GUIDIR("Return_C")
00028
00029
00030
00031
00032 KAWinOptionsControllers::KAWinOptionsControllers( KWin* pFather, KFPt& Pos, KFPt& Size, KInterface* pInterface )
00033 : KWin( pFather, Pos, Size, pInterface )
00034 {
00035 m_BackGround = KSHADER_NO;
00036
00037 KFPt ButtonSize = KFPt( 0.25f, 0.04f );
00038
00039 m_pButtonApply = new KButton( this, KFPt( 0.2f, 0.9f ) - ButtonSize / 2, ButtonSize, m_pInterface );
00040
00041 m_pButtonBack = new KButton( this, KFPt( 0.8f, 0.9f ) - ButtonSize / 2, ButtonSize, m_pInterface );
00042
00043 KFPt KeySize = KFPt( 0.25f, 0.03f );
00044 float fDefaultPosY = 0.2f ;
00045
00046 m_pWinTab = new KWinTab(this,KFPt( 0.05f, 0.1f ),KFPt( 0.9f, 0.75f ), m_pInterface) ;
00047
00048 m_pWinTab->SetNbtab(E_TAB_COUNT) ;
00049 m_pWinTab->AddTab((char*)GETLOCALSTRING(E_TAB_ACTION),E_TAB_ACTION) ;
00050 m_pWinTab->AddTab((char*)GETLOCALSTRING(E_TAB_VOICECMD),E_TAB_VOICECMD) ;
00051 m_pWinTab->AddTab((char*)GETLOCALSTRING(E_TAB_HUD),E_TAB_HUD) ;
00052
00053 float fPosY = fDefaultPosY ;
00054
00055 for(u32 uiCpt = E_ACTIONS_FIRST_ACTION ; uiCpt < E_ACTIONS_FIRST_HUD ; uiCpt ++)
00056 {
00057 KAMappedKey* pKey = g_AInputManager.GetpMappedKey(uiCpt) ;
00058 m_pTabActionsName[uiCpt] = new KText(this, KFPt( 0.2f - KeySize.x / 2.0f, fPosY ), KeySize, m_pInterface,(char*)pKey->GetpLocalStringActionName()) ;
00059 m_pTabActionsKey[uiCpt].pButtonText = new KButton(this, KFPt( 0.8f - KeySize.x / 2.0f, fPosY ), KeySize, m_pInterface,pKey->GetpKeyName()) ;
00060 m_pTabActionsKey[uiCpt].bPressed = false ;
00061 fPosY += KeySize.y ;
00062
00063 m_pWinTab->AddControl(m_pTabActionsName[uiCpt], E_TAB_ACTION) ;
00064 m_pWinTab->AddControl(m_pTabActionsKey [uiCpt].pButtonText, E_TAB_ACTION) ;
00065
00066 }
00067
00068 fPosY = fDefaultPosY ;
00069
00070 for(u32 uiCpt = E_ACTIONS_FIRST_HUD ; uiCpt < E_ACTIONS_FIRST_VOICECMD ; uiCpt ++)
00071 {
00072 KAMappedKey* pKey = g_AInputManager.GetpMappedKey(uiCpt) ;
00073 m_pTabActionsName[uiCpt] = new KText(this, KFPt( 0.2f - KeySize.x / 2.0f, fPosY ), KeySize, m_pInterface,(char*)pKey->GetpLocalStringActionName()) ;
00074 m_pTabActionsKey[uiCpt].pButtonText = new KButton(this, KFPt( 0.8f - KeySize.x / 2.0f, fPosY ), KeySize, m_pInterface,pKey->GetpKeyName()) ;
00075 m_pTabActionsKey[uiCpt].bPressed = false ;
00076 fPosY += KeySize.y ;
00077
00078 m_pWinTab->AddControl(m_pTabActionsName[uiCpt], E_TAB_HUD) ;
00079 m_pWinTab->AddControl(m_pTabActionsKey [uiCpt].pButtonText, E_TAB_HUD) ;
00080
00081 }
00082
00083 fPosY = fDefaultPosY ;
00084
00085 for(u32 uiCpt = E_ACTIONS_FIRST_VOICECMD ; uiCpt < E_ACTIONS_COUNT ; uiCpt ++)
00086 {
00087 KAMappedKey* pKey = g_AInputManager.GetpMappedKey(uiCpt) ;
00088 m_pTabActionsName[uiCpt] = new KText(this, KFPt( 0.2f - KeySize.x / 2.0f, fPosY ), KeySize, m_pInterface,(char*)pKey->GetpLocalStringActionName()) ;
00089 m_pTabActionsKey[uiCpt].pButtonText = new KButton(this, KFPt( 0.8f - KeySize.x / 2.0f, fPosY ), KeySize, m_pInterface,pKey->GetpKeyName()) ;
00090 m_pTabActionsKey[uiCpt].bPressed = false ;
00091 fPosY += KeySize.y ;
00092
00093 m_pWinTab->AddControl(m_pTabActionsName[uiCpt], E_TAB_VOICECMD) ;
00094 m_pWinTab->AddControl(m_pTabActionsKey [uiCpt].pButtonText, E_TAB_VOICECMD) ;
00095 }
00096
00097 m_bWaitingMode = false;
00098 m_bIgnoreNextMouseEvent = false;
00099 }
00100
00101
00102 KAWinOptionsControllers::~KAWinOptionsControllers()
00103 {
00104 }
00105
00106
00107 void KAWinOptionsControllers::Display()
00108 {
00109 u8 FadeAlpha = (u8)(255.0f * GetFade());
00110
00111 m_pInterface->ShowMouse();
00112 DrawQuad( 0.0f, 0.0f, 1.0f, 1.0f, m_BackGround, KRGBA( 255, 255, 255, FadeAlpha ) );
00113 }
00114
00115
00116 void KAWinOptionsControllers::Manage()
00117 {
00118
00119 if( m_pButtonApply->IsClicked() )
00120 {
00121 m_pButtonApply->Reset() ;
00122 g_AInputManager.SaveConfigFile() ;
00123 ((KAInterface*)m_pInterface)->SetWin( KAIW_OPTIONS );
00124 }
00125
00126 if( m_pButtonBack->IsClicked() )
00127 {
00128 EnableButtons(true) ;
00129 m_bWaitingMode = false;
00130 g_AInputManager.ReadConfigFile() ;
00131 m_pButtonBack->Reset() ;
00132 for(u32 uiCpt = 0 ; uiCpt < E_ACTIONS_COUNT ; uiCpt ++)
00133 {
00134 KAMappedKey* pKey = g_AInputManager.GetpMappedKey(uiCpt) ;
00135 m_pTabActionsKey[uiCpt].pButtonText->SetpText(pKey->GetpKeyName()) ;
00136 }
00137 ((KAInterface*)m_pInterface)->SetWin( KAIW_OPTIONS );
00138 }
00139
00140 for(u32 uiCpt = 0 ; uiCpt < E_ACTIONS_COUNT ; uiCpt ++)
00141 {
00142 if(m_pTabActionsKey[uiCpt].pButtonText->IsClicked())
00143 {
00144 m_pTabActionsKey[uiCpt].pButtonText->SetpText( NULL ) ;
00145 PressButton(uiCpt) ;
00146 EnableButtons(false) ;
00147 m_bWaitingMode = true;
00148 m_pTabActionsKey[uiCpt].pButtonText->Reset() ;
00149 }
00150 }
00151 }
00152
00153
00154 bool KAWinOptionsControllers::OnKeyDown( u32 Virtkey, u32 KeyData )
00155 {
00156 KKEY uKey = (KKEY)Virtkey;
00157
00158 if( m_bWaitingMode )
00159 {
00160 for(u32 uiCpt = 0 ; uiCpt < E_ACTIONS_COUNT ; uiCpt ++)
00161 {
00162 if(m_pTabActionsKey[uiCpt].bPressed)
00163 {
00164 if(IsKeyAlreadyAffected(uiCpt,uKey))
00165 {
00166 m_pTabActionsKey[uiCpt].pButtonText->SetpText((char*)GETLOCALSTRING(LS_KEY_ALREADY_USED)) ;
00167 }
00168 else if( g_AInputManager.IsMappable( uKey ) )
00169 {
00170 g_AInputManager.SetKey(uiCpt,uKey) ;
00171 KAMappedKey* pKey = g_AInputManager.GetpMappedKey(uiCpt) ;
00172 m_pTabActionsKey[uiCpt].pButtonText->SetpText(pKey->GetpKeyName()) ;
00173 PressButton(E_ACTIONS_COUNT) ;
00174 EnableButtons(true) ;
00175 m_bWaitingMode = false;
00176 m_pTabActionsKey[uiCpt].pButtonText->Reset() ;
00177
00178
00179 if( Virtkey == VK_MOUSEBUTTON1 )
00180 m_bIgnoreNextMouseEvent = true;
00181 }
00182 else
00183 m_pTabActionsKey[uiCpt].pButtonText->SetpText((char*)GETLOCALSTRING(LS_KEY_RESERVED)) ;
00184
00185 }
00186 }
00187 }
00188
00189 return true;
00190 }
00191
00192
00193 bool KAWinOptionsControllers::OnMouseEvent( KWMOUSEEVENT Event, u32 Param )
00194 {
00195 if( m_bIgnoreNextMouseEvent )
00196 {
00197 m_bIgnoreNextMouseEvent = false;
00198 return true;
00199 }
00200
00201 return false;
00202 }
00203
00204
00205 void KAWinOptionsControllers::EnableButtons(bool bEnable)
00206 {
00207 for(u32 uiCpt = 0 ; uiCpt < E_ACTIONS_COUNT ; uiCpt ++)
00208 {
00209 m_pTabActionsKey[uiCpt].pButtonText->Enable(bEnable) ;
00210 }
00211
00212 m_pButtonApply->Enable(bEnable) ;
00213 }
00214
00215
00216 void KAWinOptionsControllers::PressButton(u32 eAction)
00217 {
00218 for(u32 uiCpt = 0 ; uiCpt < E_ACTIONS_COUNT ; uiCpt ++)
00219 {
00220 m_pTabActionsKey[uiCpt].bPressed = false ;
00221 }
00222 if(eAction != E_ACTIONS_COUNT)
00223 m_pTabActionsKey[eAction].bPressed = true ;
00224 }
00225
00226 bool KAWinOptionsControllers::IsKeyAlreadyAffected(u32 uiAction,KKEY uKey)
00227 {
00228 for(u32 uiCpt = 0 ; uiCpt < E_ACTIONS_COUNT ; uiCpt ++)
00229 {
00230 KAMappedKey* pKey = g_AInputManager.GetpMappedKey(uiCpt) ;
00231 if((pKey->GetKey() == uKey) && (uiAction != uiCpt))
00232 return true ;
00233 }
00234 return false ;
00235 }
00236
00237
00238 void KAWinOptionsControllers::Load()
00239 {
00240 KWin::Load();
00241
00242 for(u32 uiCpt = 0 ; uiCpt < E_ACTIONS_COUNT ; uiCpt ++)
00243 {
00244 KAMappedKey* pKey = g_AInputManager.GetpMappedKey(uiCpt) ;
00245 m_pTabActionsName[uiCpt]->SetpText((char*)pKey->GetpLocalStringActionName()) ;
00246 }
00247
00248 KASSERT( m_BackGround == KSHADER_NO );
00249 m_BackGround = m_pRender->GetpShaderBank()->LoadShader( GUIDIR("Controllers_bg") );
00250 m_pButtonApply->SetShaders( BUTTONAPPLY, BUTTONAPPLYHL, BUTTONAPPLYC );
00251 m_pButtonBack->SetShaders( BUTTONBACK, BUTTONBACKHL, BUTTONBACKC );
00252
00253 m_pWinTab->SetTabName((char*)GETLOCALSTRING(E_TAB_ACTION),E_TAB_ACTION) ;
00254 m_pWinTab->SetTabName((char*)GETLOCALSTRING(E_TAB_VOICECMD),E_TAB_VOICECMD) ;
00255 m_pWinTab->SetTabName((char*)GETLOCALSTRING(E_TAB_HUD),E_TAB_HUD) ;
00256
00257 m_pWinTab->ActiveTab(0) ;
00258 }
00259
00260
00261 void KAWinOptionsControllers::Unload()
00262 {
00263 KWin::Unload();
00264
00265 if( m_BackGround != KSHADER_NO )
00266 m_pRender->GetpShaderBank()->UnloadShader( m_BackGround );
00267 }