A repository that sets up a C++ Project with the olcPixelGameEngine already loaded.
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.
 
 
 

112 lines
1.9 KiB

#define OLC_PGE_APPLICATION
#include "pixelGameEngine.h"
class CustomControls : public olc::PixelGameEngine
{
public:
CustomControls()
{
sAppName = "Configuring Custom Controls";
}
private:
olc::Key MOVE_UP=olc::W;
olc::Key MOVE_DOWN=olc::S;
olc::Key MOVE_RIGHT=olc::D;
olc::Key MOVE_LEFT=olc::A;
olc::vd2d pos = {0,0};
std::array<std::string,4> keysList = {"UP","RIGHT","DOWN","LEFT"};
int configuringKeyIndex = 0;
public:
bool OnUserCreate() override
{
return true;
}
bool OnUserUpdate(float fElapsedTime) override
{
if (GetKey(olc::F1).bPressed) {
TextEntryEnable(true);
configuringKeyIndex=0;
}
if (TextEntryGetString().size()>0) {
char c = TextEntryGetString()[0];
olc::Key customKey;
if (c>='a'&&c<='z') {
c-=32; //Capitalize the letter.
customKey=(olc::Key)(c-'A'+1);
} else
if (c>='A'&&c<='Z') {
customKey=(olc::Key)(c-'A'+1);
} else
if (c>='0'&&c<='9') {
customKey=(olc::Key)(c-'0'+olc::Key::K0);
} else
{
return true;
}
switch (configuringKeyIndex) {
case 0:{
MOVE_UP=customKey;
}break;
case 1:{
MOVE_RIGHT=customKey;
}break;
case 2:{
MOVE_DOWN=customKey;
}break;
case 3:{
MOVE_LEFT=customKey;
}break;
}
configuringKeyIndex++;
if (configuringKeyIndex<keysList.size()) {
TextEntryEnable(true);
} else {
TextEntryEnable(false);
}
}
if (GetKey(MOVE_UP).bHeld) {
pos+={0,-5*fElapsedTime};
}
if (GetKey(MOVE_DOWN).bHeld) {
pos+={0,5*fElapsedTime};
}
if (GetKey(MOVE_RIGHT).bHeld) {
pos+={5*fElapsedTime,0};
}
if (GetKey(MOVE_LEFT).bHeld) {
pos+={-5*fElapsedTime,0};
}
Clear(olc::VERY_DARK_BLUE);
DrawRect(pos,{32,32},olc::WHITE);
if (IsTextEntryEnabled()) {
DrawString({0,0},"Please press a key for "+keysList[configuringKeyIndex]);
}
return true;
}
};
int main()
{
CustomControls game;
if (game.Construct(256, 240, 4, 4))
game.Start();
return 0;
}