internal void ManifestMain(int id, ScenarioNodeDatabase Sc)
        {
            Scenario = Sc;

            style = RRSettingsController.get_label_default();
            style_10px_row = RRSettingsController.get_label_10px();
            style_20px_row = RRSettingsController.get_label_20px();
            style_40px_row = RRSettingsController.get_label_40px();
            style_60px_row = RRSettingsController.get_label_60px();
            style_80px_row = RRSettingsController.get_label_80px();
            style_100px_row = RRSettingsController.get_label_100px();
            style_120px_row = RRSettingsController.get_label_120px();
            style_stretchWidth_row = RRSettingsController.get_label_stretchWidth();
            buttonStyle = RRSettingsController.get_button_100px();
            buttonStyle_active = RRSettingsController.get_button_100px_active();
            splitter = RRSettingsController.get_splitter();

            RootNode = Scenario.get_RootNode();
            Scenario.update_StorageTotals();

                GUILayout.Label("Manifest: ToDo", style);

                string currentPlanet = Utilities.get_current_planet();
                ConfigNode PlanetNode = Scenario.get_PlanetNode(currentPlanet);
                //Debug.Log("ResourceRecovery: ManifestMain: got planet ");
                /*
                name = Kerbin
                total_locations = 1
                total_number_recource_tanks = 35
                total_capacity = 0 (ToDo)
                total_capacity_used = 55.55 (May need a fix)
                */

                GUILayout.BeginHorizontal();
                GUILayout.BeginVertical();

                GUILayout.Label(String.Format("Planet Name: {0}", PlanetNode.GetValue("name")), style);
                GUILayout.Label(String.Format("Storage Locations: {0}", PlanetNode.GetValue("total_locations")), style);

                GUILayout.EndVertical();
                GUILayout.BeginVertical();

                GUILayout.Label(String.Format("Resource Tanks: {0}", PlanetNode.GetValue("total_number_recource_tanks")), style);

                string total_capacity_string = (RRSettingsController.get_KSCPlanet() != Utilities.get_current_planet()) ? PlanetNode.GetValue("total_capacity") : RRSettingsController.get_KSCStorage_capacity();
                GUILayout.Label(String.Format("Stored Total: {0}", PlanetNode.GetValue("total_capacity_used") + "/" + total_capacity_string), style);

                GUILayout.EndVertical();
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal(splitter); GUILayout.EndHorizontal();
                ResourceRowHeader();
                GUILayout.BeginHorizontal(splitter); GUILayout.EndHorizontal();

                scrollPosition = GUILayout.BeginScrollView(scrollPosition);
                GUILayout.BeginVertical();

                ConfigNode RNode_tmp = Scenario.get_ResourcesNode();
                ConfigNode[] RNodes = RNode_tmp.GetNodes("RESOURCE");
                int counter = 0;
                List<bool> _expanded = new List<bool>();
                int TotalNumbr = RNode_tmp.CountNodes;

                //Debug.Log("ResourceRecovery: ManifestMain: start foreach");
                List<ResourceNodeType> RNodesList = new List<ResourceNodeType>();
                foreach (ConfigNode node in RNodes)
                {
                    int string_number = 0;
                    Int32.TryParse(node.GetValue("resourceID"), out string_number);

                    RNodesList.Add(new ResourceNodeType() { name = node.GetValue("name"),
                                                            resourceID = string_number,
                                                            storagecapacity = node.GetValue("storagecapacity"),
                                                            storedamount = node.GetValue("storedamount"),
                                                            supply_mode = node.GetValue("supply_mode"),
                                                            value_factor = node.GetValue("value_factor"),
                                                            display_order = node.GetValue("display_order"),
                                                            hide = node.GetValue("hide"),
                                                            group = node.GetValue("group")
                    });
                }
                var sortedRNodes = RNodesList.OrderBy(x => x.display_order).ToList();
                foreach (ResourceNodeType node in sortedRNodes)
                {
                    _expanded.Add(false);
                    //GUILayout.Label(String.Format("{0}:{1}", node.GetValue("name"), node.GetValue("storedamount")));
                    ResourceRow(node,_expanded,counter,TotalNumbr);
                    counter++;
                }
                //Debug.Log("ResourceRecovery: ManifestMain: end foreach");
                GUILayout.EndVertical();
                GUILayout.EndScrollView();
                //Debug.Log("ResourceRecovery: ManifestMain: done");
        }
示例#2
0
        /*
        public static ConfigNode getKSPIResourcesNuclearFile(string path_WarpPlugin_ResourcesNuclear_cfg)
        {
            string p = Utilities.getCustomPluginSettingsFilePath(path_WarpPlugin_ResourcesNuclear_cfg);
            ConfigNode config = null;
            config = ConfigNode.Load(p);
            //ConfigNode[] Resources = config.GetNodes("RESOURCE_DEFINITION");
            return config;
        }
        public static ConfigNode getORSResourcesAthmosphericFile(string path_OpenResourceSystem_atmosphericresourcedefinitions_cfg)
        {
            string p = Utilities.getCustomPluginSettingsFilePath(path_OpenResourceSystem_atmosphericresourcedefinitions_cfg);
            ConfigNode config = null;
            config = ConfigNode.Load(p);
            //ConfigNode[] Resources = config.GetNodes("ATMOSPHERIC_RESOURCE_DEFINITION");
            return config;
        }
        public static ConfigNode getORSResourcesOceanicFile(string path_OpenResourceSystem_oceanicresourcedefinitions_cfg)
        {
            string p = Utilities.getCustomPluginSettingsFilePath(path_OpenResourceSystem_oceanicresourcedefinitions_cfg);
            ConfigNode config = null;
            config = ConfigNode.Load(p);
            //ConfigNode[] Resources = config.GetNodes("OCEANIC_RESOURCE_DEFINITION");
            return config;
        }
        public static ConfigNode getSquadResourcesResourcesGenericFile(string path_Squad_resourcedefinitions_cfg)
        {
            string p = Utilities.getCustomPluginSettingsFilePath(path_Squad_resourcedefinitions_cfg);
            ConfigNode config = null;
            config = ConfigNode.Load(p);
            //ConfigNode[] Resources = config.GetNodes("RESOURCE_DEFINITION");
            return config;
        }
        public static ConfigNode getKethaneResourcesFile(string path_WarpPlugin_ResourcesNuclear_cfg)
        {
            string p = Utilities.getCustomPluginSettingsFilePath(path_WarpPlugin_ResourcesNuclear_cfg);
            ConfigNode config = null;
            config = ConfigNode.Load(p);
            //ConfigNode[] Resources = config.GetNodes("RESOURCE_DEFINITION");
            return config;
        }
        */
        /*
        internal static bool openPersistenFile()
        {
            ConfigNode config = null;
            string persistentfile = null;
            try
            {
                Debug.Log("ResourceRecovery Utilities.openPersistenFile running");
                persistentfile = KSPUtil.ApplicationRootPath + "saves/" + HighLogic.SaveFolder + "/persistent.sfs";
                config = ConfigNode.Load(persistentfile);
                return config;
            }
            catch (Exception ex)
            {
                Debug.Log("ResourceRecovery Utilities.openPersistenFile failed " + persistentfile);
                Debug.Log(ex);
                return config;
            }
            return false;
        }
            */
        /*
        internal static bool SavePersistenFile(ConfigNode config)
        {
            string persistentfile = null;
            try
            {
                Debug.Log("ResourceRecovery Utilities.SavePersistenFile running");
                persistentfile = KSPUtil.ApplicationRootPath + "saves/" + HighLogic.SaveFolder + "/persistent.sfs";
                config.Save(persistentfile);
                Debug.Log("ResourceRecovery Utilities.SavePersistenFile done");
                return true;
            }
            catch (Exception ex)
            {
                Debug.Log("ResourceRecovery Utilities.SavePersistenFile failed " + persistentfile);
                Debug.Log(ex);
                return false;
            }
            return false;
        }
            //*/
        internal static bool perform_resource_transfer(string buttonID, Part part, PartResource resource, string resourceSelected, ScenarioNodeDatabase Sc)
        {
            Vessel vessel = FlightGlobals.fetch.activeVessel;
            Scenario = new ScenarioNodeDatabase();
            Scenario = Sc;

            // get part resource data
            double part_amount = resource.amount;
            double part_maxamount = resource.maxAmount;
            double part_empty_space = part_maxamount - part_amount;
            double part_percentFull = part_amount / part_maxamount * 100.0;
            double part_1_step_value = part_maxamount / 8;
            Debug.Log("ResourceRecovery perform_resource_transfer: part_1_step_value = " + part_1_step_value);
            Debug.Log("ResourceRecovery perform_resource_transfer: part_amount = " + part_amount);
            Debug.Log("ResourceRecovery perform_resource_transfer: part_maxamount = " + part_maxamount);

            // get scenario resource data
            ConfigNode res = Scenario.get_ResourceNode(resourceSelected);
            double storage_amount = 0;
            string storage_amount_string = res.GetValue("storedamount");
            storage_amount_string = (res.GetValue("supply_mode")!="0") ? storage_amount_string : RRSettingsController.get_KSCStorage_capacity();
            double string_number1 = 0;
            if (Double.TryParse(storage_amount_string, out string_number1))
            { storage_amount = string_number1; } else { storage_amount = 0.00; }

            double storage_maxamount = 0;
            string storage_maxamount_string = res.GetValue("storagecapacity");
            double string_number2 = 0;
            if (Double.TryParse(storage_maxamount_string, out string_number2))
            { storage_maxamount = string_number2; } else { storage_maxamount = 0.00; }

            double percentFull = storage_amount / storage_maxamount * 100.0;
            double storage_percentFull = percentFull;
            Debug.Log("ResourceRecovery perform_resource_transfer: storage_amount = " + storage_amount);

            // get requested action data
            double change_new_value=0;
            double change_new_percentFull=0;
            double change_difference;
            switch (buttonID)
            {
                case "Empty":
                     change_new_value = part_1_step_value * 0;
                    break;
                case "1/8":
                     change_new_value = part_1_step_value * 1;
                    break;
                case "1/4":
                     change_new_value = part_1_step_value * 2;
                    break;
                case "3/8":
                     change_new_value = part_1_step_value * 3;
                    break;
                case "Half":
                     change_new_value = part_1_step_value * 4;
                    break;
                case "5/8":
                     change_new_value = part_1_step_value * 5;
                    break;
                case "3/4":
                     change_new_value = part_1_step_value * 6;
                    break;
                case "7/8":
                     change_new_value = part_1_step_value * 7;
                    break;
                case "Full":
                     change_new_value = part_1_step_value * 8;
                    break;
            }
            change_new_percentFull = change_new_value / part_maxamount * 100.0;
            change_difference = change_new_value - part_amount;
            Debug.Log("ResourceRecovery perform_resource_transfer: change_new_value - part_amount = change_difference : change_difference=" + change_difference);

            // validate actions
            storage_amount = (res.GetValue("supply_mode") != "0") ? storage_amount : change_difference;
            if (storage_amount - change_difference < 0)
            { change_difference = storage_amount; }
            if (storage_amount - change_difference < 0)
            { change_difference = storage_amount; }
            Debug.Log("ResourceRecovery perform_resource_transfer: change_difference = " + change_difference);
            if (part_empty_space - change_difference < 0)
            { change_difference = part_empty_space; }
            Debug.Log("ResourceRecovery perform_resource_transfer: change_difference = " + change_difference);

            // perform actions
            ConfigNode RootNode;
            RootNode = Scenario.get_RootNode();
            Debug.Log("ResourceRecovery perform_resource_transfer: resource.amount = " + resource.amount);
            double new_part_amount = resource.amount + change_difference;
            new_part_amount = (part_maxamount > new_part_amount) ? new_part_amount : part_maxamount;
            new_part_amount = (new_part_amount > 0) ? new_part_amount : 0;
            resource.amount = new_part_amount;
            Debug.Log("ResourceRecovery perform_resource_transfer: resource.amount = " + resource.amount);
            Debug.Log("ResourceRecovery perform_resource_transfer: storage_amount = " + storage_amount);
            double new_storage_amaount = storage_amount - change_difference;
            new_storage_amaount = (new_storage_amaount > 0) ? new_storage_amaount : 0;
            Debug.Log("ResourceRecovery perform_resource_transfer: new_storage_amaount = " + new_storage_amaount);

            if (Scenario.modify_ResourceNode_by_ResourceName(resourceSelected, "storedamount", new_storage_amaount.ToString()))
            {
                GamePersistence.SaveGame("persistent", HighLogic.SaveFolder, SaveMode.OVERWRITE);
                if (Scenario.save())
                {
                    Debug.Log("ResourceRecovery perform_resource_transfer Utilities.SavePluginSaveFile(RootNode) worked");
                    return true;
                }
                else
                {
                    Debug.Log("ResourceRecovery EXCEPTION: perform_resource_transfer SavePluginSaveFile failed");
                    return false;
                }
            }
            Debug.Log("perform_resource_transfer Clicked buttonID=" + buttonID + " part.partInfo.title=" + part.partInfo.title + " resource.resourceName=" + resource.resourceName + " resourceSelected=" + resourceSelected);
            return false;
            //return true;
        }