
#ifndef DAMAGEDISPATCH_HPP
#define DAMAGEDISPATCH_HPP

#pragma once


#define INTERFACE_DamageDispatch(post)							\
	public:														\
		virtual void InflictCriticalHit(MWInternalDamageObject& internal_damage_object) ##post	\
		virtual Scalar TakeDamage(MWInternalDamageObject& internal_damage_object, Scalar damage_taken, Entity__TakeDamageMessage *message) ##post \
		virtual void KillAllContainedSubsystems(MWInternalDamageObject& internal_damage_object) ##post

#define PURE_DamageDispatch	   INTERFACE_DamageDispatch(=0;)
#define DERIVED_DamageDispatch INTERFACE_DamageDispatch(;)



namespace MechWarrior4
{
	class MWInternalDamageObject;

	class DamageDispatch
	{
		PURE_DamageDispatch;

	  public:
		static DamageDispatch* GetInstance()
		{
			return (m_Instance);
		}

	    static DamageDispatch* m_Instance;

		static void
			SetGlobalInvulnerability(bool fInvulnerable);

		static bool
			GetGlobalInvulnerability();

	  private:
		static bool
			m_GlobalInvulnerability;
	};
};


#endif // DAMAGEDISPATCH_HPP