void CheckSkillEvent() { for (var i = 0; i < m_skillEventList.Count; ++i) { SKillEvent evt = m_skillEventList[i]; if (Time.time >= evt.fTriggerTime && evt.isActive) //触发时间到了 { evt.func(evt.skillID, evt.targets); evt.isActive = false; } } }
SKillEvent GetSkillEvent() { SKillEvent evt = null; for (var i = 0; i < m_skillEventList.Count; ++i) { if (!m_skillEventList[i].isActive) { return(m_skillEventList[i]); } } evt = new SKillEvent(); m_skillEventList.Add(evt); return(evt); }
void RegSkillEvent(SkillBase skill) { List <Entity> targets = skill.GetSkillTargets(); SKillEvent evt = null; //播放特效 if (!string.IsNullOrEmpty(skill.m_skillInfo.castEffect)) { evt = GetSkillEvent(); evt.fTriggerTime = skill.m_skillInfo.castEffectBeginTime / m_entity.Property.AttackSpeed + Time.time; evt.func = PlayEffect; evt.isActive = true; evt.skillID = skill.m_skillInfo.ID; AddSkillEvent(evt); } //播放动作 if (!string.IsNullOrEmpty(skill.m_skillInfo.castAction)) { evt = GetSkillEvent(); evt.fTriggerTime = skill.m_skillInfo.castActionBeginTime / m_entity.Property.AttackSpeed + Time.time; evt.func = PlayAction; evt.isActive = true; evt.skillID = skill.m_skillInfo.ID; AddSkillEvent(evt); } //释放子弹 if (!string.IsNullOrEmpty(skill.m_skillInfo.BulletEffect)) { evt = GetSkillEvent(); evt.fTriggerTime = skill.m_skillInfo.BulletBeginTime + Time.time; evt.skillID = skill.m_skillInfo.ID; evt.func = CastBullet; evt.isActive = true; AddSkillEvent(evt); } /*技能击中一般分为2种: * 1、可配置型: 由时间控制、即hitTime,在技能编辑器中可以调好适当的值, 非子弹型技能一般都可以这样 * 2、不可配置型: 如子弹型技能,因为与怪距离有远有近,无法配置hitTime, 这种由代码控制 */ //击中处理 if (skill.m_skillInfo.hitTime.Equals(0f) == false) { evt = GetSkillEvent(); evt.fTriggerTime = (skill.m_skillInfo.castActionBeginTime + skill.m_skillInfo.hitTime) / m_entity.Property.AttackSpeed + Time.time; evt.func = SkillHit; evt.isActive = true; evt.skillID = skill.m_skillInfo.ID; evt.targets = targets; //只有击中才需要得到技能的作用目标 AddSkillEvent(evt); } evt = GetSkillEvent(); evt.fTriggerTime = (skill.m_skillInfo.castActionBeginTime + skill.m_skillInfo.castActionDuration) / m_entity.Property.AttackSpeed + Time.time; evt.func = SkillEnd; evt.isActive = true; evt.skillID = skill.m_skillInfo.ID; AddSkillEvent(evt); }
void AddSkillEvent(SKillEvent evt) { m_skillEventList.Add(evt); }