// *********************************************************************** // Assembly : Game // Author : Kimch // Created : 2020-12-01 // Description : // Last Modified By : // Last Modified On : // *********************************************************************** // // // *********************************************************************** using System.Collections; using System.Collections.Generic; using UnityEngine; namespace G { /// /// 游戏状态管理 /// partial class GameLevel { public class BuffInfo { public int id; public int value; } public readonly Dictionary buffInfoDict = new Dictionary(); public readonly BattleResult battleResult = new BattleResult(); public void InitBattleResult() { battleResult.applyStep = 0; battleResult.levelId = curLevelId; battleResult.stageIndex = curStageIndex; battleResult.stageIndexMax = maxStageIndex; } /// /// /// public void UpdateBattleResult() { battleResult.stageIndex = curStageIndex; battleResult.playerHpPercent = (int)(EntityMainPlayer.Instance.hpRatio * 100f); battleResult.duration = (int)(Time.unscaledTime - _startLevelTime); KStatistics.Instance.ReportEvent_Battle("普通", curChapterId, curLevelId, curStageIndex, 0, 3, battleResult.playerDeath, "", battleResult.duration, battleResult.duration, battleResult.playerHpPercent); } public void SetLevelResult(bool success, int duration, string reason) { battleResult.applyStep = 0; battleResult.duration = duration; battleResult.reason = reason; battleResult.success = success; battleResult.levelId = curLevelId; battleResult.stageIndex = curStageIndex; battleResult.stageIndexMax = maxStageIndex; //battleResult.exp = curLevelItem.exp / (success ? 1 : 2); if (success) { AddDifficult(); } else { ReduceDifficult(); } RemoveNormalLevelState(); } /// /// /// /// /// public EntityItemEquipment CollectEquipment(int itemId) { var equipment = BagProxy.Instance.NewEquipment(itemId); if (equipment != null) battleResult.equipments.Add(equipment); return equipment; } public void CollecMoney(int id, int amount) { if (amount < 9999) { battleResult.AddMoney(id, amount); } } public void CollecProp(int id, int amount) { if (amount < 99) { battleResult.AddProp(id, amount); } } /// /// 宝石 /// /// /// public void CollecGem(int id, int amount) { if (amount < 99) { battleResult.AddProp(id, amount); } } public void CollectExp(int amount) { if (amount < 1000) battleResult.exp += amount; } public void OnBossKill(int amount) { if (amount < 10) battleResult.bossKilled += amount; } public void OnMinionKill(int amount) { if (amount < 100) battleResult.minionKilled += amount; } public void OnSkill(int skillId) { battleResult.CastSkill(skillId); } public void OnPlayerDead() { ReduceDifficult(); battleResult.playerDeath += 1; } public void AddBuff(string name, int value) { int attributeId = 0; switch (name) { case "red": attributeId = (int)CombatAttributeId.Attack; EntityMainPlayer.Instance.AttributeUp(attributeId, 0, GlobalVar.BuffAddition); break; case "yellow": attributeId = (int)CombatAttributeId.Defence; EntityMainPlayer.Instance.AttributeUp(attributeId, 0, GlobalVar.BuffAddition); break; case "blue": attributeId = (int)CombatAttributeId.Hp; EntityMainPlayer.Instance.AttributeUp(attributeId, 0, GlobalVar.BuffAddition); break; case "green": EntityMainPlayer.Instance.HpUp(0, 10); return; } if (buffInfoDict.TryGetValue(name, out var buffInfo)) { buffInfo.value += value; } else { buffInfoDict.Add(name, new BuffInfo { id = attributeId, value = value, }); } GlobalNotifier.PostNotification(GlobalDefine.EVENT_SHOW_BUFF); } /// /// /// public void SaveNormalLevelState() { var dataList = F.ListPool.Get(); var skills = MovesShop.Instance.studiedMoves; dataList.Add(skills.Count); dataList.AddRange(skills); dataList.Add(buffInfoDict.Count); foreach (var item in buffInfoDict.Values) { dataList.Add(item.id); dataList.Add(item.value); } var equipments = battleResult.equipments; dataList.Add(equipments.Count); for (int i = 0; i < equipments.Count; i++) { dataList.Add(equipments[i].id); } var moneys = battleResult.moneyDict; dataList.Add(moneys.Count); foreach (var money in moneys) { dataList.Add(money.Key); dataList.Add(money.Value); } var props = battleResult.propDict; dataList.Add(props.Count); foreach (var prop in props) { dataList.Add(prop.Key); dataList.Add(prop.Value); } dataList.Add(EntityMainPlayer.Instance.curHp); dataList.Add(EntityMainPlayer.Instance.deathCount); LevelProxy.Instance.SavePlayingLevelState(curLevelId, curStageIndex + 1, dataList); F.ListPool.Release(dataList); } /// /// /// public void RemoveNormalLevelState() { LevelProxy.Instance.RemovePlayingLevelState(); } /// /// /// public void LoadNormalLevelState() { if (GlobalVar.SavePlayingStateData.Count > 0) { int index = 0; var skillCount = GlobalVar.SavePlayingStateData[index++]; var skills = new List(skillCount); for (int i = 0; i < skillCount; i++) { int id = GlobalVar.SavePlayingStateData[index++]; skills.Add(id); } MovesShop.Instance.StudyMoves(skills); int buffCount = GlobalVar.SavePlayingStateData[index++]; for (int i = 0; i < buffCount; i++) { int id = GlobalVar.SavePlayingStateData[index++]; int count = GlobalVar.SavePlayingStateData[index++]; } int equipmentCount = GlobalVar.SavePlayingStateData[index++]; for (int i = 0; i < equipmentCount; i++) { int id = GlobalVar.SavePlayingStateData[index++]; var equipment = ItemProxy.Instance.GetEquipment(id); if (equipment != null) battleResult.equipments.Add(equipment); } int moneyCount = GlobalVar.SavePlayingStateData[index++]; for (int i = 0; i < moneyCount; i++) { int id = GlobalVar.SavePlayingStateData[index++]; int count = GlobalVar.SavePlayingStateData[index++]; battleResult.AddMoney(id, count); } int propCount = GlobalVar.SavePlayingStateData[index++]; for (int i = 0; i < propCount; i++) { int id = GlobalVar.SavePlayingStateData[index++]; int count = GlobalVar.SavePlayingStateData[index++]; battleResult.AddProp(id, count); } if (index < GlobalVar.SavePlayingStateData.Count) { EntityMainPlayer.Instance.curHp = GlobalVar.SavePlayingStateData[index++]; EntityMainPlayer.Instance.deathCount = GlobalVar.SavePlayingStateData[index++]; } GlobalVar.SavePlayingStateData.Clear(); } } /// /// /// public void SaveEndlessLevelState() { LevelProxy.Instance.CompleteEndlessLevel(curStageIndex); } public void SaveClimbLevelState() { LevelProxy.Instance.CompleteClimbLevel(curStageIndex); } } }