CreatureLib/CInterface/Library/AttackData.cpp

50 lines
2.4 KiB
C++

#include "../../src/Library/Attacks/AttackData.hpp"
#include "../Core.hpp"
using namespace CreatureLib::Library;
export u8 CreatureLib_AttackData_Construct(AttackData*& out, const char* name, u8 type, AttackCategory category,
u8 power, u8 accuracy, u8 baseUsage, AttackTarget target, i8 priority,
float effectChance, const char* effectName,
EffectParameter* effectParameters[], size_t effectParameterCount,
const char* flags[], size_t flagsCount) {
Try({
std::unordered_set<u32> conversedFlags(flagsCount);
for (size_t i = 0; i < flagsCount; i++) {
conversedFlags.insert(ArbUt::StringView::CalculateHash(flags[i]));
}
ArbUt::List<EffectParameter*> effectParameterList(effectParameterCount);
for (size_t i = 0; i < effectParameterCount; i++) {
effectParameterList.Append(effectParameters[i]);
}
auto effect = new SecondaryEffect(effectChance, ArbUt::StringView(effectName), effectParameterList);
out = new AttackData(ArbUt::StringView(name), type, category, power, accuracy, baseUsage, target, priority,
effect, conversedFlags);
})
};
export void CreatureLib_AttackData_Destruct(const AttackData* p) { delete p; }
export const char* CreatureLib_AttackData_GetName(const AttackData* p) { return p->GetName().c_str(); }
SIMPLE_GET_FUNC(AttackData, GetType, u8);
SIMPLE_GET_FUNC(AttackData, GetCategory, AttackCategory);
SIMPLE_GET_FUNC(AttackData, GetBasePower, u8);
SIMPLE_GET_FUNC(AttackData, GetAccuracy, u8);
SIMPLE_GET_FUNC(AttackData, GetBaseUsages, u8);
SIMPLE_GET_FUNC(AttackData, GetTarget, AttackTarget);
SIMPLE_GET_FUNC(AttackData, GetPriority, i8);
export bool CreatureLib_AttackData_HasSecondaryEffect(const AttackData* p) { return p->HasSecondaryEffect(); }
export float CreatureLib_AttackData_GetSecondaryEffectChance(const AttackData* p) {
return p->GetSecondaryEffect()->GetChance();
}
export const char* CreatureLib_AttackData_GetSecondaryEffectName(const AttackData* p) {
return p->GetSecondaryEffect()->GetEffectName().c_str();
}
export bool CreatureLib_AttackData_HasFlag(const AttackData* p, const char* key) {
return p->HasFlag(ArbUt::StringView::CalculateHash(key));
}