Exemple #1
0
    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;
            }
        }
    }
Exemple #3
0
    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");
    }