public override void OnClaim( ) { //变更状态 base.OnClaim(); //注册监听器 ConstantDefine.EnemyType[] types = new ConstantDefine.EnemyType[Targets.Count]; for (int i = 0; i < types.Length; i++) { types[i] = Targets[i].targetType; } QuestManager.GetInstance().RegisterCrusadeQuestEventHandler(types, UpdateProgress); //UI不在这里 }
/// <summary> /// 监听任务所需击杀的敌人的死亡事件,注册在QuestManager /// </summary> protected void UpdateProgress(byte id, ConstantDefine.EnemyType type) { for (int i = 0; i < Targets.Count; i++) { if (Targets[i].targetType.Equals(type)) { Targets[i].completedNumber++; } } //检查是否完成 if (CheckCompletion()) { OnCompleted(); } }
/// <summary> /// 当某个敌人死亡,此函数触发,并将事件转发给监听该敌人死亡的任务 /// 场景中每出生一个敌人,这个敌人就注册该函数为其死亡事件的监听器 /// </summary> /// <param name="enemyId">场景中敌人ID</param> /// <param name="enemyType">敌人类型</param> public void EnemyDeathEventHandler(byte enemyId, ConstantDefine.EnemyType enemyType) { m_enemyDeathHandlers[enemyType].Invoke(enemyId, enemyType); }