private void EscapeCallBack(BattleAgentController self, BattleAgentController enemy) { int fadeStep = fixFadeStep + fadeStepGainBase * skillLevel; BattlePlayerController battlePlayer = self as BattlePlayerController; if (battlePlayer.agent.health <= 0) { return; } int oriFadeStepsLeft = battlePlayer.fadeStepsLeft; if (oriFadeStepsLeft == 0) { self.SetEffectAnim(selfEffectAnimName, null, 0, 0); } battlePlayer.fadeStepsLeft = Mathf.Max(oriFadeStepsLeft, fadeStep); enemy.QuitFight(); ExploreManager.Instance.EnableExploreInteractivity(); ExploreManager.Instance.currentEnteredMapEvent = null; BattlePlayerController bpCtr = self as BattlePlayerController; bpCtr.PlayRoleAnim(CommonData.roleIdleAnimName, 0, null); bpCtr.escapeFromFight = true; bpCtr.isInEscaping = false; bpCtr.enemy = null; bpCtr.FixPositionToStandard(); MapWalkableEvent mwe = enemy.GetComponent <MapWalkableEvent> (); ExploreManager.Instance.MapWalkableEventsStartAction(); mwe.RefreshWalkableInfoWhenQuit(enemy.isDead); if (!mwe.isInMoving) { mwe.QuitFightAndDelayMove(5); } ExploreManager.Instance.expUICtr.QuitFight(); }
/// <summary> /// 播放死亡动画后执行死亡逻辑 /// </summary> /// <returns>The die.</returns> private IEnumerator LatelyDie() { yield return(new WaitForSeconds(0.1f)); GetComponent <MapWalkableEvent> ().ResetWhenDie(); this.armatureCom.animation.Stop(); PlayRoleAnim(CommonData.roleDieAnimName, 1, delegate { // 回收 MapWalkableEvent mwe = GetComponent <MapWalkableEvent>(); if (mwe is MapMonster) { mwe.AddToPool(exploreManager.newMapGenerator.monstersPool); } else if (mwe is MapNPC) { mwe.AddToPool(exploreManager.newMapGenerator.npcsPool); } // 技能特效回收 AllEffectAnimsIntoPool(); // 敌方的一些资源回收和特效播放 if (enemy != null) { // 特效回收 enemy.AllEffectAnimsIntoPool(); // 如果处在隐身状态下,播放隐身动画 if ((enemy as BattlePlayerController).fadeStepsLeft > 0) { enemy.SetEffectAnim(CommonData.yinShenEffectName, null, 0, 0); } enemy = null; } }); }
/// <summary> /// 玩家战斗胜利逻辑 /// </summary> /// <param name="monsterTransArray">Monster trans array.</param> public void BattlePlayerWin(Transform[] monsterTransArray) { // 如果没有传入敌人,直接返回 if (monsterTransArray.Length <= 0) { return; } // 记录击败的怪物数 Player.mainPlayer.totaldefeatMonsterCount++; // 重置角色骨骼动画速率 battlePlayerCtr.SetRoleAnimTimeScale(1.0f); battleMonsterCtr.SetRoleAnimTimeScale(1.0f); Transform trans = monsterTransArray [0]; BattleMonsterController bmCtr = trans.GetComponent <BattleMonsterController> (); Monster monster = trans.GetComponent <Monster> (); MapWalkableEvent walkableEvent = trans.GetComponent <MapWalkableEvent> (); Player player = Player.mainPlayer; // 执行战斗结束的回调 FightEndCallBacks(); // 重置所有技能产生的属性变化 battlePlayerCtr.agent.ClearPropertyChangesFromSkill(); // 重置角色属性【按照脱离战斗时持有装备的正常情况重新计算一遍人物属性】 battlePlayerCtr.agent.ResetBattleAgentProperties(false); // 怪物清空所有技能产生的属性变化 battleMonsterCtr.agent.ClearPropertyChangesFromSkill(); // 怪物重置属性 battleMonsterCtr.agent.ResetBattleAgentProperties(false); // 玩家位置修正到标准位置【整数点位置】 battlePlayerCtr.FixPositionToStandard(); // 玩家等待当前动作结束 battlePlayerCtr.ResetToWaitAfterCurrentRoleAnimEnd(); Vector3 monsterPos = trans.position; walkableEvent.RefreshWalkableInfoWhenQuit(true); MapMonster mm = bmCtr.GetComponent <MapMonster> (); if (mm != null) { // 生成奖励物品 Item rewardItem = mm.GenerateRewardItem(); if (rewardItem != null) { newMapGenerator.SetUpRewardInMap(rewardItem, trans.position); } if (mm.pairEventPos != -Vector3.one) { newMapGenerator.ChangeMapEventStatusAtPosition(mm.pairEventPos); } if (monster.isBoss) { MapEventsRecord.AddEventTriggeredRecord(mm.mapIndex, mm.oriPos); } } // 目前npc不参与战斗,下面的代码后续扩展可用 MapNPC mn = bmCtr.GetComponent <MapNPC> (); if (mn != null) { Item rewardItem = Item.NewItemWith(mn.fightReward.rewardValue, 1); if (rewardItem != null) { if (rewardItem.itemType == ItemType.Equipment) { Equipment eqp = rewardItem as Equipment; EquipmentQuality quality = (EquipmentQuality)mn.fightReward.attachValue; eqp.ResetPropertiesByQuality(quality); } newMapGenerator.SetUpRewardInMap(rewardItem, trans.position); } } // 开启屏幕行走点击 EnableExploreInteractivity(); // 标记不在战斗 battlePlayerCtr.isInFight = false; // 标记不再地图事件中 battlePlayerCtr.isInEvent = false; // 角色包围盒开启 battlePlayerCtr.boxCollider.enabled = true; // 清除敌方信息 battlePlayerCtr.enemy = null; //更新玩家金钱 int goldGain = monster.rewardGold + player.extraGold; player.totalGold += goldGain; GameManager.Instance.soundManager.PlayAudioClip(CommonData.goldAudioName); expUICtr.SetUpGoldGainTintHUD(goldGain); player.experience += monster.rewardExperience + player.extraExperience; //更新玩家经验值 bool isLevelUp = player.LevelUpIfExperienceEnough(); //判断是否升级 newMapGenerator.allMonstersInMap.Remove(mm); if (isLevelUp) { PlayLevelUpAnim();// 升级时播放升级动画 DisableExploreInteractivity(); expUICtr.ShowLevelUpPlane(); } else { MapWalkableEventsStartAction(); } // 更新角色状态栏 battlePlayerCtr.UpdateStatusPlane(); }