#define OLC_PGE_APPLICATION #include "olcPixelGameEngine.h" // Override base class with your custom functionality class Example : public olc::PixelGameEngine { public: Example() { // Name your application sAppName = "Console Example"; } public: std::vectorconsole; const float BLINK_TIME=1.f; float cursorTime=0.0f; bool cursorOn=false; olc::Pixel color = olc::DARK_BLUE; bool OnUserCreate() override { // Called once at the start, so create things here return true; } void OnTextEntryComplete(const std::string& sText) override { console.clear(); console.push_back("You typed:"); console.push_back(" "+sText); console.push_back("==================="); console.push_back("This is the part where I tell you that something might happen. Or it might not..."); console.push_back("If you press F1 something interesting might happen."); } std::string WrapText(std::string str,int width,bool proportional=false,olc::vf2d scale={1,1}) { std::string newStr; while (true) { std::string word; if (str.find(" ")==std::string::npos) { word=str; } else { word = str.substr(0,str.find(" ")); } olc::vi2d newSize = (proportional?GetTextSizeProp(newStr+(newStr.size()>0?" ":"")+word):GetTextSize(newStr+(newStr.size()>0?" ":"")+word))*scale; if (newSize.x>width) { newStr+="\n"+word; } else { newStr+=(newStr.size()>0?" ":"")+word; } if (str.find(" ")==std::string::npos) { break; } else { str.erase(0,str.find(" ")+1); } } return newStr; } bool OnUserUpdate(float fElapsedTime) override { if (!IsTextEntryEnabled()){ TextEntryEnable(true,""); } cursorTime+=fElapsedTime; if (cursorTime > BLINK_TIME){ cursorTime-=BLINK_TIME; cursorOn=!cursorOn; } if (GetKey(olc::F1).bPressed){ console.clear(); console.push_back("Nice!"); color=olc::DARK_GREEN; } Clear(color); DrawRect(0,0,ScreenWidth()-1, ScreenHeight()-1, olc::YELLOW); std::string mouseText="Cursor Position: "+GetMousePos().str(); FillRectDecal({1,1},{(float)ScreenWidth()-2,20},olc::BLACK); int drawPosY=ScreenHeight()-32; DrawStringDecal({8,4},mouseText,olc::WHITE); for (int i=console.size()-1;i>=0;i--){ if (drawPosY>=24){ std::string wrappedVersion=WrapText(console[i],ScreenWidth()-16); DrawStringDecal({8,(float)drawPosY - GetTextSize(wrappedVersion).y},wrappedVersion); drawPosY-=GetTextSize(wrappedVersion).y+12; } drawPosY-=12; } std::string displayText = "> " + TextEntryGetString() + (cursorOn?"|":" "); DrawStringDecal({4,(float)ScreenHeight()-12},displayText); return true; } }; int main() { Example demo; if (demo.Construct(256, 240, 2, 2)) demo.Start(); return 0; }