载入中...
搜索中...
未找到
Attributes.cpp
浏览该文件的文档.
2
3#include <simplesquirrel/simplesquirrel.hpp>
4
5namespace eve::attributes {
6
8
9AttributeSet* Attributes::newSet(const std::string& subject) { return new AttributeSet(subject); }
10
11void Attributes::expose(ssq::Table& table) {
12 auto cls = table.addClass(name, Attributes::create, false);
13 expose(cls);
14
15 auto set = table.addClass<AttributeSet>(
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) {
19 if (s) s->setBase(key, double(value));
20 });
21 set.addFunc("modifyBase", [](AttributeSet* s, const std::string& key, float value) {
22 if (s) s->modifyBase(key, double(value));
23 });
24 set.addFunc("has", &AttributeSet::has);
25 set.addFunc("getBase", [](AttributeSet* s, const std::string& key, float fallback) {
26 return s ? float(s->getBase(key, fallback)) : fallback;
27 });
28 set.addFunc("getFinal", [](AttributeSet* s, const std::string& key, float fallback) {
29 return s ? float(s->getFinal(key, fallback)) : fallback;
30 });
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);
34 });
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) {
38 if (!s) return 0;
39 auto result = s->removeBySource(source, attribute);
40 return result.ok() ? result.value() : 0;
41 });
42 set.addFunc("clearModifiers", &AttributeSet::clearModifiers);
43 set.addFunc("getModifierCount", &AttributeSet::modifierCount);
44 set.addFunc("getModifierId", [](AttributeSet* s, int index) {
45 const auto* m = s ? s->modifierAt(index) : nullptr;
46 return m ? m->id : std::string{};
47 });
48 set.addFunc("getModifierAttribute", [](AttributeSet* s, int index) {
49 const auto* m = s ? s->modifierAt(index) : nullptr;
50 return m ? m->attribute : std::string{};
51 });
52 set.addFunc("getModifierSource", [](AttributeSet* s, int index) {
53 const auto* m = s ? s->modifierAt(index) : nullptr;
54 return m ? m->source : std::string{};
55 });
56 set.addFunc("getModifierOperation", [](AttributeSet* s, int index) {
57 const auto* m = s ? s->modifierAt(index) : nullptr;
58 if (!m) return std::string{};
59 if (m->operation == AttributeOperation::Custom) return m->policyId;
60 return std::string(attributeOperationName(m->operation));
61 });
62 set.addFunc("getModifierPriority", [](AttributeSet* s, int index) {
63 const auto* m = s ? s->modifierAt(index) : nullptr;
64 return m ? m->priority : 0;
65 });
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);
69 });
70}
71
72void Attributes::expose(ssq::Class& cls) {
73 cls.addFunc("getName", &Attributes::getName);
74 cls.addFunc("newSet", &Attributes::newSet);
75}
76
77} // namespace eve::attributes
ActionParameterOperation operation
double value
int subject
Definition AnimSmr.cpp:163
const std::string & s
HSQOBJECT cls
Definition ECS.cpp:21
std::uint32_t key
std::string name
#define Module_IMPL(ModuleName, newExpr)
Definition Module.h:26
std::string string
uint32_t index
float m[16]
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.
Definition Attributes.h:11
AttributeSet * newSet(const std::string &subject={})
Create a caller-owned set associated with an optional stable subject id.
Definition Attributes.cpp:9
const char * attributeOperationName(AttributeOperation operation) noexcept
Stable spelling of a built-in attribute operation. @ownership The returned string is a borrowed,...