void Awake()
        {
            ignoreFuelsForFill = null;
            tankDefinitions    = null;
            managedResources   = null;

            Destroy(this);
        }
        public static void Initialize()
        {
            ignoreFuelsForFill = new HashSet <string> ();
            tankDefinitions    = new Tanks.TankDefinitionList();
            managedResources   = new Dictionary <string, HashSet <string> > ();
            overrides          = new Dictionary <string, ConfigNode[]>();

            // fill vsps & conductivities
            resourceVsps           = new Dictionary <string, double>();
            resourceConductivities = new Dictionary <string, double>();
            foreach (ConfigNode n in GameDatabase.Instance.GetConfigNodes("RESOURCE_DEFINITION"))
            {
                if (n.HasValue("vsp"))
                {
                    double dtmp;
                    if (double.TryParse(n.GetValue("vsp"), out dtmp))
                    {
                        resourceVsps[n.GetValue("name")] = dtmp;
                    }
                }
                if (n.HasValue("conductivity"))
                {
                    double dtmp;
                    if (double.TryParse(n.GetValue("conductivity"), out dtmp))
                    {
                        resourceConductivities[n.GetValue("name")] = dtmp;
                    }
                }
            }


            ConfigNode node = GameDatabase.Instance.GetConfigNodes("MFSSETTINGS").LastOrDefault();

            log.info("Loading global settings");

            if (node != null)
            {
                bool   tb;
                float  tf;
                double td;

                if (bool.TryParse(node.GetValue("useRealisticMass"), out tb))
                {
                    useRealisticMass = tb;
                }
                if (float.TryParse(node.GetValue("tankMassMultiplier"), out tf))
                {
                    tankMassMultiplier = tf;
                }
                if (float.TryParse(node.GetValue("baseCostPV"), out tf))
                {
                    baseCostPV = tf;
                }
                if (float.TryParse(node.GetValue("partUtilizationDefault"), out tf))
                {
                    partUtilizationDefault = tf;
                }
                if (bool.TryParse(node.GetValue("partUtilizationTweakable"), out tb))
                {
                    partUtilizationTweakable = tb;
                }
                if (node.HasValue("unitLabel"))
                {
                    unitLabel = node.GetValue("unitLabel");
                }
                if (bool.TryParse(node.GetValue("basemassUseTotalVolume"), out tb))
                {
                    basemassUseTotalVolume = tb;
                }
                if (node.HasValue("radiatorMinTempMult"))
                {
                    if (double.TryParse(node.GetValue("radiatorMinTempMult"), out td))
                    {
                        radiatorMinTempMult = td;
                    }
                }

                ConfigNode ignoreNode = node.GetNode("IgnoreFuelsForFill");
                if (ignoreNode != null)
                {
                    foreach (ConfigNode.Value v in ignoreNode.values)
                    {
                        ignoreFuelsForFill.Add(v.name);
                    }
                }
            }

            foreach (ConfigNode defNode in GameDatabase.Instance.GetConfigNodes("TANK_DEFINITION"))
            {
                if (tankDefinitions.Contains(defNode.GetValue("name")))
                {
                    log.warn("Ignored duplicate definition of tank type " + defNode.GetValue("name"));
                }
                else
                {
                    tankDefinitions.Add(new Tanks.TankDefinition(defNode));
                }
            }
        }