public virtual void UpdatePosition(bool force = false)
{
if (!force || (UnitPropertyFlags.HasValue && ObjectCache.CheckFlag(UnitPropertyFlags.Value, UnitFlags.Stationary)))
{
double lastUpdated=DateTime.Now.Subtract(lastUpdatedPosition).TotalMilliseconds;
if (UnitPropertyFlags.HasValue && ObjectCache.CheckFlag(UnitPropertyFlags.Value, UnitFlags.Stationary) && lastUpdated < 100000)
return;
if (lastUpdated < 150)
return;
}
using (ZetaDia.Memory.AcquireFrame())
{
try
{
Position = ref_DiaObject.Position;
}
catch
{
Logger.Write(LogLevel.Cache, "Safely Handled Updating Position for Object {0}", InternalName);
}
lastUpdatedPosition = DateTime.Now;
positionUpdated = true;
}
//Special Position Adjustment!
if (UnitPropertyFlags.HasValue && ObjectCache.CheckFlag(UnitPropertyFlags.Value, UnitFlags.Stationary))
{
UpdateRotation();
float distance = ActorSphereRadius.HasValue ? ActorSphereRadius.Value
: CollisionRadius.HasValue ? CollisionRadius.Value : Radius;
Vector3 curPosition = Position;
Position=MathEx.GetPointAt(curPosition, distance, Rotation);
}
}