#include "scripts/common.txt"
#include "scripts/BP_common.txt"

//(3) Max Regenerations -32768..32767 (flags)

const int BP_VF_START_SHOWN		= 1 << 0; //Starts visible
const int BP_VF_NO_PERSIST		= 1 << 1; //Never tries to mark the persistent bit
const int BP_VF_BLOCKER			= 1 << 2; //Unblock sector when on and block when off

class BP_Visible : ScriptObject
{
    kActor @self;
	int flags;
	//------------------------------------------------------------------------------------------------------------------------
    BP_Visible(kActor @actor)
	{
        @self = actor;
		flags = 0;
    }
	//------------------------------------------------------------------------------------------------------------------------
    void OnBeginLevel()
    {
		flags = self.SpawnParams(3);
		
		if (!self.IsPersistentMarked())
		{
			TurnOff();
		}
	}
	//------------------------------------------------------------------------------------------------------------------------
    void OnRestore()
    {
		TurnOn();
    }
	//------------------------------------------------------------------------------------------------------------------------
	void OnActivate()
	{
		self.Flags() &= ~AF_ACTIVATED;
		if (self.IsPersistentMarked())
		{
			return;
			//TurnOff();
		}
		else
		{
			TurnOn();
		}
	}
	//------------------------------------------------------------------------------------------------------------------------
	void Block()
	{
		if (flags & BP_VF_BLOCKER != 0)
		{
			BlockArea(true, self);
		}
	}
	//------------------------------------------------------------------------------------------------------------------------
	void Unblock()
	{
		if (flags & BP_VF_BLOCKER != 0)
		{
			BlockArea(false, self);
		}
	}
	//------------------------------------------------------------------------------------------------------------------------
	void SetPersistentBit(bool clear)
	{
		if (flags & BP_VF_NO_PERSIST == 0)
		{
			self.MarkPersistentBit(clear);
		}
	}
	//------------------------------------------------------------------------------------------------------------------------
	void TurnOn()
	{
		if (flags & BP_VF_START_SHOWN != 0)
		{
			self.Flags() |= (AF_HIDDEN|AF_NODRAW);
		}
		else
		{
			self.Flags() &= ~(AF_HIDDEN|AF_NODRAW);
		}
		Unblock();
		SetPersistentBit(false);
	}
	//------------------------------------------------------------------------------------------------------------------------
	void TurnOff()
	{
		if (flags & BP_VF_START_SHOWN != 0)
		{
			self.Flags() &= ~(AF_HIDDEN|AF_NODRAW);
		}
		else
		{
			self.Flags() |= (AF_HIDDEN|AF_NODRAW);
		}
		Block();
		SetPersistentBit(true);
	}
	//------------------------------------------------------------------------------------------------------------------------
    void OnTick()
	{
    }
	//------------------------------------------------------------------------------------------------------------------------
    void OnSpawn()
	{
    }
	//------------------------------------------------------------------------------------------------------------------------
}
