MCPcopy Create free account
hub / github.com/OpenStarbound/OpenStarbound / makeUniqueEffectCallbacks

Method makeUniqueEffectCallbacks

source/game/StarStatusController.cpp:805–854  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

803}
804
805LuaCallbacks StatusController::makeUniqueEffectCallbacks(UniqueEffectInstance& uniqueEffect) {
806 LuaCallbacks callbacks;
807
808 callbacks.registerCallback("duration", [this, &uniqueEffect]() {
809 return m_uniqueEffectMetadata.getNetElement(uniqueEffect.metadataId)->duration;
810 });
811 callbacks.registerCallback("modifyDuration", [this, &uniqueEffect](float duration) {
812 auto metadata = m_uniqueEffectMetadata.getNetElement(uniqueEffect.metadataId);
813 if (metadata->duration)
814 *metadata->duration += duration;
815 });
816 callbacks.registerCallback("expire", [this, &uniqueEffect]() {
817 auto metadata = m_uniqueEffectMetadata.getNetElement(uniqueEffect.metadataId);
818 if (metadata->duration)
819 metadata->duration = 0.0f;
820 });
821 callbacks.registerCallback("sourceEntity", [this, &uniqueEffect]() -> Maybe<EntityId> {
822 auto metadata = m_uniqueEffectMetadata.getNetElement(uniqueEffect.metadataId);
823 auto sourceEntityId = metadata->sourceEntityId.get();
824 if (!sourceEntityId)
825 return m_parentEntity->entityId();
826 if (sourceEntityId == NullEntityId)
827 return {};
828 return sourceEntityId;
829 });
830 callbacks.registerCallback("setParentDirectives", [&uniqueEffect](Maybe<String> const& directives) {
831 uniqueEffect.parentDirectives = directives.value();
832 });
833 callbacks.registerCallback("getParameter", [&uniqueEffect](String const& name, Json const& def) -> Json {
834 return uniqueEffect.effectConfig.effectConfig.query(name, def);
835 });
836 callbacks.registerCallback("addStatModifierGroup", [this, &uniqueEffect](List<StatModifier> const& modifiers) -> StatModifierGroupId {
837 auto newGroupId = m_statCollection.addStatModifierGroup(modifiers);
838 uniqueEffect.modifierGroups.add(newGroupId);
839 return newGroupId;
840 });
841 callbacks.registerCallback("setStatModifierGroup", [this, &uniqueEffect](StatModifierGroupId groupId, List<StatModifier> const& modifiers) {
842 if (!uniqueEffect.modifierGroups.contains(groupId))
843 throw StatusException("Cannot set stat modifier group that was not added from this effect");
844 m_statCollection.setStatModifierGroup(groupId, modifiers);
845 });
846 callbacks.registerCallback("removeStatModifierGroup", [this, &uniqueEffect](StatModifierGroupId groupId) {
847 if (!uniqueEffect.modifierGroups.contains(groupId))
848 throw StatusException("Cannot remove stat modifier group that was not added from this effect");
849 m_statCollection.removeStatModifierGroup(groupId);
850 uniqueEffect.modifierGroups.remove(groupId);
851 });
852
853 return callbacks;
854}
855
856}

Callers

nothing calls this directly

Calls 12

getNetElementMethod · 0.80
entityIdMethod · 0.80
registerCallbackMethod · 0.45
getMethod · 0.45
valueMethod · 0.45
queryMethod · 0.45
addStatModifierGroupMethod · 0.45
addMethod · 0.45
containsMethod · 0.45
setStatModifierGroupMethod · 0.45
removeMethod · 0.45

Tested by

no test coverage detected