00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "Briefing.hpp"
00020 #include "UpdateFrame.hpp"
00021
00022 #include <libintl.h>
00023 #define _(string) gettext(string)
00024
00025 CBriefing::CBriefing()
00026 {
00028 m_BitmapFont = NULL;
00029
00030 m_LogoSprite = NULL;
00031
00032 m_MouseX = NULL;
00033 m_MouseY = NULL;
00034 m_MouseDown = NULL;
00035
00036 m_ContentScroll = 0;
00037
00038 m_SubMenu = BRIEF_SUB_START;
00039
00040 m_ScrollingDown = false;
00041 m_ScrollingUp = false;
00042
00043 m_ButtonType = BRIEF_BUTTON_START;
00044
00045 m_Player = NULL;
00046
00047 m_LastFrameInc = 0;
00048 m_FrameDelay = 50;
00049
00050 m_CampaignName = "";
00051 }
00052
00053 CBriefing::~CBriefing()
00054 {
00055 delete m_LogoSprite;
00056 }
00057
00058 void CBriefing::Init(CBitmapFont* BitMapFont, int* MouseX, int* MouseY,
00059 bool* MouseDown, CPlayer* Player)
00060 {
00061 if(BitMapFont == NULL || MouseX == NULL || MouseY == NULL || MouseDown == NULL)
00062 {
00063 return;
00064 }
00065
00066 m_MouseX = MouseX;
00067 m_MouseY = MouseY;
00068 m_MouseDown = MouseDown;
00069 m_BitmapFont = BitMapFont;
00070 m_Player = Player;
00071
00072 m_BackSprite.SetImage(sgl::get_imagemgr().get_img("data/gfx/Briefing/briefing.png"));
00073
00074 m_StartUp.SetImage(sgl::get_imagemgr().get_img("data/gfx/Briefing/start_up.png"));
00075 m_StartUp.SetPosition(30,630);
00076 m_StartDown.SetImage(sgl::get_imagemgr().get_img("data/gfx/Briefing/start_down.png"));
00077 m_StartDown.SetPosition(m_StartUp.GetPosition().x,m_StartUp.GetPosition().y);
00078
00079 m_SaveUp.SetImage(sgl::get_imagemgr().get_img("data/gfx/Briefing/speichern_up.png"));
00080 m_SaveUp.SetPosition(m_StartUp.GetPosition().x,690);
00081 m_SaveDown.SetImage(sgl::get_imagemgr().get_img("data/gfx/Briefing/speichern_down.png"));
00082 m_SaveDown.SetPosition(m_StartUp.GetPosition().x,m_SaveUp.GetPosition().y);
00083
00084 m_CancelUp.SetImage(sgl::get_imagemgr().get_img("data/gfx/Briefing/abbrechen_up.png"));
00085 m_CancelUp.SetPosition(m_SaveUp.GetPosition().x,m_SaveUp.GetPosition().y);
00086 m_CancelDown.SetImage(sgl::get_imagemgr().get_img("data/gfx/Briefing/abbrechen_down.png"));
00087 m_CancelDown.SetPosition(m_SaveUp.GetPosition().x,m_SaveUp.GetPosition().y);
00088
00089 m_BackUp.SetImage(sgl::get_imagemgr().get_img("data/gfx/Briefing/zurück_up.png"));
00090 m_BackUp.SetPosition(m_SaveUp.GetPosition().x,690);
00091 m_BackDown.SetImage(sgl::get_imagemgr().get_img("data/gfx/Briefing/zurück_down.png"));
00092 m_BackDown.SetPosition(m_SaveUp.GetPosition().x,690);
00093
00094 m_FinishUp.SetImage(sgl::get_imagemgr().get_img("data/gfx/Briefing/abschliessen_up.png"));
00095 m_FinishUp.SetPosition(m_SaveUp.GetPosition().x,m_SaveUp.GetPosition().y);
00096 m_FinishDown.SetImage(sgl::get_imagemgr().get_img("data/gfx/Briefing/abschliessen_down.png"));
00097 m_FinishDown.SetPosition(m_SaveUp.GetPosition().x,m_SaveUp.GetPosition().y);
00098
00099 m_ScrollUp_Up.SetImage(sgl::get_imagemgr().get_img("data/gfx/Briefing/up_up.png"));
00100 m_ScrollUp_Up.SetPosition(960,240);
00101
00102 m_ScrollUp_Down.SetImage(sgl::get_imagemgr().get_img("data/gfx/Briefing/up_down.png"));
00103 m_ScrollUp_Down.SetPosition(m_ScrollUp_Up.GetPosition().x,m_ScrollUp_Up.GetPosition().y);
00104
00105 m_ScrollUpDisable.SetImage(sgl::get_imagemgr().get_img("data/gfx/Briefing/up_disable.png"));
00106 m_ScrollUpDisable.SetPosition(m_ScrollUp_Up.GetPosition().x,m_ScrollUp_Up.GetPosition().y);
00107
00108
00109 m_ScrollDown_Up.SetImage(sgl::get_imagemgr().get_img("data/gfx/Briefing/down_up.png"));
00110 m_ScrollDown_Up.SetPosition(m_ScrollUp_Up.GetPosition().x,700);
00111
00112 m_ScrollDown_Down.SetImage(sgl::get_imagemgr().get_img("data/gfx/Briefing/down_down.png"));
00113 m_ScrollDown_Down.SetPosition(m_ScrollDown_Up.GetPosition().x,m_ScrollDown_Up.GetPosition().y);
00114
00115 m_ScrollDownDisable.SetImage(sgl::get_imagemgr().get_img("data/gfx/Briefing/down_disable.png"));
00116 m_ScrollDownDisable.SetPosition(m_ScrollUpDisable.GetPosition().x,700);
00117
00118 m_SaveField.Init(BitMapFont, "data/gfx/Briefing/listselect.png");
00119 m_SaveField.SetSize(655,470);
00120 m_SaveField.SetPosition(270,250);
00121 }
00122
00123 void CBriefing::Update()
00124 {
00125 if(m_BitmapFont == NULL || m_MouseX == NULL || m_MouseY == NULL || m_MouseDown == NULL)
00126 {
00127 return;
00128 }
00129
00130 if(UpdateAll() == true)
00131 {
00132 m_Close = true;
00133 return;
00134 }
00135
00136 RenderAll();
00137 }
00138
00139 void CBriefing::RenderAll()
00140 {
00141 sgl::get_window().Draw(m_BackSprite);
00142
00143 m_BitmapFont->DrawText(220,80,m_Title,27);
00144
00145 m_CanScrollDown = false;
00146
00147 if(m_SubMenu == BRIEF_SUB_START)
00148 {
00149 RenderStart();
00150 }
00151 else if(m_SubMenu == BRIEF_SUB_SAVE)
00152 {
00153 RenderLoad();
00154 }
00155
00156
00157 if(m_ContentScroll <= 0)
00158 {
00159 sgl::get_window().Draw(m_ScrollUpDisable);
00160 }
00161 else
00162 {
00163 if(m_ScrollingUp == true)
00164 {
00165 sgl::get_window().Draw(m_ScrollUp_Down);
00166 }
00167 else
00168 {
00169 sgl::get_window().Draw(m_ScrollUp_Up);
00170 }
00171 }
00172
00173 if(m_CanScrollDown == false)
00174 {
00175 sgl::get_window().Draw(m_ScrollDownDisable);
00176 }
00177 else
00178 {
00179 if(m_ScrollingDown == true)
00180 {
00181 sgl::get_window().Draw(m_ScrollDown_Down);
00182 }
00183 else
00184 {
00185 sgl::get_window().Draw(m_ScrollDown_Up);
00186 }
00187 }
00188
00189 if(m_LogoSprite != NULL)
00190 {
00191 sgl::get_window().Draw(*m_LogoSprite);
00192
00193 if(sgl::get_clock().GetElapsedTime()*1000 - m_LastFrameInc > m_FrameDelay)
00194 {
00195 update_frame(*m_LogoSprite, frame_count);
00196 m_LastFrameInc = sgl::get_clock().GetElapsedTime()*1000;
00197 }
00198 }
00199 }
00200
00201 void CBriefing::RenderStart()
00202 {
00203 m_BitmapFont->DrawText(280,255,m_Content,25,670,430,m_ContentScroll,&m_CanScrollDown);
00204
00205 if(m_ButtonDown == true)
00206 {
00207 switch(m_ButtonType)
00208 {
00209 case BRIEF_BUTTON_START:
00210 sgl::get_window().Draw(m_StartDown);
00211 break;
00212 case BRIEF_BUTTON_CANCEL:
00213 sgl::get_window().Draw(m_CancelDown);
00214 break;
00215 case BRIEF_BUTTON_FINISH:
00216 sgl::get_window().Draw(m_FinishDown);
00217 break;
00218 }
00219 }
00220 else
00221 {
00222 switch(m_ButtonType)
00223 {
00224 case BRIEF_BUTTON_START:
00225 sgl::get_window().Draw(m_StartUp);
00226 break;
00227 case BRIEF_BUTTON_CANCEL:
00228 sgl::get_window().Draw(m_CancelUp);
00229 break;
00230 case BRIEF_BUTTON_FINISH:
00231 sgl::get_window().Draw(m_FinishUp);
00232 break;
00233 }
00234 }
00235
00236 if(m_ButtonType == BRIEF_BUTTON_START)
00237 {
00238 if(m_SaveButtonDown == false)
00239 {
00240 sgl::get_window().Draw(m_SaveUp);
00241 }
00242 else
00243 {
00244 sgl::get_window().Draw(m_SaveDown);
00245 }
00246 }
00247 }
00248
00249 void CBriefing::RenderLoad()
00250 {
00251 m_SaveField.Draw();
00252
00253 m_CanScrollDown = m_SaveField.CanScrollDown();
00254
00255 if(m_SaveButtonDown == false)
00256 {
00257 sgl::get_window().Draw(m_SaveUp);
00258 }
00259 else
00260 {
00261 sgl::get_window().Draw(m_SaveDown);
00262 }
00263
00264 if(m_ButtonDown == false)
00265 {
00266 sgl::get_window().Draw(m_BackUp);
00267 }
00268 else
00269 {
00270 sgl::get_window().Draw(m_BackDown);
00271 }
00272 }
00273
00274
00275 bool CBriefing::UpdateAll()
00276 {
00277 bool MouseDown = (*m_MouseDown);
00278
00279 if(m_HasHitMouse == true && MouseDown == false)
00280 {
00281 if(m_ButtonDown == true && m_SubMenu == BRIEF_SUB_START)
00282 {
00283 m_Close = true;
00284 }
00285 else if(m_ButtonDown == true && m_SubMenu == BRIEF_SUB_SAVE)
00286 {
00287 ChangeToStart();
00288 }
00289
00290 if(m_SaveButtonDown == true && m_SubMenu == BRIEF_SUB_START && m_ButtonType == BRIEF_BUTTON_START)
00291 {
00292 ChangeToSave();
00293 }
00294 else if(m_SaveButtonDown == true && m_SubMenu == BRIEF_SUB_SAVE && m_ButtonType == BRIEF_BUTTON_START)
00295 {
00296 Save();
00297 }
00298 }
00299
00300 int MouseX = (*m_MouseX);
00301 int MouseY = (*m_MouseY);
00302
00303 int ButtonX = 31;
00304 int ButtonY = 687;
00305
00306 if(MouseDown == true && m_SubMenu == BRIEF_SUB_START)
00307 {
00308 if(m_ButtonType == BRIEF_BUTTON_START)
00309 {
00310 ButtonY -= 60;
00311 }
00312
00313 if(MouseX > ButtonX && MouseX < ButtonX + m_StartUp.GetSubRect().GetWidth() &&
00314 MouseY > ButtonY && MouseY < ButtonY + m_StartUp.GetSubRect().GetHeight())
00315 {
00316 m_ButtonDown = true;
00317 }
00318 else
00319 {
00320 m_ButtonDown = false;
00321 }
00322
00323 if(m_ButtonType == BRIEF_BUTTON_START)
00324 {
00325 if(MouseX > ButtonX && MouseX < ButtonX + m_StartUp.GetSubRect().GetWidth() &&
00326 MouseY > ButtonY + 60 && MouseY < ButtonY + 60 + m_StartUp.GetSubRect().GetHeight())
00327 {
00328 m_SaveButtonDown = true;
00329 }
00330 else
00331 {
00332 m_SaveButtonDown = false;
00333 }
00334 }
00335 }
00336 else if(MouseDown == true && m_SubMenu == BRIEF_SUB_SAVE)
00337 {
00338 int ID = 0;
00339
00340 if(MouseX > m_SaveField.GetXPosition() && MouseX < m_SaveField.GetXPosition() + m_SaveField.GetXSize() &&
00341 MouseY > m_SaveField.GetYPosition() && MouseY < m_SaveField.GetYPosition() + m_SaveField.GetYSize() - 50)
00342 {
00343 ID = (MouseY - m_SaveField.GetYPosition()) / 32;
00344 m_SaveField.SelectEntryWithScroll(ID);
00345 }
00346
00347 if(MouseX > ButtonX && MouseX < ButtonX + m_StartUp.GetSubRect().GetWidth() &&
00348 MouseY > ButtonY && MouseY < ButtonY + m_StartUp.GetSubRect().GetHeight())
00349 {
00350 m_ButtonDown = true;
00351 }
00352 else
00353 {
00354 m_ButtonDown = false;
00355 }
00356
00357 ButtonY -= 60;
00358
00359 if(MouseX > ButtonX && MouseX < ButtonX + m_StartUp.GetSubRect().GetWidth() &&
00360 MouseY > ButtonY && MouseY < ButtonY + m_StartUp.GetSubRect().GetHeight())
00361 {
00362 m_SaveButtonDown = true;
00363 }
00364 else
00365 {
00366 m_SaveButtonDown = false;
00367 }
00368 }
00369 else
00370 {
00371 m_SaveButtonDown = false;
00372 m_ButtonDown = false;
00373 }
00374
00375 if(MouseDown == true)
00376 {
00377 if(MouseX > 951 && MouseX < 951 + m_StartUp.GetSubRect().GetWidth() &&
00378 MouseY > 227 && MouseY < 227 + m_StartUp.GetSubRect().GetHeight())
00379 {
00380 m_ScrollingUp = true;
00381 }
00382 else
00383 {
00384 m_ScrollingUp = false;
00385 }
00386
00387 if(MouseX > 951 && MouseX < 951 + m_ScrollDown_Up.GetSubRect().GetWidth() &&
00388 MouseY > 677 && MouseY < 677 + m_ScrollDown_Up.GetSubRect().GetHeight() && m_CanScrollDown == true)
00389 {
00390 m_ScrollingDown = true;
00391 }
00392 else
00393 {
00394 m_ScrollingDown = false;
00395 }
00396
00397 }
00398 else
00399 {
00400 m_ScrollingUp = false;
00401 m_ScrollingDown = false;
00402 }
00403
00404 if((m_ScrollingUp == true || m_ScrollingDown == true) && sgl::get_clock().GetElapsedTime()*1000 - m_LastScrollTime > BRIEF_SCROLL_DELAY)
00405 {
00406 if(m_ScrollingUp == true)
00407 {
00408 m_SaveField.Scroll(-1);
00409 if(m_ContentScroll > 0)
00410 {
00411 m_ContentScroll--;
00412 }
00413 else
00414 {
00415 m_ScrollingUp = false;
00416 }
00417 }
00418 else if(m_ScrollingDown == true)
00419 {
00420 m_SaveField.Scroll(1);
00421 m_ContentScroll++;
00422 }
00423 m_LastScrollTime = sgl::get_clock().GetElapsedTime()*1000;
00424 }
00425
00426 if(m_ScrollingDown == true && m_CanScrollDown == false)
00427 {
00428 m_ScrollingDown = false;
00429 }
00430
00431 m_HasHitMouse = MouseDown;
00432
00433 return false;
00434 }
00435
00436 void CBriefing::SetContent(std::string Title, std::string Content, std::string FileName, int ButtonType, unsigned int FrameCount, int FrameDelay)
00437 {
00438 m_SubMenu = BRIEF_SUB_START;
00439
00440 m_Title = Title;
00441 m_Content = Content;
00442
00443 if(m_LogoSprite != NULL)
00444 {
00445 delete m_LogoSprite;
00446 m_LogoSprite = NULL;
00447 }
00448
00449 if(FileName != "")
00450 {
00451 m_LogoSprite = new sf::Sprite;
00452 m_LogoSprite->SetImage(sgl::get_imagemgr().get_img(FileName));
00453 m_LogoSprite->SetSubRect(sf::IntRect(0, 0,160,160));
00454 frame_count = FrameCount;
00455 m_LogoSprite->SetPosition(50,255);
00456
00457 m_FrameDelay = FrameDelay;
00458 }
00459
00460 m_ButtonType = ButtonType;
00461
00462 m_ContentScroll = 0;
00463 }
00464
00465 void CBriefing::ChangeToSave()
00466 {
00467 m_SubMenu = BRIEF_SUB_SAVE;
00468
00469 m_SaveField.Clear();
00470
00471 m_SaveUp.SetPosition(m_SaveUp.GetPosition().y,m_SaveUp.GetPosition().y - 60);
00472 m_SaveDown.SetPosition(m_SaveUp.GetPosition().y,m_SaveUp.GetPosition().y);
00473
00474 FillSaveList();
00475
00476 m_ContentScroll = 0;
00477 }
00478
00479 void CBriefing::ChangeToStart()
00480 {
00481 m_SubMenu = BRIEF_SUB_START;
00482
00483 m_SaveUp.SetPosition(m_SaveUp.GetPosition().y,m_SaveUp.GetPosition().y + 60);
00484 m_SaveDown.SetPosition(m_SaveUp.GetPosition().y,m_SaveUp.GetPosition().y);
00485
00486 m_ContentScroll = 0;
00487 }
00488
00489 void CBriefing::Save()
00490 {
00491 if(m_Player == NULL)
00492 {
00493 return;
00494 }
00495
00496 std::string CurEntry;
00497 CurEntry = m_SaveField.GetCurEntry();
00498
00499 CSaveManager SaveManager;
00500
00501 int OldSelect = 0;
00502
00503 if(CurEntry == _("<New Savepoint>"))
00504 {
00505 SaveManager.Save("saves",m_CampaignName,m_CurMission,m_Player->GetLives());
00506 }
00507 else
00508 {
00509 SaveManager.ReadSavesFromFolder("saves");
00510
00511 SaveData* Data;
00512
00513 OldSelect = m_SaveField.GetCurSelectIndex() - 1;
00514 Data = SaveManager.GetSaveData(OldSelect);
00515
00516 if(Data != NULL)
00517 {
00518 SaveManager.SaveFile(Data->SaveFile,m_CampaignName,m_CurMission,m_Player->GetLives());
00519 }
00520 }
00521
00522 FillSaveList();
00523
00524 m_SaveField.SelectEntryWithoutScroll(OldSelect + 1);
00525 }
00526
00527 void CBriefing::FillSaveList()
00528 {
00529
00530
00531 CSaveManager SaveManager;
00532 SaveManager.ReadSavesFromFolder("saves");
00533 m_SaveField.Clear();
00534
00535 m_SaveField.AddEntry(_("<New Savepoint>"));
00536
00537 SaveData* Data;
00538 for(std::size_t CurData = 0; CurData < SaveManager.GetSaveCount(); CurData++)
00539 {
00540 Data = SaveManager.GetSaveData(CurData);
00541
00542 if(Data == NULL)
00543 {
00544 continue;
00545 }
00546
00547 m_SaveField.AddEntry(Data->ListName);
00548 }
00549 }