mirror of
https://github.com/VCMP-SqMod/SqMod.git
synced 2024-11-08 00:37:15 +01:00
4a6bfc086c
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.
227 lines
8.1 KiB
C++
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
|