TapestryEngine

A 2D Platformer Game Engine
Log | Files | Refs

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