/// <summary> /// 获得当前游戏数据,方便存储 /// </summary> /// <returns></returns> public Model_Archiving GetHeroCurrentData() { Model_Archiving archiving = new Model_Archiving(); archiving.x = (int)transform.position.x; archiving.y = (int)transform.position.y; archiving.z = (int)transform.position.z; archiving.hp = GetCurrentHealth(); archiving.mp = GetMaxMagic(); archiving.exp = GetExp(); archiving.gold = GetGold(); archiving.diamod = GetDiamods(); archiving.level = GetLevel(); foreach (Ctrl_Slot ctrlSlot in Ctrl_InventoryManager.Instance.ActiveSlot()) { archiving.items.Add(new Model_Archiving.Item() { itemId = ctrlSlot.Item.id, currentCount = ctrlSlot.Item.currentNumber }); } archiving.equips = GetComponent <Ctrl_PlayerEquipmentProperty>().GetEquipData(); return(archiving); }
/// <summary> /// 存档,读档有重复性,这里获得当前父对象的激活状态来判断当前是存档还是读档,读档和存档只会机会一个脚本 /// </summary> /// <param name="eventData"></param> public void OnPointerDown(PointerEventData eventData) { //如果是存档模式 if (Ctrl_PlayerAccessFile.Instance.IsArchiving) { //当前插槽没有任何数据 if (Archiving == null) { Model_Archiving archiving = Ctrl_HeroProperty.Instance.GetHeroCurrentData(); //存档的属性 Archiving = archiving; //存储存档赋值 Ctrl_GameReading.Instance.SaveGame(Index); //存档操作 GetComponent <View_ArchivingItem>().UpdateIndex("存档" + (Index + 1)); //存档名称 deleteBtn.SetActive(true); //显示删档按钮 } else { Ctrl_TootipManager.Instance.ShowAgreeCancel("是否覆盖当前存档"); Ctrl_TootipManager.Instance.AgreeCancel.GetComponent <Ctrl_AgreeCancelTootip>().del_AgreeCancel += OverwriteArchive; } } //读档模式 else { if (Archiving != null) { Ctrl_GameReading.Instance.LoadGame(Archiving); } } }
/// <summary> /// 覆盖存档 /// </summary> private void OverwriteArchive() { Model_Archiving archiving = Ctrl_HeroProperty.Instance.GetHeroCurrentData(); //存档的属性 Archiving = archiving; //存储存档赋值 Ctrl_GameReading.Instance.SaveGame(Index); //存档操作 GetComponent <View_ArchivingItem>().UpdateIndex("存档" + (Index + 1).ToString()); }
/// <summary> /// 读档 /// </summary> /// <param name="archiving"></param> public void LoadGame(Model_Archiving archiving) { Ctrl_HeroProperty.Instance.Gold = archiving.gold; Ctrl_HeroProperty.Instance.Diamods = archiving.diamod; Ctrl_HeroProperty.Instance.gameObject.transform.position = new Vector3(archiving.x, archiving.y, archiving.z); Ctrl_HeroProperty.Instance.SetCurrentHealth(archiving.hp); Ctrl_HeroProperty.Instance.SetCurrentMagic(archiving.mp); Ctrl_HeroProperty.Instance.SetLevel(archiving.level); Ctrl_HeroProperty.Instance.SetCurrentExp(archiving.exp); //清空现有的物品 foreach (Ctrl_Slot slot in Ctrl_InventoryManager.Instance.ActiveSlot()) { slot.Item = null; } //得到存档的物品 foreach (Model_Archiving.Item item in archiving.items) { for (int i = 0; i < item.currentCount; i++) { Ctrl_InventoryManager.Instance.AddItem(item.itemId); } } foreach (Model_Archiving.Equip equip in archiving.equips) { switch (equip.equip) { case GlobalParametr.EquipmentType.None: break; case GlobalParametr.EquipmentType.Head: if (equip.itemId != -1) { Ctrl_PlayerCharacter.Instance.GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Head.ToString()) .Item = Ctrl_InventoryManager.Instance.NewItem(equip.itemId); } else { Ctrl_PlayerCharacter.Instance.GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Head.ToString()) .Item = null; } break; case GlobalParametr.EquipmentType.Neck: if (equip.itemId != -1) { Ctrl_PlayerCharacter.Instance.GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Neck.ToString()) .Item = Ctrl_InventoryManager.Instance.NewItem(equip.itemId); } else { Ctrl_PlayerCharacter.Instance.GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Neck.ToString()) .Item = null; } break; case GlobalParametr.EquipmentType.Shoulders: if (equip.itemId != -1) { Ctrl_PlayerCharacter.Instance .GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Shoulders.ToString()) .Item = Ctrl_InventoryManager.Instance.NewItem(equip.itemId); } else { Ctrl_PlayerCharacter.Instance .GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Shoulders.ToString()) .Item = null; } break; case GlobalParametr.EquipmentType.Chest: if (equip.itemId != -1) { Ctrl_PlayerCharacter.Instance .GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Chest.ToString()) .Item = Ctrl_InventoryManager.Instance.NewItem(equip.itemId); } else { Ctrl_PlayerCharacter.Instance .GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Chest.ToString()) .Item = null; } break; case GlobalParametr.EquipmentType.Back: if (equip.itemId != -1) { Ctrl_PlayerCharacter.Instance.GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Back.ToString()) .Item = Ctrl_InventoryManager.Instance.NewItem(equip.itemId); } else { Ctrl_PlayerCharacter.Instance.GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Back.ToString()) .Item = null; } break; case GlobalParametr.EquipmentType.Bracer: if (equip.itemId != -1) { Ctrl_PlayerCharacter.Instance .GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Bracer.ToString()) .Item = Ctrl_InventoryManager.Instance.NewItem(equip.itemId); } else { Ctrl_PlayerCharacter.Instance .GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Bracer.ToString()) .Item = null; } break; case GlobalParametr.EquipmentType.Gloves: if (equip.itemId != -1) { Ctrl_PlayerCharacter.Instance .GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Gloves.ToString()) .Item = Ctrl_InventoryManager.Instance.NewItem(equip.itemId); } else { Ctrl_PlayerCharacter.Instance .GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Gloves.ToString()) .Item = null; } break; case GlobalParametr.EquipmentType.Belt: if (equip.itemId != -1) { Ctrl_PlayerCharacter.Instance.GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Belt.ToString()) .Item = Ctrl_InventoryManager.Instance.NewItem(equip.itemId); } else { Ctrl_PlayerCharacter.Instance.GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Belt.ToString()) .Item = null; } break; case GlobalParametr.EquipmentType.Pants: if (equip.itemId != -1) { Ctrl_PlayerCharacter.Instance .GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Pants.ToString()) .Item = Ctrl_InventoryManager.Instance.NewItem(equip.itemId); } else { Ctrl_PlayerCharacter.Instance .GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Pants.ToString()) .Item = null; } break; case GlobalParametr.EquipmentType.Boots: if (equip.itemId != -1) { Ctrl_PlayerCharacter.Instance .GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Boots.ToString()) .Item = Ctrl_InventoryManager.Instance.NewItem(equip.itemId); } else { Ctrl_PlayerCharacter.Instance .GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Boots.ToString()) .Item = null; } break; case GlobalParametr.EquipmentType.Finger: if (equip.itemId != -1) { Ctrl_PlayerCharacter.Instance .GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Finger.ToString()) .Item = Ctrl_InventoryManager.Instance.NewItem(equip.itemId); } else { Ctrl_PlayerCharacter.Instance .GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Finger.ToString()) .Item = null; } break; case GlobalParametr.EquipmentType.Trinket: if (equip.itemId != -1) { Ctrl_PlayerCharacter.Instance .GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Trinket.ToString()) .Item = Ctrl_InventoryManager.Instance.NewItem(equip.itemId); } else { Ctrl_PlayerCharacter.Instance .GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Trinket.ToString()) .Item = null; } break; case GlobalParametr.EquipmentType.Weapon: if (equip.itemId != -1) { Ctrl_PlayerCharacter.Instance .GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Weapon.ToString()) .Item = Ctrl_InventoryManager.Instance.NewItem(equip.itemId); } else { Ctrl_PlayerCharacter.Instance .GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Weapon.ToString()) .Item = null; } break; case GlobalParametr.EquipmentType.Shield: if (equip.itemId != -1) { Ctrl_PlayerCharacter.Instance .GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Shield.ToString()) .Item = Ctrl_InventoryManager.Instance.NewItem(equip.itemId); } else { Ctrl_PlayerCharacter.Instance .GetCtrlEquipmentSlot(GlobalParametr.EquipmentType.Shield.ToString()) .Item = null; } break; default: throw new ArgumentOutOfRangeException(); } } }