package ru.dbotthepony.kstarbound.defs.actor

import com.google.common.collect.ImmutableSet

enum class StatModifierType(vararg names: String) {
	BASE_ADDITION("amount", "baseAddition"),

	// Multipliers act exactly the way you'd expect: 0.0 is a 100% reduction of the
	// base stat, while 2.0 is a 100% increase. Since these are *base* multipliers
	// they do not interact with each other, thus stacking a 0.0 and a 2.0 leaves
	// the stat unmodified

	// in other words, they stack additively.
	BASE_MULTIPLICATION("baseMultiplier"),

	// KStarbound extension, added on top of base addition and base multiplication,
	// but BEFORE effectiveMultiplier
	OVERALL_ADDITION("effectiveAmount", "effectiveAddition"),

	// Unlike base multipliers, these all stack multiplicatively with the final
	// stat value (including all base and value modifiers) such that an effective
	// multiplier of 0.0 will ALWAYS reduce the stat to 0 regardless of other
	// effects

	// in other words, they stack multiplicatively
	OVERALL_MULTIPLICATION("effectiveMultiplier");

	val names: ImmutableSet<String> = ImmutableSet.copyOf(names)
}
