PGEtinker
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

#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;
}