Пример #1
0
        //用于上层逻辑检查通过后调用
        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);
                }
            }
        }
Пример #2
0
 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);
 }