#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=""; displayText=""; text=""; } 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]; textboxMarker++; } lastLetterTime=letterDisplayDelay; } } void Textbox::Draw(PixelGameEngine*pge,Resources&resources){ if(visible){ vf2d finalPos=pos; geom2d::rectboxRect={pos-vf2d{2,2},maxSize+vf2d{4,4}}; pge->FillRectDecal(pos-vf2d{2,2},maxSize+vf2d{4,4},VERY_DARK_GREEN); pge->DrawRectDecal(pos-vf2d{1,1},maxSize+vf2d{3,3},WHITE); pge->DrawShadowStringPropDecal(pos+vf2d{1,1},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); }