Fixes a server freeze

This commit is contained in:
hondacrx
2021-10-01 18:08:16 -04:00
parent f671840984
commit 7ef98b794d
2 changed files with 21 additions and 5 deletions
@@ -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
+6 -2
View File
@@ -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; }