df5a6ded4ba9b91df4774d337b68c84bc6ce8e50.svn-base (2734B)
1 #include "HUD.h" 2 3 SDL_Rect CalcElementScreenPosition(Widget* wid, SDL_Rect elementRect) 4 { 5 elementRect.x += wid->GetPos()->x; 6 elementRect.y += wid->GetPos()->y; 7 8 return elementRect; 9 }; 10 11 bool HUD::LogWidget(Widget* wid) 12 { 13 assert(mIndex < 10); 14 mWidgets[mIndex] = wid; 15 mIndex += 1; 16 return true; 17 } 18 19 bool HUD::UpdateWidgets() 20 { 21 for (int i = 0; i < mIndex; i++) 22 { 23 mWidgets[i]->WidgetUpdate(); 24 } 25 return true; 26 } 27 28 bool HUD::DrawWidgets() 29 { 30 for (int i = 0; i < mIndex; i++) 31 { 32 mWidgets[i]->WidgetDraw(); 33 } 34 return true; 35 } 36 37 LifeMeter::LifeMeter(Player* target, SDL_Rect pos, SDL_Renderer* ren, char* life_base, char* life_bar) : Widget(ren, pos) 38 { 39 mHPmax = target->GetMaxHP(); 40 mHP = target->GetHP(); 41 42 mBase.img = SDL_CreateTextureFromSurface(mren, LoadSurfaceBMP(life_base)); 43 mLifebar.img = SDL_CreateTextureFromSurface(mren, LoadSurfaceBMP(life_bar )); 44 45 mBase.pos = mPos; 46 mLifebar.pos.x = 0; 47 mLifebar.pos.y = 0; 48 mLifebar.pos.h = mPos.h; 49 mLifebar.pos.w = mPos.w; 50 } 51 52 bool LifeMeter::WidgetUpdate() 53 { 54 mLifebar.pos.w = (int)( (mBase.pos.w)*(( (float)(*mHP) ) / ( (float)(*mHPmax)) ) ); 55 return true; 56 } 57 58 bool LifeMeter::WidgetDraw() 59 { 60 SDL_RenderCopy(mren, mBase.img, NULL, &mBase.pos); 61 SDL_RenderCopy(mren, mLifebar.img, NULL, &CalcElementScreenPosition(this, mLifebar.pos) ); 62 return true; 63 } 64 // 65 66 //Fader 67 Fader::Fader(SDL_Renderer* ren, char* black) : Widget(ren, { 0,0,0,0 }) 68 { 69 mDisplay = false; 70 71 mBlack.img = SDL_CreateTextureFromSurface(mren, LoadSurfaceBMP(black)); 72 mBlack.pos = mPos; 73 } 74 75 void Fader::PlayFade(int duration) 76 { 77 mDisplay = true; 78 mOpacity = 0; 79 80 mTimer = gTime->GetCurrentCycle(); 81 mFadeTime = duration / 2; 82 } 83 84 bool Fader::WidgetUpdate() 85 { 86 if (mDisplay == true) 87 { 88 if (gTime->GetCurrentCycle() - mTimer <= mFadeTime) //if the timer is less than the fade-in/out time 89 { 90 mOpacity = (int)( ((float)(gTime->GetCurrentCycle() - mTimer) / (float)mFadeTime) * 255.0 ); 91 } 92 else if (gTime->GetCurrentCycle() - mTimer <= 2 * mFadeTime) //if the time is not less then the fade time, but is less than the total time 93 { 94 mOpacity = (int)( ((float)mFadeTime / (float)(gTime->GetCurrentCycle() - mTimer)) * 255.0 ); 95 } 96 else //if the timer is over the fade time 97 { 98 mDisplay = false; 99 } 100 } 101 102 return true; 103 } 104 105 bool Fader::WidgetDraw() 106 { 107 if (mDisplay == true) 108 { 109 SDL_RenderCopy(mren, mBlack.img, NULL, NULL); 110 SDL_SetTextureAlphaMod(mBlack.img, mOpacity); 111 } 112 return true; 113 } 114 115 bool Fader::EventProcess(Event eve) 116 { 117 switch (*eve.GetEventType()) 118 { 119 case FADE: 120 PlayFade(eve.GetEventData()->i); 121 break; 122 case TERMINATE_DIALOGUE: 123 case SCROLL: 124 case DIALOGUE: 125 break; 126 default: 127 gCons->ConsPrintf("Fader received unrecognized event\n"); 128 return false; 129 break; 130 } 131 return true; 132 } 133 //