|
|
|
@ -1,21 +1,25 @@ |
|
|
|
|
#define OLC_PGE_APPLICATION |
|
|
|
|
#include "pixelGameEngine.h" |
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
// class
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
class PressDetect : public olc::PixelGameEngine |
|
|
|
|
class CustomControls : public olc::PixelGameEngine |
|
|
|
|
{ |
|
|
|
|
public: |
|
|
|
|
PressDetect() |
|
|
|
|
CustomControls() |
|
|
|
|
{ |
|
|
|
|
sAppName = "Double Press Down Detect"; |
|
|
|
|
sAppName = "Configuring Custom Controls"; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private: |
|
|
|
|
|
|
|
|
|
bool bothKeysPressed=false; |
|
|
|
|
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: |
|
|
|
|
|
|
|
|
@ -24,25 +28,74 @@ public: |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
// Main Game Function
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
|
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; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (GetKey(olc::SHIFT).bHeld&&GetKey(olc::A).bHeld&&!bothKeysPressed) { |
|
|
|
|
bothKeysPressed=true; |
|
|
|
|
std::cout<<"Both Keys pressed\n"; |
|
|
|
|
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 (bothKeysPressed&&(GetKey(olc::SHIFT).bReleased||GetKey(olc::A).bReleased)) { |
|
|
|
|
bothKeysPressed=false; |
|
|
|
|
std::cout<<"Both Keys released\n"; |
|
|
|
|
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({32,32},{32,32},(bothKeysPressed)?olc::YELLOW:olc::BLACK); |
|
|
|
|
DrawRect(pos,{32,32},olc::WHITE); |
|
|
|
|
|
|
|
|
|
if (IsTextEntryEnabled()) { |
|
|
|
|
DrawString({0,0},"Please press a key for "+keysList[configuringKeyIndex]); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
@ -51,7 +104,7 @@ public: |
|
|
|
|
|
|
|
|
|
int main() |
|
|
|
|
{ |
|
|
|
|
PressDetect game; |
|
|
|
|
CustomControls game; |
|
|
|
|
if (game.Construct(256, 240, 4, 4)) |
|
|
|
|
game.Start(); |
|
|
|
|
|
|
|
|
|