Exemplo n.º 1
0
        /// <summary>
        /// 普通攻击
        /// </summary>
        public void NpcSkillAttack(RoleView targetValue, NpcSkillAttackEvent data, Action execOK)
        {
            RoleView            target = targetValue;
            NpcSkillAttackEvent evData = data;

            oldSortingOrder = swfClip.sortingOrder;

            actActions[AnimNames.Attack] = execOK;
            oldPos = gameObject.transform.position;

            if (evData.bMoveToTarget)
            {
                swfClip.sortingOrder = AppConst.BattleTempSortingOrder;

                var newPos = (Vector3)target.NpcData.position;
                if (newPos.x > gameObject.transform.position.x)
                {
                    newPos.x -= 0.7f;
                }
                else
                {
                    newPos.x += 0.7f;
                }
                gameObject.transform.DOMove(newPos, 0.2f).OnComplete(delegate()
                {
                    NpcSkillAttackInternal(target, evData);
                });
            }
            else
            {
                NpcSkillAttackInternal(target, evData);
            }
        }
Exemplo n.º 2
0
        private void NpcSkillAttackInternal(RoleView target, NpcSkillAttackEvent evData)
        {
            var       skillKey  = evData.bUseSkill ? AnimNames.Skill : AnimNames.Attack;
            SkillData skillData = null;

            roleData.skills.TryGetValue(skillKey, out skillData);
            if (skillData != null)
            {
                var targetFrameAction = new FrameActionData();  //被击者
                targetFrameAction.currHp      = evData.currHp;
                targetFrameAction.maxHp       = evData.maxHp;
                targetFrameAction.amount      = evData.amount;
                targetFrameAction.bPlaySound  = evData.bPlaySound;
                targetFrameAction.type        = FrameActionType.Passive;
                targetFrameAction.skillParams = skillData.skillParams;
                target.OnTakeDamage(targetFrameAction);

                var myFrameAction = new FrameActionData();      //攻击者
                myFrameAction.type         = FrameActionType.Active;
                myFrameAction.skillParams  = skillData.skillParams;
                myFrameAction.bPlaySound   = evData.bPlaySound;
                myFrameAction.target       = target;
                myFrameAction.animClipName = evData.bUseSkill ? AnimNames.Skill : AnimNames.Attack;
                timerMgr.AddFrameActions(skillData.frameDatas, myFrameAction, OnFrameAction);
            }
            else
            {
                GLogger.Red("!!!NpcSkillAttackInternal:>>" + evData.attackerid + " " + evData.defenderid + " " + evData.bUseSkill);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// 技能攻击
        /// </summary>
        public void NpcSkillAttack(NPCData attacker, NPCData defender, bool useSkill, Action <object> callback)
        {
            bool isMoveToTarget = false;

            if (LogicConst.BattleType == BattleType.TurnBase)
            {
                isMoveToTarget = attacker.jobType == JobType.Warrior;
            }
            var attackEvent = new NpcSkillAttackEvent();

            attackEvent.attackerid    = attacker.npcid;
            attackEvent.defenderid    = defender.npcid;
            attackEvent.bMoveToTarget = isMoveToTarget;
            attackEvent.bPlaySound    = LogicConst.BattleType == BattleType.TurnBase;
            attackEvent.bUseSkill     = useSkill;

            attackEvent.currHp   = defender.hp;
            attackEvent.maxHp    = defender.hpMax;
            attackEvent.amount   = LogicUtil.Random(-100, 0);
            attackEvent.callback = callback;

            var evData = new GameEventData(GameEventType.Battle, attackEvent);

            evMappingMgr.Add(evData);
            Messenger.Broadcast <GameEventData>(EventNames.EvNpcSkillAttack, evData);
        }