#pragma once
#include "CppScripts.h"

class AmDarklingDragon : public CppScripts::Script
{
public:
	/**
	 * @brief When called, this function will make self immune to stuns and initialize a weakspot boolean to false.
	 *
	 * @param self The Entity that called this function.
	 */
	void OnStartup(Entity* self) override;
	/**
	 * @brief When called, this function will destroy the golem if it was alive, otherwise returns immediately.
	 *
	 * @param self The Entity that called this function.
	 * @param killer The Entity that killed self.
	 */
	void OnDie(Entity* self, Entity* killer) override;
	/**
	 * @brief When self is hit or healed, this function will check if self is at zero armor.  If self is at zero armor, a golem Entity Quick Build
	 * is spawned that, when built, will reveal a weakpoint on the dragon that if hit will smash the dragon instantly.  If at more than zero armor,
	 * this function returns early.
	 *
	 * @param self The Entity that was hit.
	 * @param attacker The Entity that attacked self.
	 * @param damage The amount of damage attacker did to self.
	 */
	void OnHitOrHealResult(Entity* self, Entity* attacker, int32_t damage) override;
	/**
	 * @brief Called when self has a timer that ended.
	 *
	 * @param self The Entity who owns a timer that finished.
	 * @param timerName The name of a timer attacked to self that has ended.
	 */
	void OnTimerDone(Entity* self, std::string timerName) override;
	/**
	 * @brief When the Client has finished rebuilding the Golem for the dragon, this function exposes the weak spot for a set amount of time.
	 *
	 * @param self The Entity that called this script.
	 * @param sender The Entity that sent a fired event.
	 * @param args The argument that tells us what event has been fired off.
	 * @param param1 Unused in this script.
	 * @param param2 Unused in this script.
	 * @param param3 Unused in this script.
	 */
	void OnFireEventServerSide(Entity* self, Entity* sender, std::string args, int32_t param1, int32_t param2, int32_t param3) override;
};