package BaseStatusEffect
using RTDB, Prereqs

JohnnySicknessAbstract : DebuffStatusEffect
{
	statusEffectType = "BaseStatusEffectTypes.Misc";
	gameplayTags = 
	[
		"JohnnySickness", "CameraAnimation", "Buff"
	];
	replicated = true;
	fk< StatModifierGroup > duration = "BaseStats.InfiniteDuration";
	uiData = "BaseStatusEffect.JohnnySicknessUI";
	stopActiveSfxOnDeactivate = false;
}

JohnnySicknessLow : JohnnySicknessAbstract
{
	fk< StatusEffectFX >[] VFX = 
	[
		{
			name = "johnny_sickness_lvl1";
		}
	];
	fk< GameplayLogicPackage >[] packages = 
	[
		{
			bool stackable = false;
			effectors = 
			[
				{
					CName animFeatureName = "CameraBreathingLow";
					float amplitudeWeight = 1.f;
					float blendInDuration = 2.f;
					float blendOutDuration = 2.f;
				} : BaseStatusEffect.BreathingAnimationEffector
			];
		} : GameplayLogicPackage, 
		{
			bool stackable = false;
			effectors = 
			[
				{
					CName effectorClassName = "PlaySFXEffector";
					CName activationSFXName = "vfx_fullscreen_johnny_sickness_low_start";
					CName deactivationSFXName = "vfx_fullscreen_johnny_sickness_low_stop";
				} : BaseStatusEffect.SFXEffector
			];
		} : GameplayLogicPackage, 
		{
			fk< StatModifier >[] stats = 
			[
				{
					statType = "BaseStats.StaminaRegenRate";
					modifierType = "Additive";
					value = -0.025f;
				} : ConstantStatModifier
			];
		} : GameplayLogicPackage
	];
}

JohnnySicknessMedium : JohnnySicknessAbstract
{
	fk< StatusEffectFX >[] VFX = 
	[
		{
			name = "johnny_sickness_lvl2";
		}
	];
	fk< GameplayLogicPackage >[] packages = 
	[
		{
			bool stackable = false;
			effectors = 
			[
				{
					CName animFeatureName = "CameraBreathingMedium";
					float amplitudeWeight = 1.f;
					float blendInDuration = 5.f;
					float blendOutDuration = 5.f;
				} : BaseStatusEffect.BreathingAnimationEffector
			];
		} : GameplayLogicPackage, 
		{
			bool stackable = false;
			effectors = 
			[
				{
					CName effectorClassName = "PlaySFXEffector";
					CName activationSFXName = "vfx_fullscreen_johnny_sickness_medium_start";
					CName deactivationSFXName = "vfx_fullscreen_johnny_sickness_medium_stop";
				} : BaseStatusEffect.SFXEffector
			];
		} : GameplayLogicPackage, 
		{
			fk< StatModifier >[] stats = 
			[
				{
					statType = "BaseStats.StaminaRegenRate";
					modifierType = "Additive";
					value = -0.05f;
				} : ConstantStatModifier
			];
		} : GameplayLogicPackage
	];
}

JohnnySicknessMediumQuest : JohnnySicknessMedium
{
	duration = 
	{
		statModifiers += 
		[
			{
				value = 5.f;
			} : BaseDurationMod
		];
	};
	fk< StatusEffectFX >[] VFX = 
	[
		{
			name = "johnny_sickness_lvl2";
		}
	];
	fk< GameplayLogicPackage >[] packages = 
	[
		{
			bool stackable = false;
			effectors = 
			[
				{
					CName animFeatureName = "CameraBreathingMedium";
					float amplitudeWeight = 0.5f;
					float blendInDuration = 5.f;
					float blendOutDuration = 5.f;
				} : BaseStatusEffect.BreathingAnimationEffector
			];
		} : GameplayLogicPackage, 
		{
			bool stackable = false;
			effectors = 
			[
				{
					CName effectorClassName = "PlaySFXEffector";
					CName activationSFXName = "vfx_fullscreen_johnny_sickness_medium_start";
					CName deactivationSFXName = "vfx_fullscreen_johnny_sickness_medium_stop";
				} : BaseStatusEffect.SFXEffector
			];
		} : GameplayLogicPackage, 
		{
			fk< StatModifier >[] stats = 
			[
				{
					statType = "BaseStats.StaminaRegenRate";
					modifierType = "Additive";
					value = -0.1f;
				} : ConstantStatModifier
			];
		} : GameplayLogicPackage
	];
}

JohnnySicknessHeavy : JohnnySicknessAbstract
{
	fk< StatusEffectFX >[] VFX = 
	[
		{
			name = "johnny_sickness_lvl3";
		}
	];
	fk< GameplayLogicPackage >[] packages = 
	[
		{
			bool stackable = false;
			effectors = 
			[
				{
					CName animFeatureName = "CameraBreathingSick";
					float amplitudeWeight = 1.f;
					float blendInDuration = 5.f;
					float blendOutDuration = 5.f;
				} : BaseStatusEffect.BreathingAnimationEffector
			];
		} : GameplayLogicPackage, 
		{
			bool stackable = false;
			effectors = 
			[
				{
					CName effectorClassName = "PlaySFXEffector";
					CName activationSFXName = "vfx_fullscreen_johnny_sickness_heavy_start";
					CName deactivationSFXName = "vfx_fullscreen_johnny_sickness_heavy_stop";
				} : BaseStatusEffect.SFXEffector
			];
		} : GameplayLogicPackage, 
		{
			fk< StatModifier >[] stats = 
			[
				{
					statType = "BaseStats.StaminaRegenRate";
					modifierType = "Additive";
					value = -0.15f;
				} : ConstantStatModifier
			];
		} : GameplayLogicPackage
	];
}

SFXEffector : Effector
{
	CName effectorClassName = "PlaySFXEffector";
	CName activationSFXName = "";
	CName deactivationSFXName = "";
}

JohnnySicknessUI : StatusEffectUIData
{
	string displayName = "LocKey#50579";
	string iconPath = "johnny_sickness_icon";
}

