-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Feature: add plugin module/feature (#5)
* plugin: add plugin feature 1. plugin base 2. add gamepad-base plugin and it's extend -- gamepad base - fighting * plugin: add Keyboard Base Plugin add keyboard base plugin Signed-off-by: Sunrisepeak <speakshen@163.com> * plugin: linux platform verify linux platform verify and adjust Signed-off-by: SPeak <speakshen@163.com> --------- Signed-off-by: Sunrisepeak <speakshen@163.com> Signed-off-by: SPeak <speakshen@163.com>
- Loading branch information
1 parent
81ab779
commit bd9c878
Showing
11 changed files
with
490 additions
and
184 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
#ifndef __KPLUGIN_H__KHISTORY | ||
#define __KPLUGIN_H__KHISTORY | ||
|
||
#include <dstruct.hpp> | ||
#include <dsvisual.hpp> | ||
|
||
namespace khistory { | ||
|
||
class KPluginInterface { | ||
public: // interface | ||
virtual void gameKeyLayoutVisualImpl() = 0; | ||
virtual void updateKeyStatus(const dstruct::Vector<int> &keyVec /* key's press-info */) = 0; | ||
public: // optional interface | ||
virtual void gameKeyNameTableInit() { } | ||
virtual void gameKeyColorTableInit() { } | ||
public: | ||
std::string getPluginName() const { return _mPluginNmae; } | ||
protected: | ||
std::string _mPluginNmae; | ||
}; | ||
|
||
} // namespace khistory end | ||
|
||
|
||
#define KPLUGIN_REGISTER(PLUGIN_TYPE) \ | ||
static khistory::PLUGIN_TYPE __gPlugin##PLUGIN_TYPE; \ | ||
auto __gUnused##PLUGIN_TYPE = khistory::KeyHistory::_registerPlugin(&__gPlugin##PLUGIN_TYPE); | ||
|
||
#include "GamepadBasePlugin.kplugin.hpp" | ||
#include "KeyboardBasePlugin.kplugin.hpp" | ||
|
||
#include "GamepadBasePlugin-Fighting.kplugin.hpp" | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
#ifndef __GAMEPAD_BASE_PLUGIN_FIGHTING_HPP__KHISTORY | ||
#define __GAMEPAD_BASE_PLUGIN_FIGHTING_HPP__KHISTORY | ||
|
||
#include "GamepadBasePlugin.kplugin.hpp" | ||
|
||
namespace khistory { | ||
|
||
class GamepadBasePluginFighting : public GamepadBasePlugin { | ||
public: | ||
GamepadBasePluginFighting() : GamepadBasePlugin() { | ||
_mPluginNmae = "Gamepad Base - Fighting"; | ||
} | ||
|
||
public: | ||
void gameKeyNameTableInit() override { | ||
GamepadBasePlugin::gameKeyNameTableInit(); // default init | ||
|
||
_mkeyNameTable[PAL::GamepadKey::DPAD_UP] = "8"; | ||
_mkeyNameTable[PAL::GamepadKey::DPAD_DOWN] = "2"; | ||
_mkeyNameTable[PAL::GamepadKey::DPAD_LEFT] = "4"; | ||
_mkeyNameTable[PAL::GamepadKey::DPAD_RIGHT] = "6"; | ||
} | ||
}; | ||
|
||
} | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,158 @@ | ||
#ifndef __GAMEPAD_BASE_PLUGIN_HPP__KHISTORY | ||
#define __GAMEPAD_BASE_PLUGIN_HPP__KHISTORY | ||
|
||
#include "KPlugin.h" | ||
#include "PAL.h" | ||
|
||
namespace khistory { | ||
|
||
class GamepadBasePlugin : public KPluginInterface { | ||
|
||
public: | ||
GamepadBasePlugin() { | ||
KPluginInterface::_mPluginNmae = "Gamepad Base"; | ||
for (auto &kStatus : __mkeyStatusTable) kStatus = false; | ||
} | ||
|
||
public: // interface impl | ||
virtual void gameKeyNameTableInit() override { | ||
_mkeyNameTable[PAL::GamepadKey::DPAD_UP] = "^"; | ||
_mkeyNameTable[PAL::GamepadKey::DPAD_DOWN] = "v"; | ||
_mkeyNameTable[PAL::GamepadKey::DPAD_LEFT] = "<"; | ||
_mkeyNameTable[PAL::GamepadKey::DPAD_RIGHT] = ">"; | ||
_mkeyNameTable[PAL::GamepadKey::START] = "START"; | ||
_mkeyNameTable[PAL::GamepadKey::BACK] = "BACK"; | ||
_mkeyNameTable[PAL::GamepadKey::A] = "A"; | ||
_mkeyNameTable[PAL::GamepadKey::B] = "B"; | ||
_mkeyNameTable[PAL::GamepadKey::X] = "X"; | ||
_mkeyNameTable[PAL::GamepadKey::Y] = "Y"; | ||
|
||
// L/R trigger/Bumper | ||
_mkeyNameTable[PAL::GamepadKey::LEFT_BUMPER] = "LB"; | ||
_mkeyNameTable[PAL::GamepadKey::RIGHT_BUMPER] = "RB"; | ||
_mkeyNameTable[PAL::GamepadKey::LEFT_TRIGGER] = "LT"; | ||
_mkeyNameTable[PAL::GamepadKey::RIGHT_TRIGGER] = "RT"; | ||
} | ||
|
||
virtual void gameKeyColorTableInit() override { | ||
// gamepad key-color init | ||
_mGameKeyColorTable[PAL::GamepadKey::DPAD_UP] = ImVec4(229 / 255.0f, 153 / 255.0f, 1.0f, 0.5f); | ||
_mGameKeyColorTable[PAL::GamepadKey::DPAD_DOWN] = ImVec4(229 / 255.0f, 153 / 255.0f, 1.0f, 0.5f); | ||
_mGameKeyColorTable[PAL::GamepadKey::DPAD_LEFT] = ImVec4(229 / 255.0f, 153 / 255.0f, 1.0f, 0.5f); | ||
_mGameKeyColorTable[PAL::GamepadKey::DPAD_RIGHT] = ImVec4(229 / 255.0f, 153 / 255.0f, 1.0f, 0.5f); | ||
|
||
_mGameKeyColorTable[PAL::GamepadKey::START] = ImVec4(0.6f, 0.7f, 0.8f, 0.5f); | ||
_mGameKeyColorTable[PAL::GamepadKey::BACK] = ImVec4(0.8f, 0.7f, 0.6f, 0.5f); | ||
|
||
_mGameKeyColorTable[PAL::GamepadKey::A] = ImVec4(178 / 255.0f, 1.0f, 102 / 255.0f, 0.5f); | ||
_mGameKeyColorTable[PAL::GamepadKey::B] = ImVec4(255 / 255.0f, 102 / 255.0f, 102 / 255.0f, 0.5f); | ||
_mGameKeyColorTable[PAL::GamepadKey::X] = ImVec4(0.0f, 1.0f, 1.0f, 0.5f); | ||
_mGameKeyColorTable[PAL::GamepadKey::Y] = ImVec4(1.0f, 1.0f, 0.0f, 0.5f); | ||
|
||
_mGameKeyColorTable[PAL::GamepadKey::LEFT_BUMPER] = ImVec4(128 / 255.0f, 0.0f, 128 / 255.0f, 0.5f); | ||
_mGameKeyColorTable[PAL::GamepadKey::RIGHT_BUMPER] = ImVec4(128 / 255.0f, 0.0f, 128 / 255.0f, 0.5f); | ||
_mGameKeyColorTable[PAL::GamepadKey::LEFT_TRIGGER] = ImVec4(0.3f, 0.3f, 0.3f, 0.8f); | ||
_mGameKeyColorTable[PAL::GamepadKey::RIGHT_TRIGGER] = ImVec4(0.3f, 0.3f, 0.3f, 0.8f); | ||
} | ||
|
||
/* | ||
[ LT ] [ RT ] | ||
[ LB ] [ RB ] | ||
+-----------------------------+ | ||
| ^ | | Y | | ||
| < > |back start| X B | | ||
| v | | A | | ||
+-----------------------------+ | ||
*/ | ||
void gameKeyLayoutVisualImpl() override { | ||
ImGuiStyle& style = ImGui::GetStyle(); | ||
const float spacing = 2.0f; | ||
auto oldSpacing = style.ItemSpacing; | ||
|
||
style.ItemSpacing = ImVec2(spacing, spacing); | ||
|
||
float areaHeight = ImGui::GetWindowHeight() / 3; | ||
float areaWidth = ImGui::GetWindowWidth() / 3; | ||
|
||
__mButtonWidth = __mButtonHeight = areaWidth / 4; | ||
|
||
{ | ||
float oldFontSize = ImGui::GetFont()->Scale; | ||
if (__mButtonHeight < 50) ImGui::GetFont()->Scale /= 1.5; | ||
ImGui::PushFont(ImGui::GetFont()); | ||
{ // LT/RT | ||
__drawKeyButton(PAL::GamepadKey::LEFT_TRIGGER, __mButtonWidth, 2 * __mButtonWidth, __mButtonHeight / 2); ImGui::SameLine(); | ||
__drawKeyButton(PAL::GamepadKey::RIGHT_TRIGGER, 2 * areaWidth + __mButtonWidth, 2 * __mButtonWidth, __mButtonHeight / 2); | ||
} | ||
{ // LB/RB | ||
__drawKeyButton(PAL::GamepadKey::LEFT_BUMPER,__mButtonWidth, 2 * __mButtonWidth, __mButtonHeight / 2); ImGui::SameLine(); | ||
__drawKeyButton(PAL::GamepadKey::RIGHT_BUMPER, 2 * areaWidth + __mButtonHeight, 2 * __mButtonWidth, __mButtonHeight / 2); | ||
} | ||
ImGui::GetFont()->Scale = oldFontSize; | ||
ImGui::PopFont(); | ||
} | ||
|
||
{ | ||
int firstLineAreaStart = areaWidth / 2 - __mButtonWidth / 2; | ||
__drawKeyButton(PAL::GamepadKey::DPAD_UP, firstLineAreaStart); ImGui::SameLine(); | ||
__drawKeyButton(PAL::GamepadKey::Y, 2 * areaWidth + firstLineAreaStart); | ||
} | ||
{ | ||
int secondLineAreaStart = __mButtonWidth / 2; | ||
{ | ||
__drawKeyButton(PAL::GamepadKey::DPAD_LEFT, secondLineAreaStart); ImGui::SameLine(); | ||
__drawKeyButton(PAL::GamepadKey::DPAD_RIGHT, secondLineAreaStart + __mButtonWidth * 2); ImGui::SameLine(); | ||
} | ||
{ // back / start | ||
float oldFontSize = ImGui::GetFont()->Scale; | ||
ImGui::GetFont()->Scale /= 1.5; | ||
if (__mButtonHeight < 50) ImGui::GetFont()->Scale /= 1.6; | ||
ImGui::PushFont(ImGui::GetFont()); | ||
__drawKeyButton(PAL::GamepadKey::BACK, areaWidth + secondLineAreaStart, __mButtonWidth, __mButtonHeight / 2); ImGui::SameLine(); | ||
__drawKeyButton(PAL::GamepadKey::START, areaWidth + secondLineAreaStart + __mButtonWidth * 2, __mButtonWidth, __mButtonHeight / 2); ImGui::SameLine(); | ||
ImGui::GetFont()->Scale = oldFontSize; | ||
ImGui::PopFont(); | ||
} | ||
{ | ||
__drawKeyButton(PAL::GamepadKey::X, 2 * areaWidth + secondLineAreaStart); ImGui::SameLine(); | ||
__drawKeyButton(PAL::GamepadKey::B, 2 * areaWidth + secondLineAreaStart + __mButtonWidth * 2); | ||
} | ||
} | ||
{ | ||
int thirdLineAreaStart = areaWidth / 2 - __mButtonWidth / 2; | ||
__drawKeyButton(PAL::GamepadKey::DPAD_DOWN, thirdLineAreaStart); ImGui::SameLine(); | ||
__drawKeyButton(PAL::GamepadKey::A, 2 * areaWidth + thirdLineAreaStart); | ||
} | ||
|
||
style.ItemSpacing = oldSpacing; | ||
} | ||
|
||
void updateKeyStatus(const dstruct::Vector<int> &keyVec) override { | ||
for (auto &kStatus : __mkeyStatusTable) kStatus = false; | ||
for (auto keycode : keyVec) { | ||
int gamepadKeycode = keycode - KEYBOARD_KEY_NUMBERS; | ||
if (gamepadKeycode < __mkeyStatusTable.size() && gamepadKeycode >= 0) { | ||
__mkeyStatusTable[gamepadKeycode] = true; | ||
} | ||
} | ||
} | ||
|
||
protected: | ||
dstruct::Array<ImVec4, GAMEPAD_KEY_NUMBERS> _mGameKeyColorTable; | ||
dstruct::Array<std::string, GAMEPAD_KEY_NUMBERS> _mkeyNameTable; | ||
|
||
private: | ||
float __mButtonWidth, __mButtonHeight; | ||
dstruct::Array<bool, GAMEPAD_KEY_NUMBERS> __mkeyStatusTable; | ||
|
||
void __drawKeyButton(int keycode, float cursorPosX = 0, float width = 0, float height = 0) { | ||
ImGui::SetCursorPosX(cursorPosX); | ||
ImGui::PushStyleColor(ImGuiCol_Button, __mkeyStatusTable[keycode] ? _mGameKeyColorTable[keycode] : ImVec4(0, 0, 0, 0.25)); | ||
ImGui::Button(_mkeyNameTable[keycode].c_str(), {width ? width : __mButtonWidth, height ? height : __mButtonHeight}); | ||
ImGui::PopStyleColor(1); | ||
} | ||
}; | ||
|
||
} | ||
|
||
#endif |
Oops, something went wrong.