public static void Load() { if (File.Exists(Application.persistentDataPath + folderPath + currentSaveSlot + saveSlotStrings[currentSaveSlot - 1])) { // Debug.Log("Loading..."); BinaryFormatter data = new BinaryFormatter(); FileStream file = File.Open(Application.persistentDataPath + folderPath + currentSaveSlot + saveSlotStrings[currentSaveSlot - 1], FileMode.Open); SaveableData loadData = (SaveableData)data.Deserialize(file); file.Close(); //-----------------------Loading Data--------------------------------- PlayerTools.SetOwnedToolsList(loadData.ownedTools); PlayerTools.SetCurrentlyEquippedTool(loadData.currentlyEquippedTool.GetToolName()); ToolManager.EquipTool(PlayerTools.GetCurrentlyEquippedToolIndex()); PlayerSkills.SetEfficiencySkill(loadData.efficiencySkill); PlayerSkills.SetContractsSkill(loadData.contractsSkill); PlayerSkills.SetCurrencySkill(loadData.currencySkill); PlayerSkills.SetEnergySkill(loadData.energySkill); PlayerSkills.SetBuildingMaterialsSkill(loadData.buildingMaterialsSkill); PlayerSkills.SetToolPartsSkill(loadData.toolPartsSkill); PlayerSkills.SetBookPagesSkill(loadData.bookPagesSkill); PlayerSkills.SetLumberTreesSkill(loadData.lumberTreesSkill); PlayerSkills.SetLumberLogsSkill(loadData.lumberLogsSkill); PlayerSkills.SetLumberFirewoodSkill(loadData.lumberFirewoodSkill); PlayerRooms.SetBedRoom(loadData.bedRoom); PlayerRooms.SetKitchenRoom(loadData.kitchenRoom); PlayerRooms.SetOfficeRoom(loadData.officeRoom); PlayerRooms.SetStudyRoom(loadData.studyRoom); PlayerRooms.SetWorkshopRoom(loadData.workshopRoom); PlayerAdditions.SetCoffeeMakerAddition(loadData.coffeeMakerAddition); PlayerAdditions.SetFireplaceAddition(loadData.fireplaceAddition); PlayerAdditions.SetFrontPorchAddition(loadData.frontPorchAddition); PlayerAdditions.SetWoodworkingBenchAddition(loadData.woodworkingBenchAddition); PlayerContracts.SetActiveContractsList(loadData.activeContracts); AvailableContracts.SetAvailableContracts(loadData.availableContracts); AvailableContracts.SetContractsToRemove(loadData.availableContractsToRemove); TimeManager.SetDidDailyGeneration(loadData.didDailyGeneration); AvailableContracts.SetAverageContractDifficulty(loadData.averageContractDifficulty); AvailableContracts.SetPastGeneratedContractDifficulties(loadData.pastGeneratedContractDifficulties); PlayerEnergy.SetCurrentEnergyValue(loadData.currentEnergy); PlayerResources.SetCurrentCurrencyValue(loadData.currentCurrency); PlayerResources.SetCurrentBuildingMaterialsValue(loadData.currentBuildingMaterials); PlayerResources.SetCurrentToolPartsValue(loadData.currentToolParts); PlayerResources.SetCurrentBookPagesValue(loadData.currentBookPages); HomesteadStockpile.SetAllTreesCount(loadData.homesteadTreesCount); HomesteadStockpile.SetAllLogsCount(loadData.homesteadLogsCount); HomesteadStockpile.SetAllFirewoodCount(loadData.homesteadFirewoodCount); TimeManager.SetCurrentTime(loadData.currentTime); MainMenu.SetSceneToLoad(loadData.lastSceneName); float[] spawnHolder = loadData.lastSceneSpawnLocation; MainMenu.SetLocationToSpawn(new Vector3(spawnHolder[0], spawnHolder[1], spawnHolder[2])); //-----------------------Done Loading---------------------------------- } else { Save(); } }
/// <summary> /// 当按下space时,捡起或放下工具或者材料 /// </summary> void PickOrLoad() { // 拾起的区域为角色面前的0.5格 Vector3 vecPickOrLoad = transform.position + transform.forward * 0.5f; // 画出单位方格,即可以碰撞的区域 DrawBoxForDebug(BoxExtents, new Vector3(vecPickOrLoad.x, 0.5f, vecPickOrLoad.z)); // 单位方格中的物体,只检测材料和工具 hitcollidersForward = Physics.OverlapBox(new Vector3(vecPickOrLoad.x, 0.5f, vecPickOrLoad.z), BoxExtents, Quaternion.identity, LayerMask.GetMask("Material", "Tool")); if (hitcollidersForward.Length >= 1) // 地上有东西 { // 查找最近的物体 closestObject = hitcollidersForward[0].gameObject; int i = 1; while (i < hitcollidersForward.Length) { // 比较距离,如果距离更近,则替换closestObject if (Vector3.Distance(transform.position, hitcollidersForward[i].transform.position) < Vector3.Distance(transform.position, closestObject.transform.position)) { closestObject = hitcollidersForward[i].gameObject; } i++; } // 根据角色手的状态捡起或放下工具或者材料 GameObject itemOnGround = closestObject.gameObject; // 地上的工具或材料 bool isTool = (itemOnGround.tag == "Tool"); switch (tm.handState) // 角色的手的状态 { case ToolManager.HANDSTATE.EMPTY: // 手里没有东西,可以拿工具或者材料 if (isTool) { tm.EquipTool(itemOnGround); } else { tm.EquipMaterial(itemOnGround); if (itemOnGround.name == "Rail") { tm.handState = ToolManager.HANDSTATE.RAIL; } } break; case ToolManager.HANDSTATE.TOOL: // 手里有工具,先放下工具,再拿起工具或者材料 if (isTool) { tm.UnloadTool(); tm.EquipTool(itemOnGround); } else { tm.UnloadTool(); tm.EquipMaterial(itemOnGround); } break; case ToolManager.HANDSTATE.MATERIAL: // 手里有材料,先放下材料,再拿起工具或者材料 if (isTool) // Todo : 判断手里材料类型 { tm.UnloadMaterial(); tm.EquipTool(itemOnGround); } else { if (tm.itemInHand.name == itemOnGround.name) // 如果是同种材料则堆叠 { tm.PileMaterial(itemOnGround); } else // 如果是不同种材料,则先放下材料,再拿起材料 { tm.UnloadMaterial(); tm.EquipMaterial(itemOnGround); } } break; default: break; } } else // 方格内的无工具或材料,即空地,可以放东西 { switch (tm.handState)// 角色的手的状态 { case ToolManager.HANDSTATE.EMPTY: // 手里没有东西,什么事也不做 Debug.Log("Nothing to pick up"); break; case ToolManager.HANDSTATE.TOOL: // 放下工具 tm.UnloadTool(); break; case ToolManager.HANDSTATE.MATERIAL: // 放下材料 Transform mat = tm.rightHand.transform.GetChild(0); if (mat.name == "Wood") { Transform wood = tm.GetWood(); if (!gameManager.BuildBridge(wood)) { tm.UnloadMaterial(); } else { tm.LessenMatNum(); } } else { tm.UnloadMaterial(); } break; case ToolManager.HANDSTATE.RAIL: Transform rail = tm.GetRail(); if (!gameManager.PutRail(rail.gameObject)) { tm.UnloadMaterial(); } else { tm.LessenMatNum(); } break; default: break; } } }
public static void CreateNewSave() { Debug.Log("Creating New Save in Slot: " + currentSaveSlot); BinaryFormatter data = new BinaryFormatter(); if (!Directory.Exists(Application.persistentDataPath + folderPath + currentSaveSlot + saveSlotStrings[currentSaveSlot - 1])) { Directory.CreateDirectory(Application.persistentDataPath + folderPath + currentSaveSlot); } FileStream file = File.Create(Application.persistentDataPath + folderPath + currentSaveSlot + saveSlotStrings[currentSaveSlot - 1]); SaveableData saveData = new SaveableData(); //-----------------------Setting Save Data--------------------------------------------- saveData.ownedTools = new List <Tool>() { new Tool(ToolName.EMPTY_HANDS), new Tool(ToolName.FELLING_AXE), new Tool(ToolName.CROSSCUT_SAW), new Tool(ToolName.SPLITTING_AXE) }; saveData.efficiencySkill = new EfficiencySkill(); saveData.contractsSkill = new ActiveContractsSkill(); saveData.currencySkill = new CurrencySkill(); saveData.energySkill = new EnergySkill(); saveData.buildingMaterialsSkill = new BuildingMaterialsSkill(); saveData.toolPartsSkill = new ToolPartsSkill(); saveData.bookPagesSkill = new BookPagesSkill(); saveData.lumberTreesSkill = new LumberTreesSkill(); saveData.lumberLogsSkill = new LumberLogsSkill(); saveData.lumberFirewoodSkill = new LumberFirewoodSkill(); saveData.bedRoom = new BedRoom(); saveData.kitchenRoom = new KitchenRoom(); saveData.officeRoom = new OfficeRoom(); saveData.studyRoom = new StudyRoom(); saveData.workshopRoom = new WorkshopRoom(); saveData.coffeeMakerAddition = new CoffeeMakerAddition(); saveData.fireplaceAddition = new FireplaceAddition(); saveData.frontPorchAddition = new FrontPorchAddition(); saveData.woodworkingBenchAddition = new WoodworkingBenchAddition(); saveData.activeContracts = new List <LumberContract>(); saveData.availableContracts = new List <LumberContract>(); saveData.availableContractsToRemove = new List <int>(); saveData.didDailyGeneration = false; saveData.averageContractDifficulty = 2.5f; saveData.pastGeneratedContractDifficulties = new List <int>() { 2, 3 }; saveData.currentEnergy = PlayerSkills.GetMaxEnergyValue(); saveData.currentlyEquippedTool = new Tool(ToolName.EMPTY_HANDS); ToolManager.EquipTool(0); saveData.currentCurrency = 0; saveData.currentBuildingMaterials = 0; saveData.currentToolParts = 0; saveData.currentBookPages = 0; saveData.homesteadTreesCount = new int[5] { 0, 0, 0, 0, 0 }; saveData.homesteadLogsCount = new int[5] { 0, 0, 0, 0, 0 }; saveData.homesteadFirewoodCount = new int[5] { 0, 0, 0, 0, 0 }; saveData.currentTime = 480f; saveData.lastSceneName = "MainCabin"; Vector3 spawnHolder = SpawnLocations.GetSpawnForLoad("MainMenu"); saveData.lastSceneSpawnLocation = new float[3] { spawnHolder.x, spawnHolder.y, spawnHolder.z }; //-----------------------Done Setting Data--------------------------------------------- data.Serialize(file, saveData); file.Close(); Debug.Log("Finished Saving"); }