#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++; maxSize.y=std::max(maxSize.y,float(pge->GetTextSizeProp(tempText).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},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; }