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(); }
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); }
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; }
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); }
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); }
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); } }
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); } } }
/// <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); } }
/// <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); }
private static void Prefix(ref Hashtable substanceList, SubstanceTable substanceTable) { ElementManager.substanceList = substanceList; ElementManager.substanceTable = substanceTable; }
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); } }
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); }