public static LiquidVolume GetPuddle(Cell cell) { LiquidVolume ret = null; foreach (GameObject GO in cell.GetObjects()) { LiquidVolume volume = GO.GetPart <LiquidVolume>(); if (volume != null) { if (ret != null) { ret.MixWith(volume); GO.Destroy(); } else { ret = volume; } if (volume.MaxVolume == -1) { volume.MaxVolume = 10000; } } } return(ret); }
public override void OnCollision(GameObject other) { if (other.tag == "stone") { GO.Destroy(); } }
public override void Update(float time) { base.Update(time); GO.Pos += dir * speed * time; if (GO.Pos.X < -100 || GO.Pos.X > 100 || GO.Pos.Y < -100 || GO.Pos.Y > 100) { GO.Destroy(); } }
public void Tick() { if (ParentObject.OnWorldMap() || (ParentObject.InInventory != null && ParentObject.InInventory.OnWorldMap())) { return; } GetFerments(); //IPart.AddPlayerMessage("fermentation:\n"+ferments.ToString()); LiquidVolume volume = ParentObject.GetPart <LiquidVolume>(); if (volume == null) { return; } if (ParentObject.pPhysics.Temperature < 15) { //IPart.AddPlayerMessage("too cold"); return; } int bads = 0; int total = 0; var test = volume.ComponentLiquids; int adram = (int)Math.Ceiling(1000f / Math.Max(volume.Volume, 1)); foreach (string f in ferments.Keys.ToList()) { IPart.AddPlayerMessage("ferments:" + f + ":" + ferments[f]); } foreach (string id in volume._ComponentLiquids.Keys.ToList()) { IPart.AddPlayerMessage("checking liquid:" + id); if (ferments.ContainsKey(id) || ferments.Values.ToList().Contains(id)) { IPart.AddPlayerMessage("good"); } else { bads += volume._ComponentLiquids[id]; IPart.AddPlayerMessage("bad"); } total += volume._ComponentLiquids[id]; } total = Math.Max(total, 1); if (ParentObject.pPhysics.Temperature > 30f || Stat.Rnd2.NextDouble() < bads / total) { string result = "putrid"; if (volume.GetPrimaryLiquid() != null) { volume._ComponentLiquids[volume.GetPrimaryLiquid().ID] -= adram; } if (!volume._ComponentLiquids.ContainsKey(result)) { volume._ComponentLiquids[result] = 0; } volume._ComponentLiquids[result] += adram; } else { foreach (string id in volume._ComponentLiquids.Keys.ToList()) { if (LiquidVolume.getLiquid(id) != null) { string SourceLiquidName = id; if (ferments.ContainsKey(SourceLiquidName)) //Its a liquid that ferments { string ResultName = ferments[SourceLiquidName]; if (LiquidVolume.getLiquid(SourceLiquidName) != null) { if (LiquidVolume.getLiquid(ResultName) != null) { string ResultLiquidId = ResultName; volume._ComponentLiquids[id] = volume._ComponentLiquids[id] - adram; if (volume._ComponentLiquids[id] <= 0) { volume._ComponentLiquids.Remove(id); } if (!volume._ComponentLiquids.ContainsKey(ResultLiquidId)) { volume._ComponentLiquids[ResultLiquidId] = 0; } volume._ComponentLiquids[ResultLiquidId] = volume._ComponentLiquids[ResultLiquidId] + adram; } else { volume._ComponentLiquids[id] = volume._ComponentLiquids[id] - adram; if (volume._ComponentLiquids[id] <= 0) { volume._ComponentLiquids.Remove(id); } volume.Volume -= 1; ParentObject.GetPart <Inventory>().AddObject(GameObject.create(ResultName)); } } } } } List <string> seen = new List <string>(); foreach (GameObject GO in ParentObject.GetPart <Inventory>().GetObjects()) { if (GO.HasTag("FermentTo")) { string result = GO.GetTag("FermentTo"); if (!seen.Contains(GO.GetBlueprint().Name)) { if (GO.Count > 1) { GO.RemoveOne(); } else { GO.Destroy(); } seen.Add(GO.GetBlueprint().Name); if (LiquidVolume.getLiquid(result) != null) { volume.Volume += 1; if (LiquidVolume.getLiquid(result) == null) { IPart.AddPlayerMessage("ERROR: Tried to ferment " + GO.DisplayName + " but output was invalid:" + result); } else { string LiquidID = result; if (!volume._ComponentLiquids.ContainsKey(LiquidID)) { volume._ComponentLiquids[LiquidID] = 0; } volume._ComponentLiquids[LiquidID] = volume._ComponentLiquids[LiquidID] + adram; } } else { ParentObject.GetPart <Inventory>().AddObject(GameObject.create(result)); } } } } } volume.NormalizeProportions(); volume.RecalculatePrimary(); volume.RecalculateProperties(); volume.FlushWeightCaches(); }
protected void Destroy() { GO.Destroy(); GO.Context.ui.Remove(properties); }