//用于上层逻辑检查通过后调用 public void StartSkill(int actorId, int skillId, float facedir) { GameObject obj = LogicSystem.GetGameObject(actorId); if (null != obj) { SkillLogicInfo logicInfo = m_SkillLogicInfos.Find(info => info.Sender == obj && info.SkillId == skillId); if (logicInfo != null) { return; } ChangeDir(obj, facedir); SkillInstanceInfo inst = NewSkillInstance(skillId); if (null != inst) { m_SkillLogicInfos.Add(new SkillLogicInfo(obj, inst)); } else { LogicSystem.NotifyGfxStopSkill(obj, skillId); return; } logicInfo = m_SkillLogicInfos.Find(info => info.Sender == obj && info.SkillId == skillId); if (null != logicInfo) { if (OnGfxShillStart != null) { OnGfxShillStart(obj, skillId); } LogicSystem.NotifyGfxAnimationStart(obj, true); logicInfo.SkillInst.Start(logicInfo.Sender); } } }
private void StopSkillInstance(SkillLogicInfo info, bool isInterrupt) { //LogSystem.Debug("Skill {0} finished.", info.SkillId); if (!isInterrupt) { if (info.SkillInst.IsControlMove) { LogicSystem.NotifyGfxMoveControlFinish(info.Sender, info.SkillId, true); info.SkillInst.IsControlMove = false; } LogicSystem.NotifyGfxAnimationFinish(info.Sender, true); LogicSystem.NotifyGfxStopSkill(info.Sender, info.SkillId); } else { if (info.SkillInst.IsControlMove) { info.SkillInst.IsControlMove = false; } } RecycleSkillInstance(info.Info); }