125 【战斗】战斗系统 强制结束战斗(haverest)
| | |
| | | { |
| | | battleField.DistributeNextPackage(); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | |
| | | public virtual void HaveRest() |
| | | { |
| | | // 休息状态 |
| | | battleObjMgr.HaveRest(BattleCamp.Red); |
| | | battleObjMgr.DestroyTeam(BattleCamp.Blue); |
| | | |
| | | battleEffectMgr.HaveRest(); |
| | | battleTweenMgr.HaveRest(); |
| | | |
| | | recordPlayer.HaveRest(); |
| | | battleObjMgr.HaveRest(BattleCamp.Red); |
| | | battleObjMgr.DestroyTeam(BattleCamp.Blue); |
| | | SetBattleMode(BattleMode.Stop); |
| | | } |
| | | |
| | |
| | | isFinish = true; |
| | | } |
| | | |
| | | public override void ForceFinish() |
| | | { |
| | | onComplete?.Invoke(); |
| | | base.ForceFinish(); |
| | | } |
| | | |
| | | public override bool IsFinished() |
| | | { |
| | | return isFinish; |
| | |
| | | public BattleStartAction(BattleField _battleField) |
| | | : base(RecordActionType.BattleStart, _battleField, null) |
| | | { |
| | | |
| | | |
| | | } |
| | | |
| | | public override bool IsFinished() |
| | |
| | | } |
| | | |
| | | |
| | | public override void Run() |
| | | { |
| | | base.Run(); |
| | | public override void Run() |
| | | { |
| | | base.Run(); |
| | | |
| | | if (isRun) |
| | | return; |
| | |
| | | }); |
| | | |
| | | isRun = true; |
| | | } |
| | | |
| | | public override void ForceFinish() |
| | | { |
| | | //正常开始之后到界面出现之前都点不了 所以这边不用强制完成 接口留着 |
| | | |
| | | base.ForceFinish(); |
| | | // 完成就开始显示UI |
| | | |
| | | } |
| | | } |
| | |
| | | onComplete = _onComplete; |
| | | } |
| | | |
| | | public override bool IsFinished() |
| | | { |
| | | return isFinish; |
| | | } |
| | | public override bool IsFinished() |
| | | { |
| | | return isFinish; |
| | | } |
| | | |
| | | |
| | | public override void Run() |
| | |
| | | isFinish = true; |
| | | return; |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | public override void ForceFinish() |
| | | { |
| | | // 1帧就结束了 不管 |
| | | base.ForceFinish(); |
| | | } |
| | | } |
| | |
| | | deadPackList = _deadPackList; |
| | | } |
| | | |
| | | public override bool IsFinished() |
| | | { |
| | | return isFinish; |
| | | } |
| | | public override bool IsFinished() |
| | | { |
| | | return isFinish; |
| | | } |
| | | |
| | | |
| | | public override void Run() |
| | |
| | | |
| | | if (isLastOne) |
| | | { |
| | | isFinish = true; |
| | | isFinish = true; |
| | | } |
| | | }); |
| | | } |
| | | return; |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | private void OnDeathAnimationEnd(BattleObject deadObj) |
| | |
| | | deadObj.PerformDrop(); |
| | | } |
| | | } |
| | | |
| | | public override void ForceFinish() |
| | | { |
| | | // 设置结束flag 记得清空motionBase里的事件 |
| | | base.ForceFinish(); |
| | | } |
| | | } |
| | |
| | | return skillBase.IsFinished(); |
| | | } |
| | | |
| | | |
| | | public override void Run() |
| | | public override void ForceFinish() |
| | | { |
| | | base.Run(); |
| | | // 设置结束flag 记得清空motionBase里的事件 |
| | | if (null != skillBase) |
| | | { |
| | | skillBase.ForceFinished(); |
| | | } |
| | | base.ForceFinish(); |
| | | } |
| | | |
| | | public override void Run() |
| | | { |
| | | base.Run(); |
| | | |
| | | if (null == skillBase) |
| | | { |
| | |
| | | skillBase.Cast(); |
| | | |
| | | isCast = true; |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | // 合并所有相关包 |
| | | CustomB421ActionPack actionPack = CustomB421ActionPack.CreateB421ActionPack(GetGUID(b421Pack.packUID), b421PackList); |
| | | |
| | |
| | | |
| | | |
| | | // b421跟b426的包已经处理完了 |
| | | packQueue = new Queue<GameNetPackBasic>(newPackList); |
| | | packQueue.Clear(); |
| | | for (int i = 0; i < newPackList.Count; i++) |
| | | { |
| | | var pack = newPackList[i]; |
| | | |
| | | packQueue.Enqueue(pack); |
| | | } |
| | | |
| | | |
| | | |
| | | // packQueue = new Queue<GameNetPackBasic>(newPackList); |
| | | |
| | | DistributeNextPackage(); |
| | | } |
| | |
| | | else if (_num == 109) return config.nums[12]; // 'm' |
| | | else if (_num == 98) return config.nums[13]; // 'b' |
| | | else if (_num == 116) return config.nums[14]; // 't' |
| | | int targetNum = _num - 48; |
| | | if (targetNum >= config.nums.Length || targetNum < 0) |
| | | { |
| | | Debug.LogError("damage config " + config.TypeID + " _num is " + _num + " out of range"); |
| | | return _num; |
| | | } |
| | | return config.nums[_num - 48]; |
| | | } |
| | | |
| | |
| | | |
| | | protected bool isRunOnce = false; |
| | | |
| | | public RecordAction(RecordActionType _actionType, BattleField _battleField, BattleObject _battleObj) |
| | | { |
| | | actionType = _actionType; |
| | | public RecordAction(RecordActionType _actionType, BattleField _battleField, BattleObject _battleObj) |
| | | { |
| | | actionType = _actionType; |
| | | battleField = _battleField; |
| | | battleObject = _battleObj; |
| | | } |
| | | } |
| | | |
| | | public RecordActionType actionType; |
| | | |
| | |
| | | |
| | | public virtual void Run() |
| | | { |
| | | |
| | | |
| | | } |
| | | |
| | | public virtual void ForceFinish() |
| | | { |
| | | isFinish = true; |
| | | } |
| | | |
| | | } |
| | |
| | | for (int i = immediatelyActionList.Count - 1; i >= 0; i--) |
| | | { |
| | | var action = immediatelyActionList[i]; |
| | | if (action.IsFinished()) |
| | | { |
| | | removeIndexList.Add(i); |
| | | } |
| | | else |
| | | if (!action.IsFinished()) |
| | | { |
| | | action.Run(); |
| | | continue; |
| | | } |
| | | |
| | | removeIndexList.Add(i); |
| | | } |
| | | |
| | | for (int i = removeIndexList.Count - 1; i >= 0; i--) |
| | |
| | | |
| | | public void HaveRest() |
| | | { |
| | | for (int i = 0; i < immediatelyActionList.Count; i++) |
| | | { |
| | | immediatelyActionList[i].ForceFinish(); |
| | | } |
| | | |
| | | immediatelyActionList.Clear(); |
| | | |
| | | if (currentRecordAction != null) |
| | | { |
| | | currentRecordAction.ForceFinish(); |
| | | } |
| | | currentRecordAction = null; |
| | | recordActionQueue.Clear(); |
| | | |
| | | while (recordActionQueue.Count > 0) |
| | | { |
| | | recordActionQueue.Dequeue().ForceFinish(); |
| | | } |
| | | } |
| | | |
| | | public void Release() |
| | |
| | | |
| | | } |
| | | |
| | | public override void Run() |
| | | { |
| | | if (null != skillEffect) |
| | | { |
| | | skillEffect.Run(); |
| | | } |
| | | |
| | | base.Run(); |
| | | } |
| | | // // 前摇结束 |
| | | // public override void OnStartSkillFrameEnd() |
| | | // { |
| | | // skillEffect = SkillEffectFactory.CreateSkillEffect( |
| | | // caster, |
| | | // skillConfig, |
| | | // tagUseSkillAttack |
| | | // ); |
| | | // if (skillEffect != null) |
| | | // { |
| | | // skillEffect.Play(OnHitTargets); |
| | | // } |
| | | // } |
| | | |
| | | // 前摇结束 |
| | | public override void OnStartSkillFrameEnd() |
| | | { |
| | | skillEffect = SkillEffectFactory.CreateSkillEffect( |
| | | caster, |
| | | skillConfig, |
| | | tagUseSkillAttack |
| | | ); |
| | | if (skillEffect != null) |
| | | { |
| | | skillEffect.Play(OnHitTargets); |
| | | } |
| | | } |
| | | |
| | | protected override void OnHitTargets(int _healIndex, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> healList) |
| | | { |
| | | base.OnHitTargets(_healIndex, healList); |
| | | } |
| | | // protected override void OnHitTargets(int _healIndex, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> healList) |
| | | // { |
| | | // base.OnHitTargets(_healIndex, healList); |
| | | // } |
| | | |
| | | } |
| | |
| | | |
| | | public class RebornSkill : SkillBase |
| | | { |
| | | protected SkillEffect skillEffect; |
| | | |
| | | public RebornSkill(BattleObject _caster, SkillConfig _skillCfg, |
| | | HB427_tagSCUseSkill _vNetData, List<GameNetPackBasic> _packList, BattleField _battleField) |
| | |
| | | |
| | | } |
| | | |
| | | public override void Run() |
| | | { |
| | | if (null != skillEffect) |
| | | { |
| | | skillEffect.Run(); |
| | | } |
| | | |
| | | base.Run(); |
| | | } |
| | | |
| | | // 前摇结束 |
| | | public override void OnStartSkillFrameEnd() |
| | | { |
| | | skillEffect = SkillEffectFactory.CreateSkillEffect( |
| | | caster, |
| | | skillConfig, |
| | | tagUseSkillAttack |
| | | ); |
| | | if (skillEffect != null) |
| | | { |
| | | skillEffect.Play(OnHitTargets); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | |
| | | switch (skillConfig.castMode) |
| | | { |
| | | case SkillCastMode.Self: |
| | | CastImpl(); |
| | | CastImpl(OnAttackFinish); |
| | | break; |
| | | case SkillCastMode.Enemy: |
| | | CastToEnemy(); |
| | |
| | | () => |
| | | { |
| | | // 回到原来的位置 |
| | | MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, moveTime, () => |
| | | { |
| | | TurnBack(null, 1f); |
| | | caster.motionBase.PlayAnimation(MotionName.idle, true); |
| | | OnAllAttackMoveFinished(); |
| | | }); |
| | | MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, moveTime, |
| | | OnAttackFinish); |
| | | } |
| | | , -1f); |
| | | }); |
| | |
| | | return; |
| | | } |
| | | |
| | | var mainHurt = tagUseSkillAttack.HurtList[0]; |
| | | int mainTargetPosNum = BattleUtility.GetMainTargetPositionNum(caster, tagUseSkillAttack.HurtList.ToList(), skillConfig); |
| | | |
| | | BattleObject mainTarget = battleField.battleObjMgr.GetBattleObject((int)mainHurt.ObjID); |
| | | if (mainTarget == null) |
| | | { |
| | | Debug.LogError("目标为空 mainTarget == null ObjID : " + mainHurt.ObjID); |
| | | OnSkillFinished(); |
| | | return; |
| | | } |
| | | BattleCamp battleCamp = skillConfig.TagFriendly != 0 ? caster.Camp : caster.GetEnemyCamp(); |
| | | |
| | | MoveToTarget(mainTarget.heroRectTrans, new Vector2(skillConfig.CastDistance, 0), moveTime, () => |
| | | RectTransform targetTrans = battleField.GetTeamNode(battleCamp, mainTargetPosNum); |
| | | |
| | | MoveToTarget(targetTrans, new Vector2(skillConfig.CastDistance, 0), moveTime, () => |
| | | { |
| | | // 到位置转身(不一定非要转身 但是流程要写) |
| | | TurnBack(() => |
| | |
| | | () => |
| | | { |
| | | // 回到原来的位置 |
| | | MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, moveTime, () => |
| | | { |
| | | TurnBack(null, 1f); |
| | | caster.motionBase.PlayAnimation(MotionName.idle, true); |
| | | OnAllAttackMoveFinished(); |
| | | }); |
| | | MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, moveTime, |
| | | OnAttackFinish); |
| | | } |
| | | , -1f); |
| | | }); |
| | |
| | | () => |
| | | { |
| | | // 回到原来的位置 |
| | | MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, moveTime, () => |
| | | { |
| | | TurnBack(null, 1f); |
| | | caster.motionBase.PlayAnimation(MotionName.idle, true); |
| | | OnAllAttackMoveFinished(); |
| | | }); |
| | | MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), |
| | | Vector2.zero, moveTime, OnAttackFinish); |
| | | } |
| | | , -1f); |
| | | }); |
| | | }, -1f); |
| | | }); |
| | | } |
| | | |
| | | protected void OnAttackFinish() |
| | | { |
| | | TurnBack(null, 1f); |
| | | OnAllAttackMoveFinished(); |
| | | caster.motionBase.PlayAnimation(MotionName.idle, true); |
| | | } |
| | | |
| | | |
| | |
| | | skillConfig, |
| | | tagUseSkillAttack |
| | | ); |
| | | if (skillEffect != null) |
| | | // if (skillEffect != null) |
| | | { |
| | | skillEffect.Play(OnHitTargets); |
| | | } |
| | |
| | | /// <param name="times"></param> |
| | | public virtual void OnMiddleFrameStart(int times) |
| | | { |
| | | if (skillEffect != null) |
| | | // if (skillEffect != null) |
| | | { |
| | | skillEffect.OnMiddleFrameStart(times); |
| | | } |
| | |
| | | |
| | | public virtual void OnMiddleFrameEnd(int times, int hitIndex) |
| | | { |
| | | if (skillEffect != null) |
| | | // if (skillEffect != null) |
| | | { |
| | | skillEffect.OnMiddleFrameEnd(times, hitIndex); |
| | | } |
| | |
| | | /// </summary> |
| | | public virtual void OnFinalFrameStart() |
| | | { |
| | | |
| | | // if (skillEffect != null) |
| | | { |
| | | skillEffect.OnFinalFrameStart(); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | public virtual void OnFinalFrameEnd() |
| | | { |
| | | // if (skillEffect != null) |
| | | { |
| | | skillEffect.OnFinalFrameEnd(); |
| | | } |
| | | |
| | | HandleDead(); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | OnHitEachTarget(_hitIndex, target, hurt); |
| | | } |
| | | HandleDead(); |
| | | |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | public virtual void ForceFinished() |
| | | { |
| | | skillEffect?.ForceFinished(); |
| | | isFinished = true; |
| | | |
| | | while (packList.Count > 0) |
| | | { |
| | | var pack = packList[0]; |
| | | packList.RemoveAt(0); |
| | | |
| | | if (pack is CustomHB426CombinePack) |
| | | { |
| | | var combinePack = pack as CustomHB426CombinePack; |
| | | if (combinePack.startTag.Tag.StartsWith("Skill_")) |
| | | { |
| | | BattleDebug.LogError("other skill casting " + combinePack.startTag.Tag); |
| | | otherSkillAction = combinePack.CreateSkillAction(); |
| | | |
| | | // 强制结束其他技能 |
| | | otherSkillAction.ForceFinish(); |
| | | return; |
| | | } |
| | | } |
| | | PackageRegedit.Distribute(pack); |
| | | } |
| | | } |
| | | |
| | | public void OnSkillFinished() |
| | |
| | | caster.battleField.battleEffectMgr.RemoveEffect(skillConfig.BulletEffectId, bulletEffect); |
| | | } |
| | | |
| | | public virtual void ForceFinish() |
| | | { |
| | | finished = true; |
| | | } |
| | | |
| | | public bool IsFinished => finished; |
| | | } |
| | |
| | | |
| | | var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, target, tagUseSkillAttack, (index, hitList) => |
| | | { |
| | | if (isFinish) |
| | | return; |
| | | // 击中就销毁子弹 |
| | | caster.battleField.battleEffectMgr.RemoveEffect(skillConfig.BulletEffectId, effectPlayer); |
| | | // 播放子弹爆炸特效 |
| | |
| | | |
| | | var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, target.heroRectTrans, tagUseSkillAttack, (index, hitList) => |
| | | { |
| | | if (isFinish) |
| | | return; |
| | | |
| | | |
| | | foreach (var hurt in hitList) |
| | | { |
| | | BattleObject targetObj = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID); |
| | |
| | | } |
| | | } |
| | | |
| | | public override void ForceFinished() |
| | | { |
| | | base.ForceFinished(); |
| | | foreach (var bulletCurve in bulletCurves) |
| | | { |
| | | bulletCurve.ForceFinish(); |
| | | } |
| | | } |
| | | |
| | | public override bool IsFinished() |
| | | { |
| | | bool isCurveFinish = false; |
| | |
| | | } |
| | | |
| | | onHit?.Invoke(hitIndex, tagUseSkillAttack.HurtList.ToList()); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 后摇结束 |
| | | /// </summary> |
| | | public override void OnFinalFrameEnd() |
| | | { |
| | | base.OnFinalFrameEnd(); |
| | | isFinish = true; |
| | | } |
| | | } |
| | |
| | | caster.battleField.battleEffectMgr.PlayEffect(caster.ObjID, skillConfig.MStartEffectId, caster.heroGo.transform, caster.Camp); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 后摇开始 |
| | | /// </summary> |
| | | public virtual void OnFinalFrameStart() |
| | | { |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 后摇结束 |
| | | /// </summary> |
| | | public virtual void OnFinalFrameEnd() |
| | | { |
| | | |
| | | } |
| | | |
| | | public virtual bool IsFinished() |
| | | { |
| | | return isFinish; |
| | | } |
| | | |
| | | public virtual void ForceFinished() |
| | | { |
| | | isFinish = true; |
| | | } |
| | | } |