Controller, Bindings and Mouse Centre via C#

This commit is contained in:
mushgunAX 2023-02-22 23:50:39 +08:00
parent bc87fa3ae0
commit dbe9b4d133
4 changed files with 408 additions and 0 deletions

View File

@ -47,6 +47,8 @@ namespace SHADE
if (SHEditorWindow::Begin()) if (SHEditorWindow::Begin())
{ {
//ImGui::ShowDemoWindow(); //ImGui::ShowDemoWindow();
if (bindingRenames.size() != SHInputManager::CountBindings())
resizeVectors(SHInputManager::CountBindings());
//Binding count //Binding count
ImGui::Text("Binding Count: %d", SHInputManager::CountBindings()); ImGui::Text("Binding Count: %d", SHInputManager::CountBindings());
@ -127,6 +129,8 @@ namespace SHADE
{ {
SHInputManager::RenameBinding(binding.first, bindingRenames[entryNumber]); SHInputManager::RenameBinding(binding.first, bindingRenames[entryNumber]);
bindingRenames[entryNumber].clear(); bindingRenames[entryNumber].clear();
ImGui::End();
return;
} }
if (ImGui::Button(labelConcat("Delete Binding##", entryNumber).c_str())) if (ImGui::Button(labelConcat("Delete Binding##", entryNumber).c_str()))

View File

@ -755,6 +755,7 @@ namespace SHADE
{ {
++keyCount; ++keyCount;
keys[i] = true; keys[i] = true;
controllerInUse = false;
} }
else keys[i] = false; else keys[i] = false;
@ -819,6 +820,9 @@ namespace SHADE
mouseVelocityX -= static_cast<double>(p.x - mouseScreenX) / dt; mouseVelocityX -= static_cast<double>(p.x - mouseScreenX) / dt;
mouseVelocityY -= static_cast<double>(p.y - mouseScreenY) / dt; mouseVelocityY -= static_cast<double>(p.y - mouseScreenY) / dt;
} }
if (mouseVelocityX != 0.0 || mouseVelocityY != 0.0)
controllerInUse = false;
//Mouse wheel vertical delta updating //Mouse wheel vertical delta updating

View File

@ -30,10 +30,29 @@ namespace SHADE
{ {
return SHInputManager::GetMouseWheelVerticalDelta(); return SHInputManager::GetMouseWheelVerticalDelta();
} }
bool Input::ControllerInUse::get()
{
return SHInputManager::GetControllerInUse();
}
/*---------------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------------*/
/* Usage Functions */ /* Usage Functions */
/*---------------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------------*/
bool Input::AnyKey()
{
return SHInputManager::AnyKey();
}
bool Input::AnyKeyDown()
{
return SHInputManager::AnyKeyDown();
}
bool Input::AnyKeyUp()
{
return SHInputManager::AnyKeyUp();
}
bool Input::GetKey(KeyCode key) bool Input::GetKey(KeyCode key)
{ {
return SHInputManager::GetKey(static_cast<SHInputManager::SH_KEYCODE>(key)); return SHInputManager::GetKey(static_cast<SHInputManager::SH_KEYCODE>(key));
@ -64,6 +83,50 @@ namespace SHADE
return SHInputManager::GetKeyUp(static_cast<SHInputManager::SH_KEYCODE>(mouseButton)); return SHInputManager::GetKeyUp(static_cast<SHInputManager::SH_KEYCODE>(mouseButton));
} }
bool Input::AnyControllerInput()
{
return SHInputManager::AnyControllerInput();
}
bool Input::AnyControllerInputDown()
{
return SHInputManager::AnyControllerInputDown();
}
bool Input::AnyControllerInputUp()
{
return SHInputManager::AnyControllerInputUp();
}
bool Input::AnyControllerButton()
{
return SHInputManager::AnyControllerButton();
}
bool Input::AnyControllerButtonDown()
{
return SHInputManager::AnyControllerButtonDown();
}
bool Input::AnyControllerButtonUp()
{
return SHInputManager::AnyControllerButtonUp();
}
bool Input::GetControllerInput(Input::ControllerCode code)
{
return SHInputManager::GetControllerInput(static_cast<SHInputManager::SH_CONTROLLERCODE>(code));
}
double Input::GetControllerInputNormalisedValue(Input::ControllerCode code)
{
double toReturn = 0.0;
SHInputManager::GetControllerInput(static_cast<SHInputManager::SH_CONTROLLERCODE>(code), &toReturn);
return toReturn;
}
bool Input::GetControllerInputDown(Input::ControllerCode code)
{
return SHInputManager::GetControllerInputDown(static_cast<SHInputManager::SH_CONTROLLERCODE>(code));
}
bool Input::GetControllerInputUp(Input::ControllerCode code)
{
return SHInputManager::GetControllerInputUp(static_cast<SHInputManager::SH_CONTROLLERCODE>(code));
}
/*---------------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------------*/
/* Cursor Functions */ /* Cursor Functions */
/*---------------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------------*/
@ -76,6 +139,24 @@ namespace SHADE
); );
} }
Vector2 Input::GetMousePosition()
{
int x = 0;
int y = 0;
SHInputManager::GetMouseWindowPosition(&x, &y);
return Convert::ToCLI(SHVec2{ (float)x,(float)y });
}
void Input::SetMouseCentering(bool state)
{
SHInputManager::SetMouseCentering(state);
}
bool Input::GetMouseCentering()
{
return SHInputManager::GetMouseCentering();
}
/*---------------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------------*/
/* Time Functions */ /* Time Functions */
/*---------------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------------*/
@ -106,4 +187,220 @@ namespace SHADE
return Convert::ToCLI(SHVec2{ (float)velX,(float)velY }); return Convert::ToCLI(SHVec2{ (float)velX,(float)velY });
} }
double Input::GetControllerInputHeldTime(Input::ControllerCode code)
{
return SHInputManager::GetControllerInputHeldTime(static_cast<SHInputManager::SH_CONTROLLERCODE>(code));
}
double Input::GetControllerInputReleasedTime(Input::ControllerCode code)
{
return SHInputManager::GetControllerInputReleasedTime(static_cast<SHInputManager::SH_CONTROLLERCODE>(code));
}
/*-----------------------------------------------------------------------------*/
/* Binding Functions */
/*-----------------------------------------------------------------------------*/
void Input::SaveBindings()
{
SHInputManager::SaveBindings();
}
void Input::SaveBindings(System::String^ targetFile)
{
SHInputManager::SaveBindings(Convert::ToNative(targetFile));
}
void Input::LoadBindings()
{
SHInputManager::LoadBindings();
}
void Input::LoadBindings(System::String^ sourceFile)
{
SHInputManager::LoadBindings(Convert::ToNative(sourceFile));
}
bool Input::GetBindingInverted(System::String^ bindingName)
{
return SHInputManager::GetBindingInverted(Convert::ToNative(bindingName));
}
void Input::SetBindingInverted(System::String^ bindingName, bool newValue)
{
SHInputManager::SetBindingInverted(Convert::ToNative(bindingName), newValue);
}
double Input::GetBindingGravity(System::String^ bindingName)
{
return SHInputManager::GetBindingGravity(Convert::ToNative(bindingName));
}
void Input::SetBindingGravity(System::String^ bindingName, double newValue)
{
SHInputManager::SetBindingGravity(Convert::ToNative(bindingName), newValue);
}
double Input::GetBindingDead(System::String^ bindingName)
{
return SHInputManager::GetBindingDead(Convert::ToNative(bindingName));
}
void Input::SetBindingDead(System::String^ bindingName, double newValue)
{
SHInputManager::SetBindingDead(Convert::ToNative(bindingName), newValue);
}
double Input::GetBindingSensitivity(System::String^ bindingName)
{
return SHInputManager::GetBindingSensitivity(Convert::ToNative(bindingName));
}
void Input::SetBindingSensitivity(System::String^ bindingName, double newValue)
{
SHInputManager::SetBindingSensitivity(Convert::ToNative(bindingName), newValue);
}
bool Input::GetBindingSnap(System::String^ bindingName)
{
return SHInputManager::GetBindingSnap(Convert::ToNative(bindingName));
}
void Input::SetBindingSnap(System::String^ bindingName, bool newValue)
{
SHInputManager::SetBindingSnap(Convert::ToNative(bindingName), newValue);
}
System::Collections::Generic::HashSet<Input::KeyCode>^ Input::GetBindingPositiveKeyCodes(System::String^ bindingName)
{
System::Collections::Generic::HashSet<Input::KeyCode>^ toReturn = gcnew System::Collections::Generic::HashSet<Input::KeyCode>();
std::set<SHInputManager::SH_KEYCODE> list = SHInputManager::GetBindingPositiveKeyCodes(Convert::ToNative(bindingName));
for (auto kc : list)
{
toReturn->Add(static_cast<Input::KeyCode>(kc));
}
return toReturn;
}
void Input::AddBindingPositiveKeyCode(System::String^ bindingName, Input::KeyCode toAdd)
{
SHInputManager::AddBindingPositiveKeyCode(Convert::ToNative(bindingName), static_cast<SHInputManager::SH_KEYCODE>(toAdd));
}
void Input::RemoveBindingPositiveKeyCode(System::String^ bindingName, Input::KeyCode toRemove)
{
SHInputManager::RemoveBindingPositiveKeyCode(Convert::ToNative(bindingName), static_cast<SHInputManager::SH_KEYCODE>(toRemove));
}
void Input::ClearBindingPositiveKeyCodes(System::String^ bindingName)
{
SHInputManager::ClearBindingPositiveKeyCodes(Convert::ToNative(bindingName));
}
System::Collections::Generic::HashSet<Input::KeyCode>^ Input::GetBindingNegativeKeyCodes(System::String^ bindingName)
{
System::Collections::Generic::HashSet<Input::KeyCode>^ toReturn = gcnew System::Collections::Generic::HashSet<Input::KeyCode>();
std::set<SHInputManager::SH_KEYCODE> list = SHInputManager::GetBindingNegativeKeyCodes(Convert::ToNative(bindingName));
for (auto kc : list)
{
toReturn->Add(static_cast<Input::KeyCode>(kc));
}
return toReturn;
}
void Input::AddBindingNegativeKeyCode(System::String^ bindingName, Input::KeyCode toAdd)
{
SHInputManager::AddBindingNegativeKeyCode(Convert::ToNative(bindingName), static_cast<SHInputManager::SH_KEYCODE>(toAdd));
}
void Input::RemoveBindingNegativeKeyCode(System::String^ bindingName, Input::KeyCode toRemove)
{
SHInputManager::RemoveBindingNegativeKeyCode(Convert::ToNative(bindingName), static_cast<SHInputManager::SH_KEYCODE>(toRemove));
}
void Input::ClearBindingNegativeKeyCodes(System::String^ bindingName)
{
SHInputManager::ClearBindingNegativeKeyCodes(Convert::ToNative(bindingName));
}
System::Collections::Generic::HashSet<Input::ControllerCode>^ Input::GetBindingPositiveControllerCodes(System::String^ bindingName)
{
System::Collections::Generic::HashSet<Input::ControllerCode>^ toReturn = gcnew System::Collections::Generic::HashSet<Input::ControllerCode>();
std::set<SHInputManager::SH_CONTROLLERCODE> list = SHInputManager::GetBindingPositiveControllerCodes(Convert::ToNative(bindingName));
for (auto kc : list)
{
toReturn->Add(static_cast<Input::ControllerCode>(kc));
}
return toReturn;
}
void Input::AddBindingPositiveControllerCode(System::String^ bindingName, Input::ControllerCode toAdd)
{
SHInputManager::AddBindingPositiveControllerCode(Convert::ToNative(bindingName), static_cast<SHInputManager::SH_CONTROLLERCODE>(toAdd));
}
void Input::RemoveBindingPositiveControllerCode(System::String^ bindingName, Input::ControllerCode toRemove)
{
SHInputManager::RemoveBindingPositiveControllerCode(Convert::ToNative(bindingName), static_cast<SHInputManager::SH_CONTROLLERCODE>(toRemove));
}
void Input::ClearBindingPositiveControllerCodes(System::String^ bindingName)
{
SHInputManager::ClearBindingPositiveControllerCodes(Convert::ToNative(bindingName));
}
System::Collections::Generic::HashSet<Input::ControllerCode>^ Input::GetBindingNegativeControllerCodes(System::String^ bindingName)
{
System::Collections::Generic::HashSet<Input::ControllerCode>^ toReturn = gcnew System::Collections::Generic::HashSet<Input::ControllerCode>();
std::set<SHInputManager::SH_CONTROLLERCODE> list = SHInputManager::GetBindingNegativeControllerCodes(Convert::ToNative(bindingName));
for (auto kc : list)
{
toReturn->Add(static_cast<Input::ControllerCode>(kc));
}
return toReturn;
}
void Input::AddBindingNegativeControllerCode(System::String^ bindingName, Input::ControllerCode toAdd)
{
SHInputManager::AddBindingNegativeControllerCode(Convert::ToNative(bindingName), static_cast<SHInputManager::SH_CONTROLLERCODE>(toAdd));
}
void Input::RemoveBindingNegativeControllerCode(System::String^ bindingName, Input::ControllerCode toRemove)
{
SHInputManager::RemoveBindingNegativeControllerCode(Convert::ToNative(bindingName), static_cast<SHInputManager::SH_CONTROLLERCODE>(toRemove));
}
void Input::ClearBindingNegativeControllerCodes(System::String^ bindingName)
{
SHInputManager::ClearBindingNegativeControllerCodes(Convert::ToNative(bindingName));
}
double Input::GetBindingAxis(System::String^ bindingName)
{
return SHInputManager::GetBindingAxis(Convert::ToNative(bindingName));
}
double Input::GetBindingAxisRaw(System::String^ bindingName)
{
return SHInputManager::GetBindingAxisRaw(Convert::ToNative(bindingName));
}
bool Input::GetBindingPositiveButton(System::String^ bindingName)
{
return SHInputManager::GetBindingPositiveButton(Convert::ToNative(bindingName));
}
bool Input::GetBindingNegativeButton(System::String^ bindingName)
{
return SHInputManager::GetBindingNegativeButton(Convert::ToNative(bindingName));
}
bool Input::GetBindingPositiveButtonDown(System::String^ bindingName)
{
return SHInputManager::GetBindingPositiveButtonDown(Convert::ToNative(bindingName));
}
bool Input::GetBindingNegativeButtonDown(System::String^ bindingName)
{
return SHInputManager::GetBindingNegativeButtonDown(Convert::ToNative(bindingName));
}
bool Input::GetBindingPositiveButtonUp(System::String^ bindingName)
{
return SHInputManager::GetBindingPositiveButtonUp(Convert::ToNative(bindingName));
}
bool Input::GetBindingNegativeButtonUp(System::String^ bindingName)
{
return SHInputManager::GetBindingNegativeButtonUp(Convert::ToNative(bindingName));
}
double Input::GetBindingPositiveHeldTime(System::String^ bindingName)
{
return SHInputManager::GetBindingPositiveHeldTime(Convert::ToNative(bindingName));
}
double Input::GetBindingNegativeHeldTime(System::String^ bindingName)
{
return SHInputManager::GetBindingNegativeHeldTime(Convert::ToNative(bindingName));
}
double Input::GetBindingPositiveReleasedTime(System::String^ bindingName)
{
return SHInputManager::GetBindingPositiveReleasedTime(Convert::ToNative(bindingName));
}
double Input::GetBindingNegativeReleasedTime(System::String^ bindingName)
{
return SHInputManager::GetBindingNegativeReleasedTime(Convert::ToNative(bindingName));
}
} }

View File

@ -376,6 +376,14 @@ namespace SHADE
LeftThumbStickY = static_cast<int>(SHInputManager::SH_CONTROLLERCODE::LEFT_THUMBSTICK_Y) LeftThumbStickY = static_cast<int>(SHInputManager::SH_CONTROLLERCODE::LEFT_THUMBSTICK_Y)
}; };
enum class BindingType : int
{
KbMbController = static_cast<int>(SHInputManager::SH_BINDINGTYPE::KB_MB_CONTROLLER),
mouseX = static_cast<int>(SHInputManager::SH_BINDINGTYPE::MOUSE_X),
mouseY = static_cast<int>(SHInputManager::SH_BINDINGTYPE::MOUSE_Y),
mouseScroll = static_cast<int>(SHInputManager::SH_BINDINGTYPE::MOUSE_SCROLL)
};
/*-----------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------*/
/* Properites */ /* Properites */
/*-----------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------*/
@ -396,9 +404,25 @@ namespace SHADE
int get(); int get();
} }
static property bool ControllerInUse
{
bool get();
}
/*-----------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------*/
/* Usage Functions */ /* Usage Functions */
/*-----------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------*/
/// <summary>
/// Checks if any key is being held down.
/// This will also be true if GetKeyDown() is true.
/// </summary>
/// <param name="firstKey">KeyCode of the first key that was detected to be pressed.</param>
/// <returns>True while the user holds down the key specified.</returns>
static bool AnyKey();
static bool AnyKeyDown();
static bool AnyKeyUp();
/// <summary> /// <summary>
/// Checks if a specified key is being held down. /// Checks if a specified key is being held down.
/// This will also be true if GetKeyDown() is true. /// This will also be true if GetKeyDown() is true.
@ -447,6 +471,20 @@ namespace SHADE
/// True during the frame the user releases the given mouse button. /// True during the frame the user releases the given mouse button.
/// </returns> /// </returns>
static bool GetMouseButtonUp(MouseCode mouseButton); static bool GetMouseButtonUp(MouseCode mouseButton);
//For controller
static bool AnyControllerInput();
static bool AnyControllerInputDown();
static bool AnyControllerInputUp();
static bool AnyControllerButton();
static bool AnyControllerButtonDown();
static bool AnyControllerButtonUp();
static bool GetControllerInput(ControllerCode code);
static double GetControllerInputNormalisedValue(ControllerCode code);
static bool GetControllerInputDown(ControllerCode code);
static bool GetControllerInputUp(ControllerCode code);
/*-----------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------*/
/* Cursor Functions */ /* Cursor Functions */
@ -460,6 +498,11 @@ namespace SHADE
/// </param> /// </param>
static void SetMousePosition(Vector2 pos); static void SetMousePosition(Vector2 pos);
static Vector2 GetMousePosition();
static void SetMouseCentering(bool state);
static bool GetMouseCentering();
/*-----------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------*/
/* Timing Functions */ /* Timing Functions */
/*-----------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------*/
@ -492,6 +535,66 @@ namespace SHADE
/// <returns>Time in seconds that the key was held.</returns> /// <returns>Time in seconds that the key was held.</returns>
static double GetMouseReleasedTime(MouseCode mouseButton); static double GetMouseReleasedTime(MouseCode mouseButton);
static double GetControllerInputHeldTime(ControllerCode code);
static double GetControllerInputReleasedTime(ControllerCode code);
static Vector2 GetMouseVelocity(); static Vector2 GetMouseVelocity();
/*-----------------------------------------------------------------------------*/
/* Binding Functions */
/*-----------------------------------------------------------------------------*/
static void SaveBindings(); //To default file
static void SaveBindings(System::String^ targetFile);
static void LoadBindings(); //From default file
static void LoadBindings(System::String^ sourceFile);
static bool GetBindingInverted(System::String^ bindingName);
static void SetBindingInverted(System::String^ bindingName, bool newValue);
static double GetBindingGravity(System::String^ bindingName);
static void SetBindingGravity(System::String^ bindingName, double newValue);
static double GetBindingDead(System::String^ bindingName);
static void SetBindingDead(System::String^ bindingName, double newValue);
static double GetBindingSensitivity(System::String^ bindingName);
static void SetBindingSensitivity(System::String^ bindingName, double newValue);
static bool GetBindingSnap(System::String^ bindingName);
static void SetBindingSnap(System::String^ bindingName, bool newValue);
static System::Collections::Generic::HashSet<KeyCode>^ GetBindingPositiveKeyCodes(System::String^ bindingName);
static void AddBindingPositiveKeyCode(System::String^ bindingName, Input::KeyCode toAdd);
static void RemoveBindingPositiveKeyCode(System::String^ bindingName, Input::KeyCode toRemove);
static void ClearBindingPositiveKeyCodes(System::String^ bindingName);
static System::Collections::Generic::HashSet<KeyCode>^ GetBindingNegativeKeyCodes(System::String^ bindingName);
static void AddBindingNegativeKeyCode(System::String^ bindingName, Input::KeyCode toAdd);
static void RemoveBindingNegativeKeyCode(System::String^ bindingName, Input::KeyCode toRemove);
static void ClearBindingNegativeKeyCodes(System::String^ bindingName);
static System::Collections::Generic::HashSet<ControllerCode>^ GetBindingPositiveControllerCodes(System::String^ bindingName);
static void AddBindingPositiveControllerCode(System::String^ bindingName, Input::ControllerCode toAdd);
static void RemoveBindingPositiveControllerCode(System::String^ bindingName, Input::ControllerCode toRemove);
static void ClearBindingPositiveControllerCodes(System::String^ bindingName);
static System::Collections::Generic::HashSet<ControllerCode>^ GetBindingNegativeControllerCodes(System::String^ bindingName);
static void AddBindingNegativeControllerCode(System::String^ bindingName, Input::ControllerCode toAdd);
static void RemoveBindingNegativeControllerCode(System::String^ bindingName, Input::ControllerCode toRemove);
static void ClearBindingNegativeControllerCodes(System::String^ bindingName);
//Binding states
static double GetBindingAxis(System::String^ bindingName);
static double GetBindingAxisRaw(System::String^ bindingName);
static bool GetBindingPositiveButton(System::String^ bindingName);
static bool GetBindingNegativeButton(System::String^ bindingName);
static bool GetBindingPositiveButtonDown(System::String^ bindingName);
static bool GetBindingNegativeButtonDown(System::String^ bindingName);
static bool GetBindingPositiveButtonUp(System::String^ bindingName);
static bool GetBindingNegativeButtonUp(System::String^ bindingName);
//Binding times
static double GetBindingPositiveHeldTime(System::String^ bindingName);
static double GetBindingNegativeHeldTime(System::String^ bindingName);
static double GetBindingPositiveReleasedTime(System::String^ bindingName);
static double GetBindingNegativeReleasedTime(System::String^ bindingName);
}; };
} }