116da4183c48d64f674710a4205399bcfcb71e54.svn-base (3230B)
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, char* red) : Widget(ren, { 0,0,0,0 }) 68 { 69 mDisplay = false; 70 71 mBlack.img = SDL_CreateTextureFromSurface(mren, LoadSurfaceBMP(black)); 72 mRed.img = SDL_CreateTextureFromSurface(mren, LoadSurfaceBMP(red)); 73 74 mBlack.pos = mPos; 75 } 76 77 void Fader::PlayFade(int duration, int color, int opacity) 78 { 79 mDisplay = true; 80 mOpacity = 0; 81 82 mOpacityTarget = opacity; 83 mFadeColor = color; 84 mTimer = gTime->GetCurrentCycle(); 85 mFadeTime = duration / 2; 86 } 87 88 bool Fader::WidgetUpdate() 89 { 90 if (mDisplay == true) 91 { 92 if (gTime->GetCurrentCycle() - mTimer <= mFadeTime) //if the timer is less than the fade-in/out time 93 { 94 mOpacity = (int)( ((float)(gTime->GetCurrentCycle() - mTimer) / (float)mFadeTime) * (float)mOpacityTarget ); 95 } 96 else if (gTime->GetCurrentCycle() - mTimer <= 2 * mFadeTime) //if the time is not less then the fade time, but is less than the total time 97 { 98 mOpacity = (int)( ((float)mFadeTime / (float)(gTime->GetCurrentCycle() - mTimer)) * (float)mOpacityTarget ); 99 } 100 else //if the timer is over the fade time 101 { 102 mDisplay = false; 103 } 104 } 105 106 return true; 107 } 108 109 bool Fader::WidgetDraw() 110 { 111 if (mDisplay == true) 112 { 113 switch (mFadeColor) 114 { 115 case FADE_BLACK: 116 SDL_RenderCopy(mren, mBlack.img, NULL, NULL); 117 SDL_SetTextureAlphaMod(mBlack.img, mOpacity); 118 break; 119 case FADE_RED: 120 SDL_RenderCopy(mren, mRed.img, NULL, NULL); 121 SDL_SetTextureAlphaMod(mRed.img, mOpacity); 122 break; 123 default: 124 gCons->ConsPrintf("Unknown fade color\n"); 125 } 126 } 127 return true; 128 } 129 130 bool Fader::EventProcess(Event eve) 131 { 132 switch (*eve.GetEventType()) 133 { 134 case FADE: 135 PlayFade(eve.GetEventData()->fd.duration, eve.GetEventData()->fd.color, eve.GetEventData()->fd.opacity); 136 break; 137 case TERMINATE_DIALOGUE: 138 case SCROLL: 139 case DIALOGUE: 140 break; 141 default: 142 gCons->ConsPrintf("Fader received unrecognized event\n"); 143 return false; 144 break; 145 } 146 return true; 147 } 148 //