Example #1
0
    public override void TryConsume(GameObject feederGO, GameObject eaterGO)
    {
        var eater = eaterGO.GetComponent <PlayerScript>();

        if (eater == null)
        {
            // todo: implement non-player eating
            SoundManager.PlayNetworkedAtPos(sound, eater.WorldPos);
            Despawn.ServerSingle(gameObject);
            return;
        }

        var feeder = feederGO.GetComponent <PlayerScript>();

        // Show eater message
        var eaterHungerState = eater.playerHealth.Metabolism.HungerState;

        ConsumableTextUtils.SendGenericConsumeMessage(feeder, eater, eaterHungerState, Name, "eat");

        // Check if eater can eat anything
        if (feeder != eater)          //If you're feeding it to someone else.
        {
            //Wait 3 seconds before you can feed
            StandardProgressAction.Create(ProgressConfig, () =>
            {
                ConsumableTextUtils.SendGenericForceFeedMessage(feeder, eater, eaterHungerState, Name, "eat");
                Eat(eater, feeder);
            }).ServerStartProgress(eater.registerTile, 3f, feeder.gameObject);
            return;
        }
        else
        {
            Eat(eater, feeder);
        }
    }
Example #2
0
    public override void TryConsume(GameObject feederGO, GameObject eaterGO)
    {
        if (!container)
        {
            return;
        }

        // todo: make seperate logic for NPC
        var eater  = eaterGO.GetComponent <PlayerScript>();
        var feeder = feederGO.GetComponent <PlayerScript>();

        if (eater == null || feeder == null)
        {
            return;
        }

        // Check if player is wearing clothing that prevents eating or drinking
        if (eater.Equipment.CanConsume() == false)
        {
            Chat.AddExamineMsgFromServer(eater.gameObject, $"Remove items that cover your mouth first!");
            return;
        }
        // Check if container is empty
        var reagentUnits = container.ReagentMixTotal;

        if (reagentUnits <= 0f)
        {
            Chat.AddExamineMsgFromServer(eater.gameObject, $"The {gameObject.ExpensiveName()} is empty.");
            return;
        }

        // Get current container name
        var name = itemAttributes ? itemAttributes.ArticleName : gameObject.ExpensiveName();

        // Generate message to player
        ConsumableTextUtils.SendGenericConsumeMessage(feeder, eater, HungerState.Hungry, name, "drink");


        if (feeder != eater)          //If you're feeding it to someone else.
        {
            //Wait 3 seconds before you can feed
            StandardProgressAction.Create(ProgressConfig, () =>
            {
                ConsumableTextUtils.SendGenericForceFeedMessage(feeder, eater, HungerState.Hungry, name, "drink");
                Drink(eater, feeder);
            }).ServerStartProgress(eater.registerTile, 3f, feeder.gameObject);
            return;
        }
        else
        {
            Drink(eater, feeder);
        }
    }
Example #3
0
        public override void TryConsume(GameObject feederGO, GameObject eaterGO)
        {
            var eater = eaterGO.GetComponent <PlayerScript>();

            if (eater == null)
            {
                // todo: implement non-player eating
                AudioSourceParameters eatSoundParameters = new AudioSourceParameters(pitch: RandomPitch);
                SoundManager.PlayNetworkedAtPos(sound, item.WorldPosition, eatSoundParameters);
                if (leavings != null)
                {
                    Spawn.ServerPrefab(leavings, item.WorldPosition, transform.parent);
                }

                _ = Despawn.ServerSingle(gameObject);
                return;
            }

            var feeder = feederGO.GetComponent <PlayerScript>();

            // Check if player is wearing clothing that prevents eating or drinking
            if (eater.Equipment.CanConsume() == false)
            {
                Chat.AddExamineMsgFromServer(eater.gameObject, $"Remove items that cover your mouth first!");
                return;
            }

            // Show eater message
            var eaterHungerState = eater.playerHealth.HungerState;

            ConsumableTextUtils.SendGenericConsumeMessage(feeder, eater, eaterHungerState, Name, "eat");

            // Check if eater can eat anything
            if (eaterHungerState != HungerState.Full)
            {
                if (feeder != eater)                 //If you're feeding it to someone else.
                {
                    //Wait 3 seconds before you can feed
                    StandardProgressAction.Create(ProgressConfig, () =>
                    {
                        ConsumableTextUtils.SendGenericForceFeedMessage(feeder, eater, eaterHungerState, Name, "eat");
                        Eat(eater, feeder);
                    }).ServerStartProgress(eater.registerTile, 3f, feeder.gameObject);
                    return;
                }
                else
                {
                    Eat(eater, feeder);
                }
            }
        }