| 803 | } |
| 804 | |
| 805 | LuaCallbacks 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 | } |
nothing calls this directly
no test coverage detected