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.
56 lines
1.6 KiB
56 lines
1.6 KiB
3 years ago
|
using System;
|
||
|
using System.Linq;
|
||
|
|
||
|
namespace ET.PeopleBehave
|
||
|
{
|
||
|
public class PeopleBehaveComponentAwakeSystem: AwakeSystem<PeopleBehaveComponent>
|
||
|
{
|
||
|
public override void Awake(PeopleBehaveComponent self)
|
||
|
{
|
||
|
PeopleBehaveComponent.Instance = self;
|
||
|
self.Awake();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[FriendClass(typeof(PeopleBehaveComponent))]
|
||
|
public static class PeopleBehaveComponentSystem
|
||
|
{
|
||
|
public static void Awake(this PeopleBehaveComponent self)
|
||
|
{
|
||
|
var behaves = Game.EventSystem.GetTypes(typeof (BehaveAttribute));
|
||
|
foreach (var type in behaves)
|
||
|
{
|
||
|
object[] attrs = type.GetCustomAttributes(typeof (BehaveAttribute), false);
|
||
|
if (attrs.Length == 0)
|
||
|
{
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
BehaveAttribute behaveAttribute = attrs[0] as BehaveAttribute;
|
||
|
BehaveBase behave = Activator.CreateInstance(type) as BehaveBase;
|
||
|
self.AllBehaveDict.Add(behaveAttribute.BehaveID, behave);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static void HandlePeopleBehave(this PeopleBehaveComponent self, People people)
|
||
|
{
|
||
|
int behaveId = people.GetBehaveType();
|
||
|
if (!self.AllBehaveDict.ContainsKey(behaveId))
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
try
|
||
|
{
|
||
|
|
||
|
self.AllBehaveDict[behaveId].Handle(people);
|
||
|
}
|
||
|
catch (Exception e)
|
||
|
{
|
||
|
Log.Error(e);
|
||
|
throw;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|