#pragma once
#include "Behavior.h"

class ImmunityBehavior final : public Behavior
{
public:
	/*
	 * Inherited
	 */

	explicit ImmunityBehavior(const uint32_t behaviorId) : Behavior(behaviorId) {
	}

	void Handle(BehaviorContext* context, RakNet::BitStream* bitStream, BehaviorBranchContext branch) override;

	void Calculate(BehaviorContext* context, RakNet::BitStream* bitStream, BehaviorBranchContext branch) override;

	void Timer(BehaviorContext* context, BehaviorBranchContext branch, LWOOBJID second) override;

	void Load() override;

private:
	// stuns
	bool m_ImmuneToStunAttack = false;
	bool m_ImmuneToStunEquip = false;
	bool m_ImmuneToStunInteract = false;
	bool m_ImmuneToStunJump = false; // Unused
	bool m_ImmuneToStunMove = false;
	bool m_ImmuneToStunTurn = false;
	bool m_ImmuneToStunUseItem = false; // Unused

	//status
	bool m_ImmuneToBasicAttack = false;
	bool m_ImmuneToDamageOverTime = false;
	bool m_ImmuneToKnockback = false;
	bool m_ImmuneToInterrupt = false;
	bool m_ImmuneToSpeed = false;
	bool m_ImmuneToImaginationGain = false;
	bool m_ImmuneToImaginationLoss = false;
	bool m_ImmuneToQuickbuildInterrupt = false;
	bool m_ImmuneToPullToPoint = false; // Unused in cdclient, but used in client
};