iw4x-client/src/Components/Modules/Lean.cpp
2016-08-17 20:27:33 +02:00

70 lines
1.5 KiB
C++

#include "STDInclude.hpp"
namespace Components
{
Game::kbutton_t Lean::in_leanleft;
Game::kbutton_t Lean::in_leanright;
void Lean::IN_LeanLeft_Up()
{
Game::IN_KeyUp(&Lean::in_leanleft);
}
void Lean::IN_LeanLeft_Down()
{
Game::IN_KeyDown(&Lean::in_leanleft);
}
void Lean::IN_LeanRight_Up()
{
Game::IN_KeyUp(&Lean::in_leanright);
}
void Lean::IN_LeanRight_Down()
{
Game::IN_KeyDown(&Lean::in_leanright);
}
void Lean::SetLeanFlags(Game::usercmd_s* cmds)
{
if (Lean::in_leanleft.active || Lean::in_leanleft.wasPressed)
{
cmds->buttons |= BUTTON_FLAG_LEANLEFT;
}
if (Lean::in_leanright.active || Lean::in_leanright.wasPressed)
{
cmds->buttons |= BUTTON_FLAG_LEANRIGHT;
}
Lean::in_leanleft.wasPressed = 0;
Lean::in_leanright.wasPressed = 0;
}
void __declspec(naked) Lean::CL_CmdButtonsStub()
{
__asm
{
// CL_CmdButtons
mov ecx, 5A6510h
call ecx
push esi
call Lean::SetLeanFlags
pop esi
retn
}
}
Lean::Lean()
{
Game::Cmd_AddCommand("+leanleft", Lean::IN_LeanLeft_Down, Command::Allocate(), 1);
Game::Cmd_AddCommand("-leanleft", Lean::IN_LeanLeft_Up, Command::Allocate(), 1);
Game::Cmd_AddCommand("+leanright", Lean::IN_LeanRight_Down, Command::Allocate(), 1);
Game::Cmd_AddCommand("-leanright", Lean::IN_LeanRight_Up, Command::Allocate(), 1);
Utils::Hook(0x5A6D84, Lean::CL_CmdButtonsStub, HOOK_CALL).Install()->Quick();
}
}