1
0
mirror of https://github.com/VCMP-SqMod/SqMod.git synced 2024-11-08 08:47:17 +01:00
SqMod/module/Entity/KeyBind.cpp
Sandu Liviu Catalin 4a6bfc086c Major plugin refactor and cleanup.
Switched to POCO library for unified platform/library interface.
Deprecated the external module API. It was creating more problems than solving.
Removed most built-in libraries in favor of system libraries for easier maintenance.
Cleaned and secured code with help from static analyzers.
2021-01-30 08:51:39 +02:00

227 lines
8.1 KiB
C++

// ------------------------------------------------------------------------------------------------
#include "Entity/KeyBind.hpp"
#include "Core.hpp"
#include "Core/Tasks.hpp"
// ------------------------------------------------------------------------------------------------
namespace SqMod {
// ------------------------------------------------------------------------------------------------
SQMOD_DECL_TYPENAME(Typename, _SC("SqKeyBind"))
// ------------------------------------------------------------------------------------------------
const int32_t CKeyBind::Max = SQMOD_KEYBIND_POOL;
// ------------------------------------------------------------------------------------------------
SQInteger CKeyBind::SqGetNull(HSQUIRRELVM vm)
{
sq_pushobject(vm, Core::Get().GetNullKeyBind().GetObj());
return 1;
}
// ------------------------------------------------------------------------------------------------
LightObj & CKeyBind::GetNull()
{
return Core::Get().GetNullKeyBind();
}
// ------------------------------------------------------------------------------------------------
CKeyBind::CKeyBind(int32_t id)
: m_ID(VALID_ENTITYGETEX(id, SQMOD_KEYBIND_POOL))
, m_Tag(fmt::format("{}", id))
{
/* ... */
}
// ------------------------------------------------------------------------------------------------
const String & CKeyBind::ToString() const
{
return m_Tag;
}
// ------------------------------------------------------------------------------------------------
const String & CKeyBind::GetTag() const
{
return m_Tag;
}
// ------------------------------------------------------------------------------------------------
void CKeyBind::SetTag(StackStrF & tag)
{
if (tag.mLen > 0)
{
m_Tag.assign(tag.mPtr, static_cast< size_t >(tag.mLen));
}
else
{
m_Tag.clear();
}
}
// ------------------------------------------------------------------------------------------------
CKeyBind & CKeyBind::ApplyTag(StackStrF & tag)
{
SetTag(tag);
return *this;
}
// ------------------------------------------------------------------------------------------------
LightObj & CKeyBind::GetData()
{
// Validate the managed identifier
Validate();
// Return the requested information
return m_Data;
}
// ------------------------------------------------------------------------------------------------
void CKeyBind::SetData(LightObj & data)
{
// Validate the managed identifier
Validate();
// Apply the specified value
m_Data = data;
}
// ------------------------------------------------------------------------------------------------
bool CKeyBind::Destroy(int32_t header, LightObj & payload) const
{
// Validate the managed identifier
Validate();
// Perform the requested operation
return Core::Get().DelKeyBind(m_ID, header, payload);
}
// ------------------------------------------------------------------------------------------------
LightObj & CKeyBind::GetEvents() const
{
// Validate the managed identifier
Validate();
// Return the associated event table
return Core::Get().GetKeyBind(m_ID).mEvents;
}
// ------------------------------------------------------------------------------------------------
void CKeyBind::CustomEvent(int32_t header, LightObj & payload) const
{
// Validate the managed identifier
Validate();
// Perform the requested action
Core::Get().EmitKeyBindCustom(m_ID, header, payload);
}
// ------------------------------------------------------------------------------------------------
int32_t CKeyBind::GetFirst() const
{
// Validate the managed identifier
Validate();
// Return the requested information
return Core::Get().GetKeyBind(m_ID).mFirst;
}
// ------------------------------------------------------------------------------------------------
int32_t CKeyBind::GetSecond() const
{
// Validate the managed identifier
Validate();
// Return the requested information
return Core::Get().GetKeyBind(m_ID).mSecond;
}
// ------------------------------------------------------------------------------------------------
int32_t CKeyBind::GetThird() const
{
// Validate the managed identifier
Validate();
// Return the requested information
return Core::Get().GetKeyBind(m_ID).mThird;
}
// ------------------------------------------------------------------------------------------------
bool CKeyBind::IsRelease() const
{
// Validate the managed identifier
Validate();
// Return the requested information
return static_cast< bool >(Core::Get().GetKeyBind(m_ID).mRelease);
}
// ------------------------------------------------------------------------------------------------
static LightObj & KeyBind_CreateEx1a(int32_t slot, bool release, int32_t primary, int32_t secondary,
int32_t alternative)
{
return Core::Get().NewKeyBind(slot, release, primary, secondary, alternative,
SQMOD_CREATE_DEFAULT, NullLightObj());
}
static LightObj & KeyBind_CreateEx1b(int32_t slot, bool release, int32_t primary, int32_t secondary,
int32_t alternative, int32_t header, LightObj & payload)
{
return Core::Get().NewKeyBind(slot, release, primary, secondary, alternative, header, payload);
}
// ------------------------------------------------------------------------------------------------
static LightObj & KeyBind_Create1a(bool release, int32_t primary, int32_t secondary, int32_t alternative)
{
return Core::Get().NewKeyBind(-1, release, primary, secondary, alternative,
SQMOD_CREATE_DEFAULT, NullLightObj());
}
static LightObj & KeyBind_Create1b(bool release, int32_t primary, int32_t secondary, int32_t alternative,
int32_t header, LightObj & payload)
{
return Core::Get().NewKeyBind(-1, release, primary, secondary, alternative, header, payload);
}
// ------------------------------------------------------------------------------------------------
static SQInteger KeyBind_UnusedSlot()
{
return _Func->GetKeyBindUnusedSlot();
}
// ================================================================================================
void Register_CKeyBind(HSQUIRRELVM vm)
{
RootTable(vm).Bind(Typename::Str,
Class< CKeyBind, NoConstructor< CKeyBind > >(vm, Typename::Str)
// Meta-methods
.SquirrelFunc(_SC("_typename"), &Typename::Fn)
.Func(_SC("_tostring"), &CKeyBind::ToString)
// Static Values
.SetStaticValue(_SC("MaxID"), CKeyBind::Max)
// Core Properties
.Prop(_SC("On"), &CKeyBind::GetEvents)
.Prop(_SC("ID"), &CKeyBind::GetID)
.Prop(_SC("Tag"), &CKeyBind::GetTag, &CKeyBind::SetTag)
.Prop(_SC("Data"), &CKeyBind::GetData, &CKeyBind::SetData)
.Prop(_SC("Active"), &CKeyBind::IsActive)
// Core Methods
.FmtFunc(_SC("SetTag"), &CKeyBind::ApplyTag)
.Func(_SC("CustomEvent"), &CKeyBind::CustomEvent)
// Core Overloads
.Overload(_SC("Destroy"), &CKeyBind::Destroy0)
.Overload(_SC("Destroy"), &CKeyBind::Destroy1)
.Overload(_SC("Destroy"), &CKeyBind::Destroy)
// Properties
.Prop(_SC("First"), &CKeyBind::GetFirst)
.Prop(_SC("Second"), &CKeyBind::GetSecond)
.Prop(_SC("Third"), &CKeyBind::GetThird)
.Prop(_SC("Release"), &CKeyBind::IsRelease)
// Static Functions
.StaticFunc(_SC("UnusedSlot"), &KeyBind_UnusedSlot)
// Static Overloads
.StaticOverload(_SC("CreateEx"), &KeyBind_CreateEx1a)
.StaticOverload(_SC("CreateEx"), &KeyBind_CreateEx1b)
.StaticOverload(_SC("Create"), &KeyBind_Create1a)
.StaticOverload(_SC("Create"), &KeyBind_Create1b)
// Raw Squirrel Methods
.SquirrelFunc(_SC("NullInst"), &CKeyBind::SqGetNull)
.SquirrelFunc(_SC("MakeTask"), &Tasks::MakeTask< CKeyBind, ENT_KEYBIND >)
.SquirrelFunc(_SC("DropTask"), &Tasks::DropTask< CKeyBind, ENT_KEYBIND >)
.SquirrelFunc(_SC("DoesTask"), &Tasks::DoesTask< CKeyBind, ENT_KEYBIND >)
.SquirrelFunc(_SC("FindTask"), &Tasks::FindTask< CKeyBind, ENT_KEYBIND >)
);
}
} // Namespace:: SqMod