Fixes a server freeze
This commit is contained in:
@@ -16,13 +16,12 @@
|
||||
*/
|
||||
|
||||
using Framework.Constants;
|
||||
using Framework.Dynamic;
|
||||
using Game.Entities;
|
||||
using Framework.GameMath;
|
||||
using System;
|
||||
|
||||
namespace Game.Movement
|
||||
{
|
||||
public abstract class MovementGenerator
|
||||
public abstract class MovementGenerator : IEquatable<MovementGenerator>
|
||||
{
|
||||
public MovementGeneratorMode Mode;
|
||||
public MovementGeneratorPriority Priority;
|
||||
@@ -64,6 +63,19 @@ namespace Game.Movement
|
||||
public void AddFlag(MovementGeneratorFlags flag) { Flags |= flag; }
|
||||
public bool HasFlag(MovementGeneratorFlags flag) { return (Flags & flag) != 0; }
|
||||
public void RemoveFlag(MovementGeneratorFlags flag) { Flags &= ~flag; }
|
||||
|
||||
public bool Equals(MovementGenerator other)
|
||||
{
|
||||
if (Mode == other.Mode && Priority == other.Priority)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public int GetHashCode(MovementGenerator obj)
|
||||
{
|
||||
return obj.Mode.GetHashCode() ^ obj.Priority.GetHashCode();
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class MovementGeneratorMedium<T> : MovementGenerator where T : Unit
|
||||
|
||||
@@ -30,12 +30,15 @@ namespace Game.Movement
|
||||
{
|
||||
public int Compare(MovementGenerator a, MovementGenerator b)
|
||||
{
|
||||
if (a.Equals(b))
|
||||
return 0;
|
||||
|
||||
if (a.Mode > b.Mode)
|
||||
return 1;
|
||||
else if (a.Mode == b.Mode)
|
||||
return a.Priority > b.Priority ? 1 : -1;
|
||||
return a.Priority.CompareTo(b.Priority);
|
||||
|
||||
return 0;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,6 +80,7 @@ namespace Game.Movement
|
||||
Unit _owner { get; }
|
||||
MovementGenerator _defaultGenerator { get; set; }
|
||||
SortedSet<MovementGenerator> _generators { get; } = new(new MovementGeneratorComparator());
|
||||
|
||||
MultiMap<uint, MovementGenerator> _baseUnitStatesMap { get; } = new();
|
||||
Queue<MotionMasterDelayedAction> _delayedActions { get; } = new();
|
||||
MotionMasterFlags _flags { get; set; }
|
||||
|
||||
Reference in New Issue
Block a user