108 lines
No EOL
1.9 KiB
C#
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();
|
|
}
|
|
}
|
|
} |