diff --git a/Assets/Scenes/Main.unity b/Assets/Scenes/Main.unity index 5b9e16248..bd9fd37bd 100644 --- a/Assets/Scenes/Main.unity +++ b/Assets/Scenes/Main.unity @@ -302,7 +302,7 @@ PrefabInstance: - target: {fileID: 6493174789768221420, guid: b93e36d73a071274d8e9225e077ce92a, type: 3} propertyPath: m_AnchoredPosition.x - value: 83.65 + value: 0 objectReference: {fileID: 0} - target: {fileID: 6493174789768221420, guid: b93e36d73a071274d8e9225e077ce92a, type: 3} @@ -5007,7 +5007,7 @@ PrefabInstance: - target: {fileID: 6493174789768221420, guid: b93e36d73a071274d8e9225e077ce92a, type: 3} propertyPath: m_AnchoredPosition.x - value: 78.765 + value: 0 objectReference: {fileID: 0} - target: {fileID: 6493174789768221420, guid: b93e36d73a071274d8e9225e077ce92a, type: 3} @@ -5764,7 +5764,7 @@ PrefabInstance: - target: {fileID: 6493174789768221420, guid: b93e36d73a071274d8e9225e077ce92a, type: 3} propertyPath: m_AnchoredPosition.x - value: 80.130005 + value: 0 objectReference: {fileID: 0} - target: {fileID: 6493174789768221420, guid: b93e36d73a071274d8e9225e077ce92a, type: 3} @@ -11052,7 +11052,7 @@ PrefabInstance: - target: {fileID: 6493174789768221420, guid: b93e36d73a071274d8e9225e077ce92a, type: 3} propertyPath: m_AnchoredPosition.x - value: 115.185 + value: 0 objectReference: {fileID: 0} - target: {fileID: 6493174789768221420, guid: b93e36d73a071274d8e9225e077ce92a, type: 3} @@ -17585,7 +17585,7 @@ PrefabInstance: - target: {fileID: 6493174789768221420, guid: b93e36d73a071274d8e9225e077ce92a, type: 3} propertyPath: m_AnchoredPosition.x - value: 81.759995 + value: 0 objectReference: {fileID: 0} - target: {fileID: 6493174789768221420, guid: b93e36d73a071274d8e9225e077ce92a, type: 3} @@ -19600,7 +19600,7 @@ PrefabInstance: - target: {fileID: 6493174789768221420, guid: b93e36d73a071274d8e9225e077ce92a, type: 3} propertyPath: m_AnchoredPosition.x - value: 119.765 + value: 0 objectReference: {fileID: 0} - target: {fileID: 6493174789768221420, guid: b93e36d73a071274d8e9225e077ce92a, type: 3} diff --git a/Assets/Scripts/Editor/DatabaseInspector.cs b/Assets/Scripts/Editor/DatabaseInspector.cs index 6dd94becf..568ceb760 100644 --- a/Assets/Scripts/Editor/DatabaseInspector.cs +++ b/Assets/Scripts/Editor/DatabaseInspector.cs @@ -326,6 +326,32 @@ public class DatabaseInspector : EditorWindow { list = (IList) Activator.CreateInstance(type); field.SetValue(obj, list); + GUI.changed = true; + } + else + { + var sorted = true; + var order = int.MinValue; + foreach(var element in list) + { + var elementType = element.GetType(); + var elementOrder = elementType.GetCustomAttribute()?.Order ?? 0; + if (elementOrder < order) + sorted = false; + order = elementOrder; + } + + if (!sorted) + { + var sortedList = list + .Cast() + .OrderBy(o => o.GetType().GetCustomAttribute()?.Order ?? 0); + list = (IList) Activator.CreateInstance(type); + foreach (var o in sortedList) + list.Add(o); + field.SetValue(obj, list); + GUI.changed = true; + } } foreach (var o in list) { diff --git a/Assets/Scripts/ServerShared/Attributes.cs b/Assets/Scripts/ServerShared/Attributes.cs index c960c226f..f749cdc08 100644 --- a/Assets/Scripts/ServerShared/Attributes.cs +++ b/Assets/Scripts/ServerShared/Attributes.cs @@ -21,11 +21,11 @@ public class RethinkTableAttribute : Attribute } } -public class UpdateOrderAttribute : Attribute +public class OrderAttribute : Attribute { public int Order; - public UpdateOrderAttribute(int order) + public OrderAttribute(int order) { Order = order; } diff --git a/Assets/Scripts/ServerShared/Behaviors/Cooldown.cs b/Assets/Scripts/ServerShared/Behaviors/Cooldown.cs index 0dccf8617..146939baa 100644 --- a/Assets/Scripts/ServerShared/Behaviors/Cooldown.cs +++ b/Assets/Scripts/ServerShared/Behaviors/Cooldown.cs @@ -3,7 +3,7 @@ using System.Linq; using MessagePack; using Newtonsoft.Json; -[InspectableField, MessagePackObject, JsonObject(MemberSerialization.OptIn)] +[InspectableField, MessagePackObject, JsonObject(MemberSerialization.OptIn), Order(-10)] public class CooldownData : BehaviorData { [InspectableField, JsonProperty("cooldown"), Key(1)] @@ -15,7 +15,6 @@ public class CooldownData : BehaviorData } } -[UpdateOrder(-10)] public class Cooldown : IBehavior, IAlwaysUpdatedBehavior { private CooldownData _data; diff --git a/Assets/Scripts/ServerShared/Behaviors/Heat.cs b/Assets/Scripts/ServerShared/Behaviors/Heat.cs index 258274605..8031fcdb4 100644 --- a/Assets/Scripts/ServerShared/Behaviors/Heat.cs +++ b/Assets/Scripts/ServerShared/Behaviors/Heat.cs @@ -3,7 +3,7 @@ using System.Linq; using MessagePack; using Newtonsoft.Json; -[InspectableField, MessagePackObject, JsonObject(MemberSerialization.OptIn)] +[InspectableField, MessagePackObject, JsonObject(MemberSerialization.OptIn), Order(10)] public class HeatData : BehaviorData { [InspectableField, JsonProperty("heat"), Key(1)] @@ -15,7 +15,6 @@ public class HeatData : BehaviorData } } -[UpdateOrder(10)] public class Heat : IBehavior { private HeatData _data; diff --git a/Assets/Scripts/ServerShared/Behaviors/ItemUsage.cs b/Assets/Scripts/ServerShared/Behaviors/ItemUsage.cs index 988a24737..16f38159b 100644 --- a/Assets/Scripts/ServerShared/Behaviors/ItemUsage.cs +++ b/Assets/Scripts/ServerShared/Behaviors/ItemUsage.cs @@ -4,7 +4,7 @@ using System.Linq; using MessagePack; using Newtonsoft.Json; -[InspectableField, MessagePackObject, JsonObject(MemberSerialization.OptIn)] +[InspectableField, MessagePackObject, JsonObject(MemberSerialization.OptIn), Order(-5)] public class ItemUsageData : BehaviorData { [InspectableDatabaseLink(typeof(SimpleCommodityData)), JsonProperty("item"), Key(1)] @@ -16,7 +16,6 @@ public class ItemUsageData : BehaviorData } } -[UpdateOrder(-5)] public class ItemUsage : IBehavior { private ItemUsageData _data; diff --git a/Assets/Scripts/ServerShared/Behaviors/PatrolController.cs b/Assets/Scripts/ServerShared/Behaviors/PatrolController.cs index 982d1680a..9e38e87bc 100644 --- a/Assets/Scripts/ServerShared/Behaviors/PatrolController.cs +++ b/Assets/Scripts/ServerShared/Behaviors/PatrolController.cs @@ -6,7 +6,7 @@ using Newtonsoft.Json; using Unity.Mathematics; using static Unity.Mathematics.math; -[MessagePackObject, JsonObject(MemberSerialization.OptIn), EntityTypeRestriction(HullType.Ship)] +[MessagePackObject, JsonObject(MemberSerialization.OptIn), EntityTypeRestriction(HullType.Ship), Order(-100)] public class PatrolControllerData : ControllerData { [InspectableField, JsonProperty("targetDistance"), Key(5)] @@ -18,7 +18,6 @@ public class PatrolControllerData : ControllerData } } -[UpdateOrder(-100)] public class PatrolController : IBehavior, IController, IInitializableBehavior { public TaskType TaskType => TaskType.Tow; diff --git a/Assets/Scripts/ServerShared/Behaviors/StatModifier.cs b/Assets/Scripts/ServerShared/Behaviors/StatModifier.cs index 0c095ffa2..a9fda97bc 100644 --- a/Assets/Scripts/ServerShared/Behaviors/StatModifier.cs +++ b/Assets/Scripts/ServerShared/Behaviors/StatModifier.cs @@ -24,7 +24,7 @@ public class StatModifierData : BehaviorData } } -[UpdateOrder(-4)] +[Order(-4)] public class StatModifier : IBehavior, IInitializableBehavior, IDisposableBehavior { private StatModifierData _data; diff --git a/Assets/Scripts/ServerShared/Behaviors/Switch.cs b/Assets/Scripts/ServerShared/Behaviors/Switch.cs index 897d765e0..d52ed7502 100644 --- a/Assets/Scripts/ServerShared/Behaviors/Switch.cs +++ b/Assets/Scripts/ServerShared/Behaviors/Switch.cs @@ -3,7 +3,7 @@ using System.Linq; using MessagePack; using Newtonsoft.Json; -[InspectableField, MessagePackObject, JsonObject(MemberSerialization.OptIn)] +[InspectableField, MessagePackObject, JsonObject(MemberSerialization.OptIn), Order(-25)] public class SwitchData : BehaviorData { public override IBehavior CreateInstance(GameContext context, Entity entity, Gear item) @@ -12,7 +12,6 @@ public class SwitchData : BehaviorData } } -[UpdateOrder(-25)] public class Switch : IBehavior { private SwitchData _data; diff --git a/Assets/Scripts/ServerShared/Behaviors/TowingController.cs b/Assets/Scripts/ServerShared/Behaviors/TowingController.cs index 57485f947..2861a00dc 100644 --- a/Assets/Scripts/ServerShared/Behaviors/TowingController.cs +++ b/Assets/Scripts/ServerShared/Behaviors/TowingController.cs @@ -7,7 +7,7 @@ using Newtonsoft.Json; using Unity.Mathematics; using static Unity.Mathematics.math; -[MessagePackObject, JsonObject(MemberSerialization.OptIn), EntityTypeRestriction(HullType.Ship)] +[MessagePackObject, JsonObject(MemberSerialization.OptIn), EntityTypeRestriction(HullType.Ship), Order(-100)] public class TowingControllerData : ControllerData { public override IBehavior CreateInstance(GameContext context, Entity entity, Gear item) @@ -16,7 +16,6 @@ public class TowingControllerData : ControllerData } } -[UpdateOrder(-100)] public class TowingController : IBehavior, IPersistentBehavior, IController, IInitializableBehavior { public TaskType TaskType => TaskType.Tow; diff --git a/Assets/Scripts/ServerShared/Behaviors/Trigger.cs b/Assets/Scripts/ServerShared/Behaviors/Trigger.cs index 1613b0b77..a7ad5e3ba 100644 --- a/Assets/Scripts/ServerShared/Behaviors/Trigger.cs +++ b/Assets/Scripts/ServerShared/Behaviors/Trigger.cs @@ -3,7 +3,7 @@ using System.Linq; using MessagePack; using Newtonsoft.Json; -[InspectableField, MessagePackObject, JsonObject(MemberSerialization.OptIn)] +[InspectableField, MessagePackObject, JsonObject(MemberSerialization.OptIn), Order(-20)] public class TriggerData : BehaviorData { public override IBehavior CreateInstance(GameContext context, Entity entity, Gear item) @@ -12,7 +12,6 @@ public class TriggerData : BehaviorData } } -[UpdateOrder(-20)] public class Trigger : IBehavior { private TriggerData _data; diff --git a/Assets/Scripts/ServerShared/Behaviors/VelocityLimit.cs b/Assets/Scripts/ServerShared/Behaviors/VelocityLimit.cs index a9b6e48ee..1e93a801c 100644 --- a/Assets/Scripts/ServerShared/Behaviors/VelocityLimit.cs +++ b/Assets/Scripts/ServerShared/Behaviors/VelocityLimit.cs @@ -15,7 +15,7 @@ public class VelocityLimitData : BehaviorData } } -[UpdateOrder(100)] +[Order(100)] public class VelocityLimit : IBehavior { public Entity Entity { get; } diff --git a/Assets/Scripts/ServerShared/Entity.cs b/Assets/Scripts/ServerShared/Entity.cs index e723448a6..90468c24b 100644 --- a/Assets/Scripts/ServerShared/Entity.cs +++ b/Assets/Scripts/ServerShared/Entity.cs @@ -70,14 +70,13 @@ public abstract class Entity : DatabaseEntry, IMessagePackSerializationCallbackR ItemBehaviors = gear .Where(i=> gearData[i].ItemData.Behaviors?.Any()??false) .ToDictionary(i=> gearData[i], i => gearData[i].ItemData.Behaviors + .OrderBy(bd => bd.GetType().GetCustomAttribute()?.Order ?? 0) .Select(bd => bd.CreateInstance(Context, this, gearData[i])) - .OrderBy(b => b.GetType().GetCustomAttribute()?.Order ?? 0) .ToList()); var behaviorGroups = ItemBehaviors .SelectMany(x => x.Value - .Select(b => new {item = x.Key, behavior = b}) - .OrderBy(ib => ib.behavior.GetType().GetCustomAttribute()?.Order ?? 0)) + .Select(b => new {item = x.Key, behavior = b})) .GroupBy(ib => new {ib.item, ib.behavior.Data.Group}); Behaviors = behaviorGroups