TapestryEngine

A 2D Platformer Game Engine
Log | Files | Refs

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 //