#include "scripts/common.txt"

//(0) Target ID -32768..32767 (Trigger actor TID OnDamage)

class TurokDestructible : ScriptObject
{
    kActor @self;    
	//------------------------------------------------------------------------------------------------------------------------
    TurokDestructible(kActor @actor)
    {
        @self = actor;
    }
	//------------------------------------------------------------------------------------------------------------------------
    void OnTick(void)
    {
    }
	//------------------------------------------------------------------------------------------------------------------------
    void MeleeBluntHeavy(kActor @instigator, const float w, const float x, const float y, const float z)
    {
        self.MeleeObject("Damage_Blunt_20", kVec3(x, y, z), w);
    }
	//------------------------------------------------------------------------------------------------------------------------
    void OnDamage(kActor @instigator, kDictMem @damageDef, const int damage)
    {
        bool bValue = false;
        
        if (self.AnimState().PlayingID() == anim_destructibleDeath)
        {
            return;
        }
        
        if (damageDef is null)
        {
            return;
        }
        
        if (damageDef.GetBool("bExplode", bValue) && bValue)
        {
			StartDestroy();
        }
    }
	//------------------------------------------------------------------------------------------------------------------------
	// Because some stags won't collide with explosion hits
	//------------------------------------------------------------------------------------------------------------------------
	bool IsCustomDestructSend()
	{
		int targetTID = self.SpawnParams(0);
		if (Game.GetCurrentMapID() == 101 && (targetTID == 1055 || targetTID == 1056 || targetTID == 1057))
		{
			return true;
		}
		
		return false;
	}
	//------------------------------------------------------------------------------------------------------------------------
	// Because some stags won't collide with explosion hits
	//------------------------------------------------------------------------------------------------------------------------
	bool IsCustomDestructReceive()
	{
		int tID = self.TID();
		if (Game.GetCurrentMapID() == 101 && (tID == 1055 || tID == 1056 || tID == 1057))
		{
			return true;
		}
		
		return false;
	}
	//------------------------------------------------------------------------------------------------------------------------
	void StartDestroy()
	{
		if (!self.IsPersistentMarked())
		{
			if (IsCustomDestructSend())
			{
				int targetTID = self.SpawnParams(0);
				World.TriggerActorsByTID(self, targetTID);
			}
			
			self.AnimState().Blend(anim_destructibleDeath, 4.0f, 4.0f, 0);
			self.Flags() &= ~AF_SOLID;
			self.MarkPersistentBit(false);
		}
	}
	//------------------------------------------------------------------------------------------------------------------------
    void OnSpawn(void)
    {
        self.AnimState().Set(anim_destructibleIdle, 4.0f, ANF_LOOP);
    }
	//------------------------------------------------------------------------------------------------------------------------
	void OnActivate()
	{
		if (IsCustomDestructReceive())
		{
			StartDestroy();
		}
	}
	//------------------------------------------------------------------------------------------------------------------------
    void OnRestore(void)
    {
        self.Flags() |= AF_IGNORESOUNDEVENTS|AF_DEAD;
        self.Flags() &= ~AF_SOLID;
        
        self.AnimState().Set(anim_destructibleDeath, 4.0f, 0);
        self.AnimState().SetLastFrame(true);
    }
	//------------------------------------------------------------------------------------------------------------------------
};
