示例#1
0
 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}!");
 }
示例#2
0
        /// <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
            }
        }
示例#3
0
        /* 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();
            }
        }
示例#4
0
    // 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);
        }
    }
示例#5
0
    private HungerState()
    {
        if (_instance != null)
        {
            return;
        }

        _instance = this;
    }
示例#6
0
 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);
        }
示例#9
0
    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}.");
            }
        }
    }
示例#10
0
        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");
            }
        }
示例#11
0
        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");
            }
        }
示例#12
0
    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());
        }
    }
示例#13
0
        /// <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
            }
        }
示例#14
0
 public static void Feed()
 {
     Xp += 200;
     HungerState.RestoreDependents(AxolotlState);
     Dashboard.UpdateXpLevel();
 }
示例#15
0
    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;
 }
示例#18
0
    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;
        }
    }