Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 7 additions & 44 deletions src/Common/Engine/Component.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,9 @@ namespace MineCase.Engine
{
internal interface IComponentIntern
{
#if ECS_SERVER
Task
#else
void
#endif
Attach(DependencyObject dependencyObject, ServiceProviderType serviceProvider);
void Attach(DependencyObject dependencyObject, ServiceProviderType serviceProvider);

#if ECS_SERVER
Task
#else
void
#endif
Detach();
void Detach();

int GetMessageOrder(object message);
}
Expand Down Expand Up @@ -58,61 +48,34 @@ public Component(string name)
Name = name;
}

#if ECS_SERVER
Task
#else
void
#endif
IComponentIntern.Attach(DependencyObject dependencyObject, ServiceProviderType serviceProvider)
void IComponentIntern.Attach(DependencyObject dependencyObject, ServiceProviderType serviceProvider)
{
AttachedObject = dependencyObject;
ServiceProvider = serviceProvider;
AttatchPartial(dependencyObject, serviceProvider);
#if ECS_SERVER
return
#endif
OnAttached();
}

partial void AttatchPartial(DependencyObject dependencyObject, ServiceProviderType serviceProvider);

#if ECS_SERVER
Task
#else
void
#endif
IComponentIntern.Detach()
void IComponentIntern.Detach()
{
AttachedObject = null;
#if ECS_SERVER
return
#endif
OnDetached();
AttachedObject = null;
}

/// <summary>
/// 组件被附加到实体时
/// </summary>
protected virtual

#if ECS_SERVER
Task
#else
void
#endif
OnAttached()
protected virtual void OnAttached()
{
#if ECS_SERVER
return Task.CompletedTask;
#endif
}

/// <summary>
/// 组件从实体卸载时
/// </summary>
protected virtual Task OnDetached()
protected virtual void OnDetached()
{
return Task.CompletedTask;
}

/// <summary>
Expand Down
92 changes: 9 additions & 83 deletions src/Common/Engine/Data/DependencyValueStorage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,7 @@ public IEnumerable<DependencyProperty> Keys

public bool IsDirty { get; set; }

public event
#if ECS_SERVER
AsyncEventHandler<CurrentValueChangedEventArgs>
#else
EventHandler<CurrentValueChangedEventArgs>
#endif
CurrentValueChanged;
public event EventHandler<CurrentValueChangedEventArgs> CurrentValueChanged;

public DependencyValueStorage()
{
Expand All @@ -54,12 +48,7 @@ public DependencyValueStorage(Dictionary<DependencyProperty, SortedList<float, I
}
}

public
#if ECS_SERVER
async Task<IEffectiveValue> AddOrUpdate<T>(IDependencyValueProvider provider, DependencyProperty<T> key, Func<DependencyProperty, IEffectiveValue<T>> addValueFactory, Func<DependencyProperty, IEffectiveValue<T>, Task<IEffectiveValue<T>>> updateValueFactory)
#else
IEffectiveValue AddOrUpdate<T>(IDependencyValueProvider provider, DependencyProperty<T> key, Func<DependencyProperty, IEffectiveValue<T>> addValueFactory, Func<DependencyProperty, IEffectiveValue<T>, IEffectiveValue<T>> updateValueFactory)
#endif
public IEffectiveValue AddOrUpdate<T>(IDependencyValueProvider provider, DependencyProperty<T> key, Func<DependencyProperty, IEffectiveValue<T>> addValueFactory, Func<DependencyProperty, IEffectiveValue<T>, IEffectiveValue<T>> updateValueFactory)
{
var storage = GetStorage(provider, key);
var priority = provider.Priority;
Expand All @@ -70,43 +59,30 @@ IEffectiveValue AddOrUpdate<T>(IDependencyValueProvider provider, DependencyProp
var value = addValueFactory(key);
storage.Add(priority, value);
value.ValueChanged = (s, e) => OnEffectiveValueChanged(priority, key, e.OldValue, e.NewValue);
IsDirty = true;
result = value;
var raiseChanged = storage.IndexOfKey(priority) == 0;
if (raiseChanged)
{
#if ECS_SERVER
await
#endif
OnCurrentValueChanged(key, false, null, true, value.Value);
}
}
else
{
var oldValue = (IEffectiveValue<T>)storage.Values[oldIdx];
var newValue =
#if ECS_SERVER
await
#endif
updateValueFactory(key, oldValue);
var newValue = updateValueFactory(key, oldValue);
if (oldValue != newValue)
{
oldValue.ValueChanged = null;
newValue.ValueChanged = (s, e) => OnEffectiveValueChanged(priority, key, e.OldValue, e.NewValue);
storage[priority] = newValue;
IsDirty = true;
var raiseChanged = oldIdx == 0;
if (raiseChanged)
{
#if ECS_SERVER
await
#endif
OnCurrentValueChanged(key, true, oldValue.Value, true, newValue.Value);
}
}

result = newValue;
}

IsDirty = true;
return result;
}

Expand Down Expand Up @@ -149,28 +125,12 @@ public bool TryGetCurrentEffectiveValue(DependencyProperty key, out IEffectiveVa
return false;
}

private
#if ECS_SERVER
Task
#else
void
#endif
OnCurrentValueChanged(DependencyProperty key, bool hasOldValue, object oldValue, bool hasNewValue, object newValue)
private void OnCurrentValueChanged(DependencyProperty key, bool hasOldValue, object oldValue, bool hasNewValue, object newValue)
{
IsDirty = true;
#if ECS_SERVER
return
#endif
CurrentValueChanged.InvokeSerial(this, new CurrentValueChangedEventArgs(key, hasOldValue, oldValue, hasNewValue, newValue));
}

private
#if ECS_SERVER
Task
#else
void
#endif
OnEffectiveValueCleared(int index, DependencyProperty key, object oldValue)
private void OnEffectiveValueCleared(int index, DependencyProperty key, object oldValue)
{
IsDirty = true;
if (index == 0)
Expand All @@ -184,37 +144,18 @@ public bool TryGetCurrentEffectiveValue(DependencyProperty key, out IEffectiveVa
newValue = ((dynamic)list.Values[0]).Value;
}

#if ECS_SERVER
return
#endif
OnCurrentValueChanged(key, true, oldValue, hasNewValue, newValue);
}

#if ECS_SERVER
return Task.CompletedTask;
#endif
}

private
#if ECS_SERVER
Task
#else
void
#endif
OnEffectiveValueChanged(float priority, DependencyProperty key, object oldValue, object newValue)
private void OnEffectiveValueChanged(float priority, DependencyProperty key, object oldValue, object newValue)
{
IsDirty = true;
SortedList<float, IEffectiveValue> list;
if (_dict.TryGetValue(key, out list) && list.IndexOfKey(priority) == 0)
{
#if ECS_SERVER
return
#endif
OnCurrentValueChanged(key, true, oldValue, true, newValue);
}
#if ECS_SERVER
return Task.CompletedTask;
#endif
}

public bool TryGetValue<T>(IDependencyValueProvider provider, DependencyProperty<T> key, out IEffectiveValue<T> value)
Expand All @@ -231,13 +172,7 @@ public bool TryGetValue<T>(IDependencyValueProvider provider, DependencyProperty
return false;
}

public
#if ECS_SERVER
Task<bool>
#else
bool
#endif
TryRemove<T>(IDependencyValueProvider provider, DependencyProperty<T> key, out IEffectiveValue<T> value)
public bool TryRemove<T>(IDependencyValueProvider provider, DependencyProperty<T> key, out IEffectiveValue<T> value)
{
var storage = GetStorage(provider, key);
var priority = provider.Priority;
Expand All @@ -247,21 +182,12 @@ public bool TryGetValue<T>(IDependencyValueProvider provider, DependencyProperty
value = (IEffectiveValue<T>)eValue;
var index = storage.IndexOfKey(priority);
storage.RemoveAt(index);
#if ECS_SERVER
return OnEffectiveValueCleared(index, key, value.Value)
.ContinueWith(t => true);
#else
OnEffectiveValueCleared(index, key, value.Value);
return true;
#endif
}

value = null;
#if ECS_SERVER
return Task.FromResult(false);
#else
return false;
#endif
}

private SortedList<float, IEffectiveValue> GetStorage(IDependencyValueProvider provider, DependencyProperty key)
Expand Down
19 changes: 2 additions & 17 deletions src/Common/Engine/Data/IDependencyValueStorage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,7 @@ public interface IDependencyValueStorage
/// <summary>
/// 当前值变更事件
/// </summary>
event
#if ECS_SERVER
AsyncEventHandler<CurrentValueChangedEventArgs>
#else
EventHandler<CurrentValueChangedEventArgs>
#endif
CurrentValueChanged;
event EventHandler<CurrentValueChangedEventArgs> CurrentValueChanged;

/// <summary>
/// 添加或更新
Expand All @@ -35,11 +29,7 @@ public interface IDependencyValueStorage
/// <param name="addValueFactory">添加工厂</param>
/// <param name="updateValueFactory">更新工厂</param>
/// <returns>新的值</returns>
#if ECS_SERVER
Task<IEffectiveValue> AddOrUpdate<T>(IDependencyValueProvider provider, DependencyProperty<T> key, Func<DependencyProperty, IEffectiveValue<T>> addValueFactory, Func<DependencyProperty, IEffectiveValue<T>, Task<IEffectiveValue<T>>> updateValueFactory);
#else
IEffectiveValue AddOrUpdate<T>(IDependencyValueProvider provider, DependencyProperty<T> key, Func<DependencyProperty, IEffectiveValue<T>> addValueFactory, Func<DependencyProperty, IEffectiveValue<T>, IEffectiveValue<T>> updateValueFactory);
#endif

/// <summary>
/// 尝试获取值
Expand All @@ -59,12 +49,7 @@ public interface IDependencyValueStorage
/// <param name="key">依赖属性</param>
/// <param name="value">值</param>
/// <returns>是否成功删除</returns>
#if ECS_SERVER
Task<bool>
#else
bool
#endif
TryRemove<T>(IDependencyValueProvider provider, DependencyProperty<T> key, out IEffectiveValue<T> value);
bool TryRemove<T>(IDependencyValueProvider provider, DependencyProperty<T> key, out IEffectiveValue<T> value);

/// <summary>
/// 尝试获取当前值
Expand Down
14 changes: 2 additions & 12 deletions src/Common/Engine/Data/IEffectiveValue.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,7 @@ public interface IEffectiveValue
/// <summary>
/// 获取值改变处理器
/// </summary>
#if ECS_SERVER
AsyncEventHandler<IEffectiveValueChangedEventArgs>
#else
EventHandler<IEffectiveValueChangedEventArgs>
#endif
ValueChanged { set; }
EventHandler<IEffectiveValueChangedEventArgs> ValueChanged { set; }
}

/// <summary>
Expand All @@ -46,12 +41,7 @@ public interface IEffectiveValue<T> : IEffectiveValue
/// 设置值
/// </summary>
/// <param name="value">值</param>
#if ECS_SERVER
Task
#else
void
#endif
SetValue(T value);
void SetValue(T value);
}

/// <summary>
Expand Down
22 changes: 2 additions & 20 deletions src/Common/Engine/Data/LocalDependencyValueExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,17 +31,8 @@ public static bool TryGetLocalValue<T>(this DependencyObject d, DependencyProper
/// <param name="d">依赖对象</param>
/// <param name="property">依赖属性</param>
/// <param name="value">值</param>
public static
#if ECS_SERVER
Task
#else
void
#endif
SetLocalValue<T>(this DependencyObject d, DependencyProperty<T> property, T value)
public static void SetLocalValue<T>(this DependencyObject d, DependencyProperty<T> property, T value)
{
#if ECS_SERVER
return
#endif
LocalDependencyValueProvider.Current.SetValue(property, d.ValueStorage, value);
}

Expand All @@ -51,17 +42,8 @@ public static
/// <typeparam name="T">值类型</typeparam>
/// <param name="d">依赖对象</param>
/// <param name="property">依赖属性</param>
public static
#if ECS_SERVER
Task
#else
void
#endif
ClearLocalValue<T>(this DependencyObject d, DependencyProperty<T> property)
public static void ClearLocalValue<T>(this DependencyObject d, DependencyProperty<T> property)
{
#if ECS_SERVER
return
#endif
LocalDependencyValueProvider.Current.ClearValue(property, d.ValueStorage);
}
}
Expand Down
Loading