#include "pixelGameEngine.h" using namespace olc; struct Cursor{ int line=0; int pos=0; }; class IDE : public olc::PixelGameEngine { public: std::vectorcursors={{0,2}}; std::vectordocument={{"Test"}}; float lastBlinkTime=0; IDE() { sAppName = "PGEIDE"; } public: bool OnUserCreate() override { std::cout<<"Created IDE: "<0){ cursors[0].pos--; } else if (cursors[0].line>0){ cursors[0].line--; cursors[0].pos=document[cursors[0].line].size(); } } if (GetKey(DOWN).bPressed){ if (cursors[0].line0){ cursors[0].line--; } } if (GetKey(HOME).bPressed){ if(GetKey(CTRL).bHeld){ cursors[0].line=0; } cursors[0].pos=0; } if (GetKey(END).bPressed){ if(GetKey(CTRL).bHeld){ cursors[0].line=document.size()-1; } cursors[0].pos=document[cursors[0].line].size(); } if (GetKey(ENTER).bPressed){ if(cursors[0].pos==0){ //Insert in front of line. document.insert(document.begin()+cursors[0].line++,{{}}); } else{ document.insert(document.begin()+cursors[0].line+1,document[cursors[0].line].substr(cursors[0].pos,document[cursors[0].line].size())); document[cursors[0].line]=document[cursors[0].line].substr(0,cursors[0].pos); cursors[0].pos=0; cursors[0].line++; } } int i=0; for (std::string&line:document){ DrawStringDecal({0,float(i)*10},line); if(cursors[0].line==i&&lastBlinkTime>0.5f){DrawStringDecal({float(cursors[0].pos)*8-2,float(i)*10+1},"|",GREY,{0.5,0.8});} i++; } lastBlinkTime+=fElapsedTime; if (lastBlinkTime>1.f){ lastBlinkTime--; } return true; } bool OnUserDestroy()override{ return true; } void GetAnyKeyPress(olc::Key k)override{ if (k>=A&&k<=Z){ document[cursors[0].line].insert(cursors[0].pos,std::string(1,Z-k)); } } }; int main(int argc, char** argv) { IDE demo; rcode code; if (argc==3){ code=demo.Construct(std::stoi(argv[1]), std::stoi(argv[2]), 1, 1); } else { code=demo.Construct(200, 200, 1, 1); } if (code!=FAIL){ demo.Start(); } return 0; }