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