ContainerLocked.c
class ContainerLockedBaseclass Land_ContainerLocked_Blue_DEclass Land_ContainerLocked_Yellow_DEclass Land_ContainerLocked_Orange_DEclass Land_ContainerLocked_Red_DE
class ContainerLockedBase : BuildingSuper
{
protected int m_LockedMask = 0;
protected int m_OpeningMask = 0;
void ContainerLockedBase()
{
int count = GetDoorCount();
for (int i = 0; i < count; i++)
{
LockDoor(i);
}
}
override void OnStoreSave(ParamsWriteContext ctx)
{
super.OnStoreSave(ctx);
ctx.Write(m_LockedMask);
ctx.Write(m_OpeningMask);
}
override bool OnStoreLoad(ParamsReadContext ctx, int version)
{
if (!super.OnStoreLoad(ctx, version))
return false;
ctx.Read(m_LockedMask);
ctx.Read(m_OpeningMask);
HandleDoorLoad();
return true;
}
protected void HandleDoorLoad()
{
int count = GetDoorCount();
int i;
//locking
for (i = 0; i < count; i++)
{
if (m_LockedMask & (1 << i))
{
LockDoor(i,true);
}
else
{
UnlockDoor(i);
}
}
//then opening
for (i = 0; i < count; i++)
{
if (m_OpeningMask & (1 << i) && !IsDoorLocked(i))
{
OpenDoor(i);
}
}
}
//////////////////////////////////////////
//events
override void OnDoorLocked(DoorLockParams params)
{
super.OnDoorLocked(params);
m_LockedMask |= 1 << params.param1;
string selectionName = string.Format("side%1_lock",(params.param1 + 1));
SetAnimationPhase(selectionName,0);
}
override void OnDoorUnlocked(DoorLockParams params)
{
super.OnDoorUnlocked(params);
int doorIdx = params.param1;
m_LockedMask &= ~(1 << doorIdx);
string selectionName = string.Format("side%1_lock",(doorIdx + 1));
SetAnimationPhase(selectionName,1);
if (!g_Game.IsDedicatedServer())
SEffectManager.PlaySoundEnviroment("Land_ContainerLocked_lock_SoundSet",GetDoorSoundPos(doorIdx));
}
override void OnDoorCloseStart(DoorStartParams params)
{
super.OnDoorCloseStart(params);
m_OpeningMask &= ~(1 << params.param1);
}
override void OnDoorOpenStart(DoorStartParams params)
{
super.OnDoorOpenStart(params);
m_OpeningMask |= 1 << params.param1;
}
}
class Land_ContainerLocked_Blue_DE : ContainerLockedBase
{
override int GetLockCompatibilityType(int doorIdx)
{
return 1 << EBuildingLockType.SHIP_CONTAINER_0;
}
}
class Land_ContainerLocked_Yellow_DE : ContainerLockedBase
{
override int GetLockCompatibilityType(int doorIdx)
{
return 1 << EBuildingLockType.SHIP_CONTAINER_1;
}
}
class Land_ContainerLocked_Orange_DE : ContainerLockedBase
{
override int GetLockCompatibilityType(int doorIdx)
{
return 1 << EBuildingLockType.SHIP_CONTAINER_2;
}
}
class Land_ContainerLocked_Red_DE : ContainerLockedBase
{
override int GetLockCompatibilityType(int doorIdx)
{
return 1 << EBuildingLockType.SHIP_CONTAINER_3;
}
}