server-master/srcs/WingsAPI.Game/Act4/IAct4FlagManager.cs
2026-02-10 18:21:30 +01:00

108 lines
No EOL
1.9 KiB
C#

using System.Threading;
using WingsEmu.Game.Helpers;
namespace WingsEmu.Game.Act4;
public interface IAct4FlagManager
{
MapLocation AngelFlag { get; }
MapLocation DemonFlag { get; }
void SetAngelFlag(MapLocation mapLocation);
void SetDemonFlag(MapLocation mapLocation);
void RemoveAngelFlag();
void RemoveDemonFlag();
}
public class Act4FlagManager : IAct4FlagManager
{
private readonly ReaderWriterLockSlim _lock = new();
private MapLocation _angelFlag;
private MapLocation _demonFlag;
public MapLocation AngelFlag
{
get
{
_lock.EnterReadLock();
try
{
return _angelFlag;
}
finally
{
_lock.ExitReadLock();
}
}
}
public MapLocation DemonFlag
{
get
{
_lock.EnterReadLock();
try
{
return _demonFlag;
}
finally
{
_lock.ExitReadLock();
}
}
}
public void SetAngelFlag(MapLocation mapLocation)
{
_lock.EnterWriteLock();
try
{
_angelFlag = mapLocation;
}
finally
{
_lock.ExitWriteLock();
}
}
public void SetDemonFlag(MapLocation mapLocation)
{
_lock.EnterWriteLock();
try
{
_demonFlag = mapLocation;
}
finally
{
_lock.ExitWriteLock();
}
}
public void RemoveAngelFlag()
{
_lock.EnterWriteLock();
try
{
_angelFlag = null;
}
finally
{
_lock.ExitWriteLock();
}
}
public void RemoveDemonFlag()
{
_lock.EnterWriteLock();
try
{
_demonFlag = null;
}
finally
{
_lock.ExitWriteLock();
}
}
}