3#include <simplesquirrel/simplesquirrel.hpp>
11void Attributes::expose(ssq::Table& table) {
12 auto cls = table.addClass(
name, Attributes::create,
false);
16 "AttributeSet", std::function<AttributeSet*()>([]() ->
AttributeSet* {
return nullptr; }),
true);
17 set.addFunc(
"getSubject", [](AttributeSet*
s) {
return s ?
s->subject() :
std::
string{}; });
18 set.addFunc(
"setBase", [](AttributeSet*
s,
const std::string&
key,
float value) {
21 set.addFunc(
"modifyBase", [](AttributeSet*
s,
const std::string&
key,
float value) {
25 set.addFunc(
"getBase", [](AttributeSet*
s,
const std::string&
key,
float fallback) {
26 return s ? float(
s->getBase(
key, fallback)) : fallback;
28 set.addFunc(
"getFinal", [](AttributeSet*
s,
const std::string&
key,
float fallback) {
29 return s ? float(
s->getFinal(
key, fallback)) : fallback;
31 set.addFunc(
"addModifier", [](AttributeSet*
s,
const std::string&
id,
const std::string& attribute,
32 const std::string& source,
const std::string&
operation,
float value,
int priority) {
33 return s &&
s->addModifier(
id, attribute, source,
operation,
value, priority);
35 set.addFunc(
"removeModifier",
36 [](AttributeSet*
s,
const std::string&
id) {
return s &&
s->removeModifier(
id).ok(); });
37 set.addFunc(
"removeBySource", [](AttributeSet*
s,
const std::string& source,
const std::string& attribute) {
39 auto result =
s->removeBySource(source, attribute);
40 return result.ok() ? result.value() : 0;
44 set.addFunc(
"getModifierId", [](AttributeSet*
s,
int index) {
45 const auto*
m =
s ?
s->modifierAt(
index) :
nullptr;
46 return m ?
m->id : std::string{};
48 set.addFunc(
"getModifierAttribute", [](AttributeSet*
s,
int index) {
49 const auto*
m =
s ?
s->modifierAt(
index) :
nullptr;
50 return m ?
m->attribute : std::string{};
52 set.addFunc(
"getModifierSource", [](AttributeSet*
s,
int index) {
53 const auto*
m =
s ?
s->modifierAt(
index) :
nullptr;
54 return m ?
m->source : std::string{};
56 set.addFunc(
"getModifierOperation", [](AttributeSet*
s,
int index) {
57 const auto*
m =
s ?
s->modifierAt(
index) :
nullptr;
58 if (!
m)
return std::string{};
62 set.addFunc(
"getModifierPriority", [](AttributeSet*
s,
int index) {
63 const auto*
m =
s ?
s->modifierAt(
index) :
nullptr;
64 return m ?
m->priority : 0;
66 set.addFunc(
"getModifierSequence", [](AttributeSet*
s,
int index) {
67 const auto*
m =
s ?
s->modifierAt(
index) :
nullptr;
68 return m ?
m->sequence : std::uint64_t(0);
72void Attributes::expose(ssq::Class&
cls) {
ActionParameterOperation operation
#define Module_IMPL(ModuleName, newExpr)
virtual std::string getName() const =0
Returns the name.
Generic owning collection of canonical attributes and modifiers.
int modifierCount() const
Number of modifiers.
void clearModifiers()
Remove all modifiers.
bool has(const AttributeId &attribute) const
Return whether a base value or modifier names the attribute.
Generic named numeric attributes and modifier module.
AttributeSet * newSet(const std::string &subject={})
Create a caller-owned set associated with an optional stable subject id.
const char * attributeOperationName(AttributeOperation operation) noexcept
Stable spelling of a built-in attribute operation. @ownership The returned string is a borrowed,...