-
Notifications
You must be signed in to change notification settings - Fork 44
Event
jiepengtan edited this page Nov 20, 2019
·
4 revisions
- 需要在文件 __DllSourceFiles/Tools.UnsafeECS.ECDefine/Src/Unsafe/Event.cs 中进行定义, 同时需要继承自 IEvent
- 事件需要的参数以类 public 成员的形式定义,默认参数会添加 Entity* ptr
public class OnSkillFire: IEvent{
public SkillData SkillData;//这里是相应的事件需要的参数
}
- 生成的代码的主体可以在 __DllSourceFiles/Game.Model/Src/__UnsafeECS/Generated/CodeGen_Event.cs 看到
- 其他细碎的代码在其他文件中可能掺杂
public unsafe partial interface IGameEventService : IService{
void OnSkillFire(Entity* ptr
,ref SkillData SkillData
);
}
- 可以在相应的GameExecuteSystem 中会自动生成 RaiseEventXxxx 函数。可以直接调用(限制在主线程中调用),相应的回调函数在IGameEventService 的继承者中定义 如:
public unsafe partial class SkillSystem : GameExecuteSystem {
private LFloat _deltaTime;
public void Execute(Entity* ptr,ref SkillData skillData){
//skillData.IsFiring = skillMonoData.IsFiring;
if (skillData.IsNeedFire) {
if (skillData.CdTimer <= 0 && !skillData.IsFiring) {
skillData.CdTimer = skillData.CD;
skillData.IsFiring = true;
skillData.DurationTimer = skillData.Duration;
RaiseEventOnSkillFire(ptr,ref skillData);
}
}
skillData.CdTimer -= _deltaTime;
if (skillData.IsFiring) {
skillData.DurationTimer -= _deltaTime;
if (skillData.DurationTimer <= 0) {
skillData.IsFiring = false;
RaiseEventOnSkillDone(ptr,ref skillData);
}
}
skillData.IsNeedFire = false;
}
...