/// <summary> /// Pours the beer and attempts to fill another container /// The more the container is turned, the more it empties /// </summary> void PourBeer() { if (Time.time > overfillTimer && overfilling) { overfilling = false; emitter.emit = false; } if (ShouldPour() && !pouring) { emitter.emit = true; pouring = true; } if (!ShouldPour() && pouring) //If arent tilted enough to pour { if (!overfilling) { emitter.emit = false; } pouring = false; return; } if (!pouring) { return; } // //Calculate how much liquid is in the difference of the thetaDegree angle and our current angle float Vi = Mathf.PI * Mathf.Pow(radius, 2) * H; //Volume we start at float overpour = .5f * (deltaRot - thetaDegrees); float percentDelta = .5f + overpour; //How much % we are dropping float Vf = Mathf.PI * Mathf.Pow(radius, 2) * ((beerPercent - percentDelta) * .01f * height); //Volume we end at if (beerPercent - percentDelta < 0) //Cant empty more than we have { percentDelta = beerPercent; } if (!debugDontPour) { beerPercent -= percentDelta; } emitter.minSize = Mathf.Clamp(.25f * percentDelta, .02f, .06f); emitter.maxSize = Mathf.Clamp(emitter.minSize * 2.5f, .045f, .12f); BeerContainer bc = GetPourContainer(); if (bc != null) { bc.ReceiveBeer(Vi - Vf); } }
public BeerMenuPartAsGroup(BeerContainer container, BeerMenuPart part) { Container = container; if (part.BeersOfTheMonth.Any()) { Add(new BeerTypeGroup(PluginResources.BeersOfTheMonth, part.BeersOfTheMonth.OrderBy(b => b.Name))); } AddRange(part.Beers.Select(p => new BeerTypeGroup(p.Key, p.Value.OrderBy(b => b.Name))).OrderBy(b => b.Type)); }
/// <summary> /// Pours the overflow beer if we attempt to fill an already full beer /// </summary> void PourOverflowBeer(float volume) { BeerContainer bc = GetPourContainer(); if (bc != null) { float percent = volume / totalVolume; emitter.minSize = .045f * percent; emitter.minSize = Mathf.Clamp(.25f * percent, .02f, .06f); emitter.maxSize = Mathf.Clamp(emitter.minSize * 2.5f, .045f, .12f); bc.ReceiveBeer(volume); } }
public BeerTruck() { beersContainers = new BeerContainer[5]; beersContainers[0] = new BeerContainer() { beer = new Beer() { Name = "Beer 1", minTemp = 4, maxTemp = 6 }, currentTemp = 5 }; beersContainers[1] = new BeerContainer() { beer = new Beer() { Name = "Beer 2", minTemp = 5, maxTemp = 6 }, currentTemp = 5 }; beersContainers[2] = new BeerContainer() { beer = new Beer() { Name = "Beer 3", minTemp = 4, maxTemp = 7 }, currentTemp = 6 }; beersContainers[3] = new BeerContainer() { beer = new Beer() { Name = "Beer 4", minTemp = 6, maxTemp = 8 }, currentTemp = 7 }; beersContainers[4] = new BeerContainer() { beer = new Beer() { Name = "Beer 5", minTemp = 3, maxTemp = 5 }, currentTemp = 4 }; }
/// <summary> /// Checks if there is something to pour into below the tap /// </summary> void CheckForBeerContainer() { for (int i = 0; i < Taps.Count; i++) { Transform t = Taps [i]; RaycastHit hit; if (Physics.Raycast(t.position, Vector3.down, out hit, 5)) { if (hit.transform.name == "CenterTop") { BeerContainer b = hit.transform.GetComponentInParent <BeerContainer> (); if (b != null) { TapEmitters[i].emit = true; b.ReceiveBeer(VolumeFillPerSecond * Time.deltaTime); } } else { TapEmitters[i].emit = false; } } } }