#include "Textbox.h" #include "olcUTIL_Geometry2D.h" Textbox::Textbox(){}; void Textbox::Initialize(std::string text,vf2d pos,std::string headerText,vf2d maxSize,std::vectorresourceCost,float letterDisplayDelay) { if(GetCurrentString()!=text){ //Make sure this is actually a new textbox SetDefaults(); this->text=text; this->headerText=headerText; this->maxSize=maxSize; this->resourceCost=resourceCost; this->letterDisplayDelay=letterDisplayDelay; visible=true; } } void Textbox::SetDefaults(){ lastLetterTime=0; textboxMarker=-1; lastWordMarker=-1; lastWord=""; lastHeaderWordMarker=-1; lastHeaderWord=""; displayText=""; displayHeaderText=""; text=""; headerText=""; } void Textbox::Update(PixelGameEngine*pge){ lastLetterTime-=pge->GetElapsedTime(); if(lastLetterTime<=0){ if(textboxMarkerGetTextSizeProp(tempText).x>=maxSize.x){ displayText=displayText.substr(0,lastWordMarker); displayText+='\n'; displayText+=lastWord; } if(text[textboxMarker+1]==' '||text[textboxMarker+1]=='\n'){ lastWord=""; lastWordMarker=textboxMarker+2; } else { lastWord+=text[textboxMarker+1]; } displayText+=text[textboxMarker+1]; }; WrapText(tempText,text,displayText,lastWordMarker,lastWord); if(textboxMarkerGetTextSizeProp(displayHeaderText).y+pge->GetTextSizeProp(displayText).y)); lastLetterTime=letterDisplayDelay; } } void Textbox::Draw(PixelGameEngine*pge,Resources&resources){ if(visible){ geom2d::rectboxRect={pos-vf2d{3,3},maxSize+vf2d{6,6}}; if(boxRect.bottom().start.y>=pge->ScreenHeight()){ boxRect.pos-={0,boxRect.bottom().start.y-pge->ScreenHeight()}; } if(boxRect.right().start.x>=pge->ScreenWidth()){ boxRect.pos-={boxRect.right().start.x-pge->ScreenWidth(),0}; } if(boxRect.top().start.y<0){ boxRect.pos+={0,-boxRect.top().start.y}; } if(boxRect.left().start.x<0){ boxRect.pos+={-boxRect.left().start.x,0}; } pge->FillRectDecal(boxRect.pos,maxSize+vf2d{6,6},VERY_DARK_GREEN); pge->DrawRectDecal(boxRect.pos+vf2d{1,1},maxSize+vf2d{4,4},WHITE); pge->DrawShadowStringPropDecal(boxRect.pos+vf2d{3,3},displayHeaderText,{245, 218, 66}); pge->DrawShadowStringPropDecal(boxRect.pos+vf2d{3.f,float(3+pge->GetTextSizeProp(displayHeaderText).y)},displayText,{220,220,220}); } } void Textbox::UpdatePosition(vf2d newPos){ pos=newPos; } std::string&Textbox::GetCurrentString(){ return text; } void Textbox::SetVisible(bool visible){ this->visible=visible; if(!visible){ SetDefaults(); } } void Textbox::UpdateAndDraw(vf2d pos,PixelGameEngine*pge,Resources&resources){ UpdatePosition(pos); Update(pge); Draw(pge,resources); } vf2d Textbox::GetSize(){ return maxSize; }