ace/Source/ACE.Server/Entity/LandblockGroupSplitHelper.cs
Mag-nus 2b61b28147
Cumulative updates (#4180)
* Many lb group performance related updates

* fixes

* tweak partitioner

* Implement LandblockGroupMinSpacingWhenDormant

* More threaddebug

* cleanup
2024-06-28 10:43:53 -04:00

52 lines
1.4 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
namespace ACE.Server.Entity
{
class LandblockGroupSplitHelper : IEnumerable<Landblock>
{
private readonly HashSet<Landblock> landblocks = new HashSet<Landblock>();
public int Count => landblocks.Count;
public void Add(Landblock landblock)
{
landblocks.Add(landblock);
}
public IEnumerator<Landblock> GetEnumerator()
{
return landblocks.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public bool ShouldBeAddedToThisLandblockGroup(Landblock landblock)
{
foreach (var value in landblocks)
{
var distance = Math.Max(
Math.Abs(value.Id.LandblockX - landblock.Id.LandblockX),
Math.Abs(value.Id.LandblockY - landblock.Id.LandblockY));
if (value.IsDormant || landblock.IsDormant)
{
if (distance < LandblockGroup.LandblockGroupMinSpacingWhenDormant)
return true;
}
else
{
if (distance < LandblockGroup.LandblockGroupMinSpacing)
return true;
}
}
return false;
}
}
}