You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.3 KiB
68 lines
2.3 KiB
3 years ago
|
using System;
|
||
|
using System.Collections.Generic;
|
||
|
|
||
|
namespace ET
|
||
|
{
|
||
|
[FriendClass(typeof(NumericWatcherComponent))]
|
||
|
public static class NumericWatcherComponentSystem
|
||
|
{
|
||
|
[ObjectSystem]
|
||
|
public class NumericWatcherComponentAwakeSystem : AwakeSystem<NumericWatcherComponent>
|
||
|
{
|
||
|
public override void Awake(NumericWatcherComponent self)
|
||
|
{
|
||
|
NumericWatcherComponent.Instance = self;
|
||
|
self.Init();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
public class NumericWatcherComponentLoadSystem : LoadSystem<NumericWatcherComponent>
|
||
|
{
|
||
|
public override void Load(NumericWatcherComponent self)
|
||
|
{
|
||
|
self.Init();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private static void Init(this NumericWatcherComponent self)
|
||
|
{
|
||
|
self.allWatchers = new Dictionary<int, List<INumericWatcher>>();
|
||
|
|
||
|
List<Type> types = Game.EventSystem.GetTypes(typeof(NumericWatcherAttribute));
|
||
|
foreach (Type type in types)
|
||
|
{
|
||
|
object[] attrs = type.GetCustomAttributes(typeof(NumericWatcherAttribute), false);
|
||
|
|
||
|
foreach (object attr in attrs)
|
||
|
{
|
||
|
NumericWatcherAttribute numericWatcherAttribute = (NumericWatcherAttribute)attr;
|
||
|
INumericWatcher obj = (INumericWatcher)Activator.CreateInstance(type);
|
||
|
if (!self.allWatchers.ContainsKey(numericWatcherAttribute.NumericType))
|
||
|
{
|
||
|
self.allWatchers.Add(numericWatcherAttribute.NumericType, new List<INumericWatcher>());
|
||
|
}
|
||
|
self.allWatchers[numericWatcherAttribute.NumericType].Add(obj);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static void Run(this NumericWatcherComponent self, EventType.NumbericChange args)
|
||
|
{
|
||
|
List<INumericWatcher> list;
|
||
|
if (self == null || self.allWatchers==null)
|
||
|
{
|
||
|
int i = 0;
|
||
|
i++;
|
||
|
}
|
||
|
if (!self.allWatchers.TryGetValue(args.NumericType, out list))
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
foreach (INumericWatcher numericWatcher in list)
|
||
|
{
|
||
|
numericWatcher.Run(args);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|