public static void Load(ref Hashtable substanceList, SubstanceTable substanceTable)
    {
        elements     = new List <Element>();
        elementTable = new Dictionary <int, Element>();
        List <ElementEntry> list = CollectElementsFromYAML();

        foreach (ElementEntry item in list)
        {
            int num = Hash.SDBMLower(item.elementId);
            if (!elementTable.ContainsKey(num))
            {
                Element element = new Element();
                element.id            = (SimHashes)num;
                element.name          = Strings.Get(item.localizationID);
                element.nameUpperCase = element.name.ToUpper();
                element.description   = Strings.Get(item.description);
                element.tag           = TagManager.Create(item.elementId, element.name);
                CopyEntryToElement(item, element);
                elements.Add(element);
                elementTable[num] = element;
            }
        }
        foreach (Element element2 in elements)
        {
            if (!ManifestSubstanceForElement(element2, ref substanceList, substanceTable))
            {
                Debug.LogWarning("Missing substance for element: " + element2.id.ToString());
            }
        }
        FinaliseElementsTable(ref substanceList, substanceTable);
        WorldGen.SetupDefaultElements();
    }
Example #2
0
        public static void AddSubstance(SubstanceEntry entry, SubstanceTable substanceTable)
        {
            Log.Spam($"Adding substance {entry.elementId}");

            SimHashes elementHash = SimHashUtil.CreateHash(entry.elementId);

            if (entry.baseSubstance == null)
            {
                Log.Error($"Missing baseSubstance for substance {entry.elementId}");
                return;
            }

            var baseSubstance = substanceTable.GetSubstance((SimHashes)Hash.SDBMLower(entry.baseSubstance));

            if (baseSubstance == null)
            {
                Log.Error($"Invalid baseSubstance {entry.baseSubstance} for substance {entry.elementId}");
                return;
            }

            Color32 color        = entry.color ?? baseSubstance.colour;
            Color32 uiColor      = entry.uiColor ?? baseSubstance.uiColour;
            Color32 conduitColor = entry.conduitColor ?? baseSubstance.conduitColour;

            var substance = ModUtil.CreateSubstance(entry.elementId, entry.state, baseSubstance.anim, baseSubstance.material, color, uiColor, conduitColor);

            substanceTable.GetList().Add(substance);
        }
Example #3
0
            private static void Prefix(ref Hashtable substanceList, SubstanceTable substanceTable)
            {
                Traverse.Create(typeof(Assets)).Field("AnimTable").GetValue <Dictionary <HashedString, KAnimFile> >().Clear();
                foreach (KAnimFile anim in Assets.Anims)
                {
                    if (anim != null)
                    {
                        HashedString name = anim.name;
                        Traverse.Create(typeof(Assets)).Field("AnimTable").GetValue <Dictionary <HashedString, KAnimFile> >()[name] = anim;
                    }
                }

                var solid  = substanceTable.GetSubstance(SimHashes.SandStone);
                var liquid = substanceTable.GetSubstance(SimHashes.Water);

                substanceList[CorundumElement.SimHash]         = BaseElement.CreateSolidSubstance(CorundumElement.Id, solid.material, "corundum", AssetLoading.AssetLoader.Instance.TextureTable["corundum_mat"]);
                substanceList[KyaniteElement.SimHash]          = BaseElement.CreateSolidSubstance(KyaniteElement.Id, solid.material, "kyanite", AssetLoading.AssetLoader.Instance.TextureTable["kyanite_mat"]);
                substanceList[SodaliteElement.SimHash]         = BaseElement.CreateSolidSubstance(SodaliteElement.Id, solid.material, "sodalite", AssetLoading.AssetLoader.Instance.TextureTable["sodalite_mat"]);
                substanceList[PolishedCorundumElement.SimHash] = BaseElement.CreateSolidSubstance(PolishedCorundumElement.Id, solid.material, "corundum_item", AssetLoading.AssetLoader.Instance.TextureTable["aluminum_salt_mat"]);
                substanceList[PolishedKyaniteElement.SimHash]  = BaseElement.CreateSolidSubstance(PolishedKyaniteElement.Id, solid.material, "kyanite_item", AssetLoading.AssetLoader.Instance.TextureTable["aluminum_salt_mat"]);
                substanceList[PolishedSodaliteElement.SimHash] = BaseElement.CreateSolidSubstance(PolishedSodaliteElement.Id, solid.material, "sodalite_item", AssetLoading.AssetLoader.Instance.TextureTable["aluminum_salt_mat"]);
                substanceList[AluminumSaltElement.SimHash]     = BaseElement.CreateSolidSubstance(AluminumSaltElement.Id, solid.material, "aluminum_salt", AssetLoading.AssetLoader.Instance.TextureTable["aluminum_salt_mat"]);
                substanceList[MineralWaterElement.SimHash]     = BaseElement.CreateLiquidSubstance(MineralWaterElement.Id, liquid, new Color32(255, 204, 230, 255));
                substanceList[MineralIceElement.SimHash]       = BaseElement.CreateSolidSubstance(MineralIceElement.Id, solid.material, "mineral_ice", AssetLoading.AssetLoader.Instance.TextureTable["mineral_ice_mat"]);
                substanceList[CrystalElement.SimHash]          = BaseElement.CreateSolidSubstance(CrystalElement.Id, solid.material, "crystal_item", AssetLoading.AssetLoader.Instance.TextureTable["aluminum_salt_mat"]);
            }
    private void SubstanceListHookup()
    {
        Hashtable substanceList = new Hashtable();

        ElementsAudio.Instance.LoadData(AsyncLoadManager <IGlobalAsyncLoader> .AsyncLoader <ElementAudioFileLoader> .Get().entries);
        ElementLoader.Load(ref substanceList, substanceTable);
        SubstanceTable = substanceTable;
    }
Example #5
0
        static void Prefix(ref Hashtable substanceList, SubstanceTable substanceTable)
        {
            var water = substanceTable.GetSubstance(SimHashes.Water);
            var ice   = substanceTable.GetSubstance(SimHashes.Ice);

            substanceList[BloodElement.BloodSimHash]       = BloodElement.CreateBloodSubstance(water);
            substanceList[BloodElement.FrozenBloodSimHash] = BloodElement.CreateFrozenBloodSubstance(ice.material, water.anim);
        }
Example #6
0
            static void Prefix(ref Hashtable substanceList, SubstanceTable substanceTable)
            {
                var water = substanceTable.GetSubstance(SimHashes.Water);
                var ice   = substanceTable.GetSubstance(SimHashes.Ice);

                substanceList[ToxicWaterElement.ElementSimHash]       = ToxicWaterElement.CreateSubstance(water);
                substanceList[ToxicWaterElement.FrozenElementSimHash] = ToxicWaterElement.CreateFrozenSubstance(ice.material, water.anim);
            }
Example #7
0
            public static void Prefix(ref Hashtable substanceList, SubstanceTable substanceTable)
            {
                List <SubstanceEntry> substances = Yaml.CollectFromYAML <SubstanceEntry, SubstanceEntryCollection>(path);

                Log.Info($"Adding {substances.Count} substances");

                foreach (SubstanceEntry entry in substances)
                {
                    AddSubstance(entry, substanceTable);
                }
            }
Example #8
0
            public static void Prefix(ref Hashtable substanceList, SubstanceTable substanceTable)
            {
                elementEntries = Yaml.CollectFromYAML <ElementEntry, ElementEntryCollection>(path);
                Log.Info($"Adding {elementEntries.Count} elements");

                foreach (ElementEntry entry in elementEntries)
                {
                    if (entry.substance != null)
                    {
                        entry.substance.elementId = entry.elementId;
                        SubstanceLoader.AddSubstance(entry.substance, substanceTable);
                    }
                }
            }
Example #9
0
        /// <summary>
        /// Gets the default <see cref="KAnimFile"/> for a given <see cref="Element.State"/>.
        /// </summary>
        /// <param name="state">The state</param>
        /// <param name="substanceTable">The table of vanilla substances</param>
        /// <returns>The anim</returns>
        public static KAnimFile GetDefaultKAnimForState(Element.State state, SubstanceTable substanceTable)
        {
            switch (state)
            {
            case Element.State.Liquid:
                return(substanceTable.GetSubstance(SimHashes.Water).anim);

            case Element.State.Gas:
                return(substanceTable.GetSubstance(SimHashes.Hydrogen).anim);

            default:
                return(substanceTable.GetSubstance(SimHashes.Unobtanium).anim);
            }
        }
Example #10
0
        /// <summary>
        /// Gets the base material for a given <see cref="Element.State"/>
        /// </summary>
        /// <param name="state">The state</param>
        /// <param name="substanceTable">The table of vanilla substances</param>
        /// <returns>The material (which can be null)</returns>
        public static Material GetBaseMaterialForState(Element.State state, SubstanceTable substanceTable)
        {
            switch (state)
            {
            case Element.State.Liquid:
                return(substanceTable.liquidMaterial);

            case Element.State.Solid:
                return(substanceTable.solidMaterial);

            default:
                return(null);
            }
        }
        private static void Prefix(ref Hashtable substanceList, ref SubstanceTable substanceTable)
        {
            Debug.Log(" === FluidPhysicsMod_ElementLoader_FinaliseElementsTable Postfix === ");

            ElementLoader.FindElementByHash(SimHashes.Oxygen).flow = 0.2f;

            CopyElementProps(SimHashes.Oxygen, SimHashes.Hydrogen);
            CopyElementProps(SimHashes.Oxygen, SimHashes.ChlorineGas);
            CopyElementProps(SimHashes.Oxygen, SimHashes.ContaminatedOxygen);
            CopyElementProps(SimHashes.Oxygen, SimHashes.Propane);
            CopyElementProps(SimHashes.Oxygen, SimHashes.Helium);
            CopyElementProps(SimHashes.Oxygen, SimHashes.Methane);
            CopyElementProps(SimHashes.Oxygen, SimHashes.CarbonDioxide);

            ElementLoader.FindElementByHash(SimHashes.Water).viscosity = 200f;
            ElementLoader.FindElementByHash(SimHashes.Water).flow      = 0.2f; // doesnt have effect in liquids?

            CopyElementProps(SimHashes.Water, SimHashes.DirtyWater);
            CopyElementProps(SimHashes.Water, SimHashes.CrudeOil);
            CopyElementProps(SimHashes.Water, SimHashes.Petroleum);
        }
Example #12
0
 private static void Prefix(ref Hashtable substanceList, SubstanceTable substanceTable)
 {
     ElementManager.substanceList  = substanceList;
     ElementManager.substanceTable = substanceTable;
 }
Example #13
0
        private static void Prefix(ref Hashtable substanceList, ElementLoader.SolidEntry[] solid_entries, ElementLoader.LiquidEntry[] liquid_entries, ElementLoader.GasEntry[] gas_entries, SubstanceTable substanceTable)
        {
            Debug.Log(" === ElementLoader.Load Prefix === ");
            //"UraniumOre","0.129","4","1","1","1","0.9","1808","MoltenIron","","","242.15","800","1840","3","25","159.6882","Metal","Ore | BuildableAny","0","# U02 - Uranium Ore, advanced smelter can get the O2","",
            string line = "UraniumOre,0.129,4,1,1,1,0.9,1808,MoltenIron,,,242.15,800,1840,3,25,159.6882,Metal,Ore | BuildableAny,0,\"# U02 - Uranium Ore, advanced smelter can get the O2\"";

            //textSolid( "\n" + line);
            foreach (var l in elementadder.sollist)
            {
                solid_entries.Add(l);
            }
            foreach (var l in elementadder.lilist)
            {
                liquid_entries.Add(l);
            }
            foreach (var l in elementadder.gaslist)
            {
                gas_entries.Add(l);
            }
        }
Example #14
0
            public static void Prefix(ref Hashtable substanceList, SubstanceTable substanceTable)
            {
                var water = substanceTable.GetSubstance(SimHashes.Water);

                substanceList[Antigel.SimHash] = Antigel.CreateSubstance(water);
            }
    private static void FinaliseElementsTable(ref Hashtable substanceList, SubstanceTable substanceTable)
    {
        foreach (Element element5 in elements)
        {
            if (element5 != null)
            {
                if (element5.substance == null)
                {
                    if ((UnityEngine.Object)substanceTable == (UnityEngine.Object)null)
                    {
                        element5.substance = new Substance();
                    }
                    else
                    {
                        ManifestSubstanceForElement(element5, ref substanceList, substanceTable);
                    }
                }
                Debug.Assert(element5.substance.nameTag.IsValid);
                if (element5.thermalConductivity == 0f)
                {
                    element5.state |= Element.State.TemperatureInsulated;
                }
                if (element5.strength == 0f)
                {
                    element5.state |= Element.State.Unbreakable;
                }
                if (element5.IsSolid)
                {
                    Element element = FindElementByHash(element5.highTempTransitionTarget);
                    if (element != null)
                    {
                        element5.highTempTransition = element;
                    }
                }
                else if (element5.IsLiquid)
                {
                    Element element2 = FindElementByHash(element5.highTempTransitionTarget);
                    if (element2 != null)
                    {
                        element5.highTempTransition = element2;
                    }
                    Element element3 = FindElementByHash(element5.lowTempTransitionTarget);
                    if (element3 != null)
                    {
                        element5.lowTempTransition = element3;
                    }
                }
                else if (element5.IsGas)
                {
                    Element element4 = FindElementByHash(element5.lowTempTransitionTarget);
                    if (element4 != null)
                    {
                        element5.lowTempTransition = element4;
                    }
                }
            }
        }
        IOrderedEnumerable <Element> source = from e in elements
                                              orderby(int)(e.state & Element.State.Solid) descending, e.id
        select e;

        elements = source.ToList();
        for (int i = 0; i < elements.Count; i++)
        {
            if (elements[i].substance != null)
            {
                elements[i].substance.idx = i;
            }
            elements[i].idx = (byte)i;
        }
    }
    private static bool ManifestSubstanceForElement(Element elem, ref Hashtable substanceList, SubstanceTable substanceTable)
    {
        elem.substance = null;
        if (substanceList.ContainsKey(elem.id))
        {
            elem.substance = (substanceList[elem.id] as Substance);
            return(false);
        }
        if ((UnityEngine.Object)substanceTable != (UnityEngine.Object)null)
        {
            elem.substance = substanceTable.GetSubstance(elem.id);
        }
        if (elem.substance == null)
        {
            elem.substance = new Substance();
            substanceTable.GetList().Add(elem.substance);
        }
        elem.substance.elementID       = elem.id;
        elem.substance.renderedByWorld = elem.IsSolid;
        elem.substance.idx             = substanceList.Count;
        if ((Color)elem.substance.uiColour == noColour)
        {
            int count = elements.Count;
            int idx   = elem.substance.idx;
            elem.substance.uiColour = Color.HSVToRGB((float)idx / (float)count, 1f, 1f);
        }
        string text = UI.StripLinkFormatting(elem.name);

        elem.substance.name = text;
        if (Array.IndexOf((SimHashes[])Enum.GetValues(typeof(SimHashes)), elem.id) >= 0)
        {
            elem.substance.nameTag = GameTagExtensions.Create(elem.id);
        }
        else
        {
            elem.substance.nameTag = ((text == null) ? Tag.Invalid : TagManager.Create(text));
        }
        elem.substance.audioConfig = ElementsAudio.Instance.GetConfigForElement(elem.id);
        substanceList.Add(elem.id, elem.substance);
        return(true);
    }