You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
3.2 KiB
114 lines
3.2 KiB
#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::vector<std::string>console;
|
|
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;
|
|
}
|
|
|