Core/AreaTriggers: Code cleanup
Port From (https://github.com/TrinityCore/TrinityCore/commit/7851cd3a9618b245c9b425dcaf71bbadbfecd054)
This commit is contained in:
@@ -100,9 +100,9 @@ namespace Game.Entities
|
||||
|
||||
_areaTriggerTemplate = _areaTriggerMiscTemplate.Template;
|
||||
|
||||
_Create(ObjectGuid.Create(HighGuid.AreaTrigger, GetMapId(), GetTemplate().Id, caster.GetMap().GenerateLowGuid(HighGuid.AreaTrigger)));
|
||||
_Create(ObjectGuid.Create(HighGuid.AreaTrigger, GetMapId(), GetTemplate().Id.Id, caster.GetMap().GenerateLowGuid(HighGuid.AreaTrigger)));
|
||||
|
||||
SetEntry(GetTemplate().Id);
|
||||
SetEntry(GetTemplate().Id.Id);
|
||||
SetDuration(duration);
|
||||
|
||||
SetObjectScale(1.0f);
|
||||
@@ -212,20 +212,20 @@ namespace Game.Entities
|
||||
return at;
|
||||
}
|
||||
|
||||
bool LoadFromDB(uint spawnId, Map map, bool addToMap, bool allowDuplicate)
|
||||
public override bool LoadFromDB(ulong spawnId, Map map, bool addToMap, bool allowDuplicate)
|
||||
{
|
||||
AreaTriggerServerPosition position = Global.AreaTriggerDataStorage.GetAreaTriggerServerPosition(spawnId);
|
||||
AreaTriggerSpawn position = Global.AreaTriggerDataStorage.GetAreaTriggerSpawn(spawnId);
|
||||
if (position == null)
|
||||
return false;
|
||||
|
||||
AreaTriggerTemplate areaTriggerTemplate = Global.AreaTriggerDataStorage.GetAreaTriggerServerTemplate(position.Id);
|
||||
AreaTriggerTemplate areaTriggerTemplate = Global.AreaTriggerDataStorage.GetAreaTriggerTemplate(position.Id);
|
||||
if (areaTriggerTemplate == null)
|
||||
return false;
|
||||
|
||||
return CreateServer(map, areaTriggerTemplate, position);
|
||||
}
|
||||
|
||||
bool CreateServer(Map map, AreaTriggerTemplate areaTriggerTemplate, AreaTriggerServerPosition position)
|
||||
bool CreateServer(Map map, AreaTriggerTemplate areaTriggerTemplate, AreaTriggerSpawn position)
|
||||
{
|
||||
SetMap(map);
|
||||
Relocate(position.Location);
|
||||
@@ -237,19 +237,21 @@ namespace Game.Entities
|
||||
|
||||
_areaTriggerTemplate = areaTriggerTemplate;
|
||||
|
||||
_Create(ObjectGuid.Create(HighGuid.AreaTrigger, GetMapId(), areaTriggerTemplate.Id, GetMap().GenerateLowGuid(HighGuid.AreaTrigger)));
|
||||
_Create(ObjectGuid.Create(HighGuid.AreaTrigger, GetMapId(), areaTriggerTemplate.Id.Id, GetMap().GenerateLowGuid(HighGuid.AreaTrigger)));
|
||||
|
||||
SetEntry(areaTriggerTemplate.Id);
|
||||
SetEntry(areaTriggerTemplate.Id.Id);
|
||||
|
||||
SetObjectScale(1.0f);
|
||||
|
||||
if (position.PhaseId != 0 || position.PhaseGroup != 0 || position.PhaseUseFlags != 0)
|
||||
if (position.PhaseUseFlags != 0 || position.PhaseId != 0 || position.PhaseGroup != 0)
|
||||
PhasingHandler.InitDbPhaseShift(GetPhaseShift(), (PhaseUseFlagsValues)position.PhaseUseFlags, position.PhaseId, position.PhaseGroup);
|
||||
|
||||
UpdateShape();
|
||||
|
||||
AI_Initialize();
|
||||
|
||||
_ai.OnCreate();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -258,34 +260,31 @@ namespace Game.Entities
|
||||
base.Update(diff);
|
||||
_timeSinceCreated += diff;
|
||||
|
||||
if (IsServerSide())
|
||||
if (!IsServerSide())
|
||||
{
|
||||
UpdateTargetList();
|
||||
return;
|
||||
}
|
||||
|
||||
// "If" order matter here, Orbit > Attached > Splines
|
||||
if (HasOrbit())
|
||||
{
|
||||
UpdateOrbitPosition(diff);
|
||||
}
|
||||
else if(GetTemplate().HasFlag(AreaTriggerFlags.HasAttached))
|
||||
{
|
||||
Unit target = GetTarget();
|
||||
if (target)
|
||||
GetMap().AreaTriggerRelocation(this, target.GetPositionX(), target.GetPositionY(), target.GetPositionZ(), target.GetOrientation());
|
||||
}
|
||||
else
|
||||
UpdateSplinePosition(diff);
|
||||
|
||||
if (GetDuration() != -1)
|
||||
{
|
||||
if (GetDuration() > diff)
|
||||
_UpdateDuration((int)(_duration - diff));
|
||||
else
|
||||
// "If" order matter here, Orbit > Attached > Splines
|
||||
if (HasOrbit())
|
||||
{
|
||||
Remove(); // expired
|
||||
return;
|
||||
UpdateOrbitPosition(diff);
|
||||
}
|
||||
else if (GetTemplate().HasFlag(AreaTriggerFlags.HasAttached))
|
||||
{
|
||||
Unit target = GetTarget();
|
||||
if (target)
|
||||
GetMap().AreaTriggerRelocation(this, target.GetPositionX(), target.GetPositionY(), target.GetPositionZ(), target.GetOrientation());
|
||||
}
|
||||
else
|
||||
UpdateSplinePosition(diff);
|
||||
|
||||
if (GetDuration() != -1)
|
||||
{
|
||||
if (GetDuration() > diff)
|
||||
_UpdateDuration((int)(_duration - diff));
|
||||
else
|
||||
{
|
||||
Remove(); // expired
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -967,7 +966,7 @@ namespace Game.Entities
|
||||
|
||||
AreaTriggerAI GetAI() { return _ai; }
|
||||
|
||||
public bool IsServerSide() { return _areaTriggerTemplate.IsServerSide; }
|
||||
public bool IsServerSide() { return _areaTriggerTemplate.Id.IsServerSide; }
|
||||
|
||||
public override bool IsNeverVisibleFor(WorldObject seer) { return IsServerSide(); }
|
||||
|
||||
@@ -1034,10 +1033,9 @@ namespace Game.Entities
|
||||
Optional<AreaTriggerOrbitInfo> _orbitInfo;
|
||||
|
||||
AreaTriggerMiscTemplate _areaTriggerMiscTemplate;
|
||||
AreaTriggerTemplate _areaTriggerTemplate;
|
||||
List<ObjectGuid> _insideUnits = new List<ObjectGuid>();
|
||||
|
||||
AreaTriggerAI _ai;
|
||||
|
||||
AreaTriggerTemplate _areaTriggerTemplate;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -187,24 +187,28 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
|
||||
struct AreaTriggerTemplateKey
|
||||
public struct AreaTriggerId
|
||||
{
|
||||
public uint Id;
|
||||
public bool IsServer;
|
||||
public bool IsServerSide;
|
||||
|
||||
public AreaTriggerTemplateKey(uint id, bool isServer)
|
||||
public override int GetHashCode()
|
||||
{
|
||||
Id = id;
|
||||
IsServer = isServer;
|
||||
return Id.GetHashCode() ^ IsServerSide.GetHashCode();
|
||||
}
|
||||
|
||||
public static bool operator ==(AreaTriggerTemplateKey A, AreaTriggerTemplateKey B)
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
return A.Id == B.Id && A.IsServer == B.IsServer;
|
||||
return Equals((AreaTriggerId)obj);
|
||||
}
|
||||
public static bool operator !=(AreaTriggerTemplateKey A, AreaTriggerTemplateKey B)
|
||||
|
||||
public static bool operator ==(AreaTriggerId left, AreaTriggerId right)
|
||||
{
|
||||
return A.Id != B.Id && A.IsServer != B.IsServer;
|
||||
return left.Id == right.Id && left.IsServerSide == right.IsServerSide;
|
||||
}
|
||||
public static bool operator !=(AreaTriggerId left, AreaTriggerId right)
|
||||
{
|
||||
return !(left == right);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -256,7 +260,7 @@ namespace Game.Entities
|
||||
public bool IsPolygon() { return TriggerType == AreaTriggerTypes.Polygon; }
|
||||
public bool IsCylinder() { return TriggerType == AreaTriggerTypes.Cylinder; }
|
||||
|
||||
public uint Id;
|
||||
public AreaTriggerId Id;
|
||||
public AreaTriggerTypes TriggerType;
|
||||
public AreaTriggerFlags Flags;
|
||||
public uint ScriptId;
|
||||
@@ -265,7 +269,6 @@ namespace Game.Entities
|
||||
public List<Vector2> PolygonVertices = new List<Vector2>();
|
||||
public List<Vector2> PolygonVerticesTarget = new List<Vector2>();
|
||||
public List<AreaTriggerAction> Actions = new List<AreaTriggerAction>();
|
||||
public bool IsServerSide;
|
||||
}
|
||||
|
||||
public unsafe class AreaTriggerMiscTemplate
|
||||
@@ -305,11 +308,10 @@ namespace Game.Entities
|
||||
public List<Vector3> SplinePoints = new List<Vector3>();
|
||||
}
|
||||
|
||||
public class AreaTriggerServerPosition
|
||||
public class AreaTriggerSpawn
|
||||
{
|
||||
public ulong SpawnId;
|
||||
public uint Id;
|
||||
public bool IsServer;
|
||||
public AreaTriggerId Id;
|
||||
public WorldLocation Location;
|
||||
public uint PhaseId;
|
||||
public uint PhaseGroup;
|
||||
|
||||
Reference in New Issue
Block a user