public static void SendGenericForceFeedMessage(PlayerScript feeder, PlayerScript eater, HungerState eaterHungerState, string consumableName, string eatVerb) { Chat.AddActionMsgToChat(eater.gameObject, $"{feeder.playerName} forces you to {eatVerb} {consumableName}!", $"{feeder.playerName} forces {eater.playerName} to {eatVerb} {consumableName}!"); }
/// <summary> /// Handles the body part's consumption of required nutriments /// </summary> protected virtual void ConsumeNutriments() { float availableNutriment = BloodContainer.CurrentReagentMix.Subtract(Nutriment, Single.MaxValue); if (availableNutriment > PassiveConsumptionNutriment * bloodThroughput) { availableNutriment -= PassiveConsumptionNutriment * bloodThroughput; if (TotalDamageWithoutOxy > 0) { float toConsume = Mathf.Min(ConsumptionNutriment * bloodThroughput, availableNutriment); availableNutriment -= toConsume; NutrimentHeal(toConsume); } if (availableNutriment < PassiveConsumptionNutriment * bloodThroughput * 7) { HungerModifier.Multiplier = 0.75f; HungerState = HungerState.Malnourished; // Is Hungry } else { HungerModifier.Multiplier = 1f; HungerState = HungerState.Normal; } BloodContainer.CurrentReagentMix.Add(Nutriment, availableNutriment); } else { HungerModifier.Multiplier = 0.5f; HungerState = HungerState.Starving; // Is Starving } }
/* Hunger */ private void UpdateHungerTimedData(object sender, ElapsedEventArgs e) { TimeSpan timeHungerElapsed = e.SignalTime - timeKeeperHunger.StartTime; HungerState newHungerState = hunger.CurrentHungerState; /* Timer statement to display state */ if (timeHungerElapsed.TotalSeconds < 30) { newHungerState = HungerState.good; HungerProgressBar.ProgressTo(1, 900, Easing.Linear); } else if (timeHungerElapsed.TotalSeconds < 40) { newHungerState = HungerState.bad; HungerProgressBar.ProgressTo(0.5, 900, Easing.Linear); } else if (timeHungerElapsed.TotalSeconds >= 50) { newHungerState = HungerState.worse; HungerProgressBar.ProgressTo(0.1, 900, Easing.Linear); } /* Update state */ if (newHungerState != hunger.CurrentHungerState) { hunger.CurrentHungerState = newHungerState; updateHungerUI(); } }
// Metabolism tick private void ServerUpdateMe() { if (bloodSystem.HeartStopped) { return; } //Apply hunger nutritionLevel -= HungerRate; //Apply effects for (int i = effects.Count - 1; i >= 0; i--) { MetabolismEffect e = effects[i]; if (e.duration <= 0) { effects.RemoveAt(i); continue; } nutritionLevel += e.totalNutrients / e.initialDuration; bloodSystem.ToxinLevel += e.totalToxins / e.initialDuration; e.duration--; effects[i] = e; } nutritionLevel = Mathf.Clamp(nutritionLevel, 0, NUTRITION_LEVEL_MAX); HungerState oldState = this.HungerState; if (nutritionLevel > NUTRITION_LEVEL_STUFFED) //TODO: Make character nauseous when he's too full { HungerState = HungerState.Full; } else if (nutritionLevel > NUTRITION_LEVEL_NORMAL) { HungerState = HungerState.Normal; } else if (nutritionLevel > NUTRITION_LEVEL_HUNGRY) { HungerState = HungerState.Hungry; } else if (nutritionLevel > NUTRITION_LEVEL_MALNOURISHED) { HungerState = HungerState.Malnourished; } else { HungerState = HungerState.Starving; } if (oldState != this.HungerState) { SetHungerState(HungerState); // HungerState was altered, send new one to player UpdateHungerStateMessage.Send(this.gameObject, HungerState); } }
private HungerState() { if (_instance != null) { return; } _instance = this; }
public static void Init() { AxolotlState = new AxolotlState(); HungerState = new HungerState(); TankState = new TankState(); FilterState = new FilterState(); TimeKeeper = new TimeKeeper(); Xp = 0; }
public static UpdateHungerStateMessage Send(GameObject recipient, HungerState state) { UpdateHungerStateMessage msg = new UpdateHungerStateMessage { State = state }; msg.SendTo(recipient); return(msg); }
public static NetMessage Send(GameObject recipient, HungerState state) { NetMessage msg = new NetMessage { State = state }; SendTo(recipient, msg); return(msg); }
public static void SendGenericConsumeMessage(PlayerScript feeder, PlayerScript eater, HungerState eaterHungerState, string consumableName, string eatVerb) { if (feeder == eater) //If you're eating it yourself. { switch (eaterHungerState) { case HungerState.Full: Chat.AddActionMsgToChat(eater.gameObject, $"You cannot force any more of the {consumableName} to go down your throat!", $"{eater.playerName} cannot force any more of the {consumableName} to go down {eater.characterSettings.TheirPronoun(eater)} throat!"); return; //Not eating! case HungerState.Normal: Chat.AddActionMsgToChat(eater.gameObject, $"You unwillingly {eatVerb} the {consumableName}.", //"a bit of" $"{eater.playerName} unwillingly {eatVerb}s the {consumableName}."); //"a bit of" break; case HungerState.Hungry: Chat.AddActionMsgToChat(eater.gameObject, $"You {eatVerb} the {consumableName}.", $"{eater.playerName} {eatVerb}s the {consumableName}."); break; case HungerState.Malnourished: Chat.AddActionMsgToChat(eater.gameObject, $"You hungrily {eatVerb} the {consumableName}.", $"{eater.playerName} hungrily {eatVerb}s the {consumableName}."); break; case HungerState.Starving: Chat.AddActionMsgToChat(eater.gameObject, $"You hungrily {eatVerb} the {consumableName}, gobbling it down!", $"{eater.playerName} hungrily {eatVerb}s the {consumableName}, gobbling it down!"); break; } } else //If you're feeding it to someone else. { if (eaterHungerState == HungerState.Full) { Chat.AddActionMsgToChat(eater.gameObject, $"{feeder.playerName} cannot force any more of {consumableName} down your throat!", $"{feeder.playerName} cannot force any more of {consumableName} down {eater.playerName}'s throat!"); return; //Not eating! } else { Chat.AddActionMsgToChat(eater.gameObject, $"{feeder.playerName} attempts to feed you {consumableName}.", $"{feeder.playerName} attempts to feed {eater.playerName} {consumableName}."); } } }
public static string GetHungerString(HungerState hungerState) { switch (hungerState) { case HungerState.good: return("good"); case HungerState.bad: return("bad"); case HungerState.worse: return("worse"); default: return("good"); } }
public static string GetHungerString(HungerState hungerState) { switch (hungerState) { case HungerState.full: return("full"); case HungerState.content: return("content"); case HungerState.hungry: return("hungry"); case HungerState.starving: return("starving"); default: return("content"); } }
public void SetHungerState(HungerState newState) { if (newState == HungerState) { return; } HungerState = newState; if (IsStarving) { ApplySpeedDebuff(); } else { RemoveSpeedDebuff(); } if (!NetworkManager.isHeadless && PlayerManager.LocalPlayer == gameObject) { Chat.AddExamineMsgToClient(GetHungerMessage()); } }
/// <summary> /// Handles the body part's consumption of required nutriments /// </summary> protected virtual void ConsumeNutriments() { float availableNutriment = BloodContainer.CurrentReagentMix.Subtract(Nutriment, Single.MaxValue); if (availableNutriment > PassiveConsumptionNutriment) { HealthMaster.NutrimentConsumed += PassiveConsumptionNutriment; availableNutriment -= PassiveConsumptionNutriment; if (TotalDamageWithoutOxy > 0) { float toConsume = Mathf.Min(PassiveConsumptionNutriment * HealingNutrimentMultiplier, availableNutriment); availableNutriment -= toConsume; HealthMaster.NutrimentConsumed += toConsume; NutrimentHeal(toConsume); } if (HungerModifier.Multiplier != 1) { HungerModifier.Multiplier = 1f; } if (HungerState == HungerState.Starving) { HungerState = HungerState.Normal; } BloodContainer.CurrentReagentMix.Add(Nutriment, availableNutriment); } else { HungerModifier.Multiplier = 0.5f; HungerState = HungerState.Starving; // Is Starving } }
public static void Feed() { Xp += 200; HungerState.RestoreDependents(AxolotlState); Dashboard.UpdateXpLevel(); }
void UpdateMe() { //Server only if (CustomNetworkManager.Instance._isServer) { tick += Time.deltaTime; if (tick >= metabolismRate && !bloodSystem.HeartStopped) //Metabolism tick { //Apply hunger nutritionLevel -= HungerRate; //Apply effects for (int i = effects.Count - 1; i >= 0; i--) { MetabolismEffect e = effects[i]; if (e.duration <= 0) { effects.RemoveAt(i); continue; } nutritionLevel += e.totalNutrients / e.initialDuration; bloodSystem.ToxinLevel += e.totalToxins / e.initialDuration; e.duration--; effects[i] = e; } nutritionLevel = Mathf.Clamp(nutritionLevel, 0, MAX_NUTRITION_LEVEL); HungerState oldState = this.HungerState; if (nutritionLevel > 150) //TODO: Make character nauseous when he's too full { HungerState = HungerState.Full; } else if (nutritionLevel > 75) { HungerState = HungerState.Normal; } else if (nutritionLevel > 25) { HungerState = HungerState.Hungry; } else if (nutritionLevel > 0) { HungerState = HungerState.Malnourished; } else { HungerState = HungerState.Starving; } if (oldState != this.HungerState) //HungerState was altered, send new one to player { UpdateHungerStateMessage.Send(this.gameObject, HungerState); } tick = 0; } } //Client and server if (HungerState == HungerState.Starving) { playerMove.RunSpeed = playerMove.WalkSpeed; } else { playerMove.RunSpeed = playerMove.InitialRunSpeed; } }
private void SyncHungerState(HungerState oldHungerState, HungerState newHungerState) { hungerState = newHungerState; }
public void SetHunger(HungerState newHungerState) { hungerState = newHungerState; }
private void Hunger(float delta) { if (_hungerState != HungerState.Eating) { _currentHungerValue -= delta * _hungerDeleptionRate; _currentHungerValue = Mathf.Max(0, _currentHungerValue); } switch (_hungerState) { case HungerState.Sated: _targetFood = null; if (_currentHungerValue <= 0) { _hungerState = HungerState.SearchingForFood; } break; case HungerState.SearchingForFood: _targetFood = null; float closestDist = Mathf.Infinity; foreach (Food food in FindObjectsOfType <Food>()) { if (food.RemainingFood() >= 1 && food.BeingEatenBy().Count == 0) { float dist = Vector3.Distance(transform.position, food.transform.position); if (dist < closestDist) { _targetFood = food; closestDist = dist; } } } if (_targetFood != null) { _targetFood.AddEater(this); _hungerState = HungerState.MovingToFood; _navigator.SetCurrentNavPosition(transform.position); _navigator.SetTarget(_targetFood); } break; case HungerState.MovingToFood: if (_targetFood.BeingEatenBy().Count >= 2) { _targetFood = null; _hungerState = HungerState.SearchingForFood; } else if (_navigator.HasReachedTarget()) { _hungerState = HungerState.Eating; } break; case HungerState.Eating: if ((_eatTimer -= delta) <= 0) { _eatTimer = _eatTime; _targetFood.EatFromFood(); _currentHungerValue += 0.1f; if (_currentHungerValue >= 1) { _targetFood.RemoveFoodEater(this); _targetFood = null; _navigator.SetTarget(null); _hungerState = HungerState.Sated; } else if (_targetFood.RemainingFood() <= 0) { _targetFood.RemoveFoodEater(this); _targetFood = null; _navigator.SetTarget(null); _hungerState = HungerState.SearchingForFood; } } break; } }