Beispiel #1
0
        private void OnUse(EntityUid uid, DrinkComponent component, UseInHandEvent args)
        {
            if (args.Handled)
            {
                return;
            }

            if (!_actionBlockerSystem.CanInteract(args.User) || !_actionBlockerSystem.CanUse(args.User))
            {
                return;
            }

            if (!args.User.InRangeUnobstructed(uid, popup: true))
            {
                args.Handled = true;
                return;
            }

            if (!component.Opened)
            {
                //Do the opening stuff like playing the sounds.
                SoundSystem.Play(Filter.Pvs(args.User), component.OpenSounds.GetSound(), args.User, AudioParams.Default);

                SetOpen(uid, true, component);
                return;
            }

            if (_solutionContainerSystem.DrainAvailable(uid) <= 0)
            {
                args.User.PopupMessage(Loc.GetString("drink-component-on-use-is-empty", ("owner", uid)));
                return;
            }

            args.Handled = TryUseDrink(uid, args.User, component);
        }
Beispiel #2
0
        private void AddDrinkVerb(EntityUid uid, DrinkComponent component, GetVerbsEvent <AlternativeVerb> ev)
        {
            if (component.CancelToken != null)
            {
                return;
            }

            if (uid == ev.User ||
                !ev.CanInteract ||
                !ev.CanAccess ||
                !EntityManager.TryGetComponent(ev.User, out SharedBodyComponent? body) ||
                !_bodySystem.TryGetComponentsOnMechanisms <StomachComponent>(ev.User, out var stomachs, body))
            {
                return;
            }

            if (EntityManager.TryGetComponent <MobStateComponent>(uid, out var mobState) && mobState.IsAlive())
            {
                return;
            }

            AlternativeVerb verb = new()
            {
                Act = () =>
                {
                    TryDrink(ev.User, ev.User, component);
                },
                IconTexture = "/Textures/Interface/VerbIcons/drink.svg.192dpi.png",
                Text        = Loc.GetString("drink-system-verb-drink"),
                Priority    = -1
            };

            ev.Verbs.Add(verb);
        }
Beispiel #3
0
 private void OnTransferAttempt(EntityUid uid, DrinkComponent component, SolutionTransferAttemptEvent args)
 {
     if (!component.Opened)
     {
         args.Cancel(Loc.GetString("drink-component-try-use-drink-not-open",
                                   ("owner", EntityManager.GetComponent <MetaDataComponent>(component.Owner).EntityName)));
     }
 }
Beispiel #4
0
 /// <summary>
 ///     If the user is currently forcing someone do drink, this cancels the attempt if they swap hands or
 ///     otherwise loose the item. Prevents force-feeding dual-wielding.
 /// </summary>
 private void OnDrinkDeselected(EntityUid uid, DrinkComponent component, HandDeselectedEvent args)
 {
     if (component.CancelToken != null)
     {
         component.CancelToken.Cancel();
         component.CancelToken = null;
     }
 }
        private void AfterInteract(EntityUid uid, DrinkComponent component, AfterInteractEvent args)
        {
            if (args.Handled || args.Target == null || !args.CanReach)
            {
                return;
            }

            args.Handled = TryDrink(args.User, args.Target.Value, component);
        }
Beispiel #6
0
        public void UpdateAppearance(DrinkComponent component)
        {
            if (!component.Owner.TryGetComponent(out AppearanceComponent? appearance) ||
                !component.Owner.HasComponent <SolutionContainerManagerComponent>())
            {
                return;
            }

            var drainAvailable = Get <SolutionContainerSystem>().DrainAvailable(component.Owner);

            appearance.SetData(FoodVisuals.Visual, drainAvailable.Float());
            appearance.SetData(DrinkCanStateVisual.Opened, component.Opened);
        }
        private void OnExamined(EntityUid uid, DrinkComponent component, ExaminedEvent args)
        {
            if (!component.Opened || !args.IsInDetailsRange)
            {
                return;
            }

            var color      = IsEmpty(uid, component) ? "gray" : "yellow";
            var openedText =
                Loc.GetString(IsEmpty(uid, component) ? "drink-component-on-examine-is-empty" : "drink-component-on-examine-is-opened");

            args.Message.AddMarkup($"\n{Loc.GetString("drink-component-on-examine-details-text", ("colorName", color), ("text", openedText))}");
        }
        private void OnDrinkInit(EntityUid uid, DrinkComponent component, ComponentInit args)
        {
            SetOpen(uid, component.DefaultToOpened, component);

            if (EntityManager.TryGetComponent(uid, out DrainableSolutionComponent? existingDrainable))
            {
                // Beakers have Drink component but they should use the existing Drainable
                component.SolutionName = existingDrainable.Solution;
            }
            else
            {
                _solutionContainerSystem.EnsureSolution(uid, component.SolutionName);
            }

            UpdateAppearance(component);
        }
        private void HandleLand(EntityUid uid, DrinkComponent component, LandEvent args)
        {
            if (component.Pressurized &&
                !component.Opened &&
                _random.Prob(0.25f) &&
                _solutionContainerSystem.TryGetDrainableSolution(uid, out var interactions))
            {
                component.Opened = true;
                UpdateAppearance(component);

                var solution = _solutionContainerSystem.Drain(uid, interactions, interactions.DrainAvailable);
                _spillableSystem.SpillAt(uid, solution, "PuddleSmear");

                SoundSystem.Play(Filter.Pvs(uid), component.BurstSound.GetSound(), uid, AudioParams.Default.WithVolume(-4));
            }
        }
Beispiel #10
0
        private void OnExamined(EntityUid uid, DrinkComponent component, ExaminedEvent args)
        {
            if (!component.Opened || !args.IsInDetailsRange)
            {
                return;
            }

            var color      = IsEmpty(uid, component) ? "gray" : "yellow";
            var openedText =
                Loc.GetString(IsEmpty(uid, component) ? "drink-component-on-examine-is-empty" : "drink-component-on-examine-is-opened");

            args.Message.AddMarkup($"\n{Loc.GetString("drink-component-on-examine-details-text", ("colorName", color), ("text", openedText))}");
            if (!IsEmpty(uid, component))
            {
                if (TryComp <ExaminableSolutionComponent>(component.Owner, out var comp))
                {
                    //provide exact measurement for beakers
                    args.Message.AddMarkup($" - {Loc.GetString("drink-component-on-examine-exact-volume", ("amount", _solutionContainerSystem.DrainAvailable(uid)))}");
                }
                else
                {
                    //general approximation
                    string remainingString;
                    switch ((int)_solutionContainerSystem.PercentFull(uid))
                    {
                    case int perc when perc == 100:
                        remainingString = "drink-component-on-examine-is-full";
                        break;

                    case int perc when perc > 66:
                        remainingString = "drink-component-on-examine-is-mostly-full";
                        break;

                    case int perc when perc > 33:
                        remainingString = HalfEmptyOrHalfFull(args);
                        break;

                    default:
                        remainingString = "drink-component-on-examine-is-mostly-empty";
                        break;
                    }
                    args.Message.AddMarkup($" - {Loc.GetString(remainingString)}");
                }
            }
        }
        private void OnUse(EntityUid uid, DrinkComponent component, UseInHandEvent args)
        {
            if (args.Handled)
            {
                return;
            }

            if (!component.Opened)
            {
                //Do the opening stuff like playing the sounds.
                SoundSystem.Play(Filter.Pvs(args.User), component.OpenSounds.GetSound(), args.User, AudioParams.Default);

                SetOpen(uid, true, component);
                return;
            }

            args.Handled = TryDrink(args.User, args.User, component);
        }
Beispiel #12
0
    public void UpdateText(DrinkComponent shotModifier)
    {
        //orderTexts[0].text = modifiers[orders[0].shotModifier];
        //orderTexts[1].text = shots[orders[1].shotType];
        //orderTexts[2].text = sizes[orders[2].size];
        //orderTexts[3].text = milks[orders[3].milkType];
        //bad hardcoded
        switch (shotModifier)
        {
        case DrinkComponent.Drink:
            break;

        case DrinkComponent.ShotModifier:
            orderTexts[0].fontStyle = FontStyles.Strikethrough | FontStyles.Bold;
            shotModifierCorrect     = true;
            break;

        case DrinkComponent.ShotType:
            orderTexts[1].fontStyle = FontStyles.Strikethrough | FontStyles.Bold;
            shotCorrect             = true;
            break;

        case DrinkComponent.Size:
            orderTexts[2].fontStyle = FontStyles.Strikethrough | FontStyles.Bold;
            sizeCorrect             = true;
            break;

        case DrinkComponent.MilkType:
            orderTexts[3].fontStyle = FontStyles.Strikethrough | FontStyles.Bold;
            milkCorrect             = true;
            break;
        }

        if (shotModifierCorrect && shotCorrect && milkCorrect && sizeCorrect)
        {
            //play sound
            GetComponent <AudioSource>().Play();
            //ResetData();
            StartCoroutine(ResetSceneDelayed(1.5f));
        }
    }
Beispiel #13
0
        private void AfterInteract(EntityUid uid, DrinkComponent component, AfterInteractEvent args)
        {
            if (args.Handled || args.Target == null)
            {
                return;
            }

            if (!_actionBlockerSystem.CanInteract(args.User) || !_actionBlockerSystem.CanUse(args.User))
            {
                return;
            }

            if (!args.User.InRangeUnobstructed(uid, popup: true))
            {
                args.Handled = true;
                return;
            }

            if (args.User == args.Target)
            {
                args.Handled = TryUseDrink(uid, args.User);
                return;
            }

            if (!args.User.InRangeUnobstructed(args.Target.Value, popup: true))
            {
                args.Handled = true;
                return;
            }

            if (args.User == args.Target)
            {
                args.Handled = TryUseDrink(uid, args.User, component);
            }
            else
            {
                args.Handled = TryForceDrink(uid, args.User, args.Target.Value, component);
            }
        }
Beispiel #14
0
 private void OnSolutionChange(EntityUid uid, DrinkComponent component, SolutionChangedEvent args)
 {
     UpdateAppearance(component);
 }
        private bool TryDrink(EntityUid user, EntityUid target, DrinkComponent drink)
        {
            // cannot stack do-afters
            if (drink.CancelToken != null)
            {
                drink.CancelToken.Cancel();
                drink.CancelToken = null;
                return(true);
            }

            if (!EntityManager.HasComponent <SharedBodyComponent>(target))
            {
                return(false);
            }

            if (!drink.Opened)
            {
                _popupSystem.PopupEntity(Loc.GetString("drink-component-try-use-drink-not-open",
                                                       ("owner", EntityManager.GetComponent <MetaDataComponent>(drink.Owner).EntityName)), drink.Owner, Filter.Entities(user));
                return(true);
            }

            if (!_solutionContainerSystem.TryGetDrainableSolution(drink.Owner, out var drinkSolution) ||
                drinkSolution.DrainAvailable <= 0)
            {
                _popupSystem.PopupEntity(Loc.GetString("drink-component-try-use-drink-is-empty",
                                                       ("entity", EntityManager.GetComponent <MetaDataComponent>(drink.Owner).EntityName)), drink.Owner, Filter.Entities(user));
                return(true);
            }

            if (_foodSystem.IsMouthBlocked(target, user))
            {
                return(true);
            }

            if (!_interactionSystem.InRangeUnobstructed(user, drink.Owner, popup: true))
            {
                return(true);
            }

            var forceDrink = user != target;

            if (forceDrink)
            {
                EntityManager.TryGetComponent(user, out MetaDataComponent? meta);
                var userName = meta?.EntityName ?? string.Empty;

                _popupSystem.PopupEntity(Loc.GetString("drink-component-force-feed", ("user", userName)),
                                         user, Filter.Entities(target));

                // logging
                _logSystem.Add(LogType.ForceFeed, LogImpact.Medium, $"{ToPrettyString(user):user} is forcing {ToPrettyString(target):target} to drink {ToPrettyString(drink.Owner):drink} {SolutionContainerSystem.ToPrettyString(drinkSolution)}");
            }

            drink.CancelToken = new CancellationTokenSource();
            _doAfterSystem.DoAfter(new DoAfterEventArgs(user, forceDrink ? drink.ForceFeedDelay : drink.Delay, drink.CancelToken.Token, target)
            {
                BreakOnUserMove         = true,
                BreakOnDamage           = true,
                BreakOnStun             = true,
                BreakOnTargetMove       = true,
                MovementThreshold       = 0.01f,
                TargetFinishedEvent     = new DrinkEvent(user, drink, drinkSolution),
                BroadcastCancelledEvent = new DrinkCancelledEvent(drink),
                NeedHand = true,
            });

            return(true);
        }
 public DrinkEvent(EntityUid user, DrinkComponent drink, Solution drinkSolution)
 {
     User          = user;
     Drink         = drink;
     DrinkSolution = drinkSolution;
 }
 public DrinkCancelledEvent(DrinkComponent drink)
 {
     Drink = drink;
 }
Beispiel #18
0
        protected override void Seed(FurysAPI.DataAccess.DataContext.FurysApiDbContext context)
        {
            var timezone = new CultureInfo("en-GB");
            var dion     = new User
            {
                UserName        = "******",
                Email           = "*****@*****.**",
                PhoneNumber     = "07881913156",
                FirstName       = "Dion",
                LastName        = "MacIntyre",
                Birthday        = Convert.ToDateTime("23/04/1994", timezone),
                Online          = false,
                LocationEnabled = false
            };
            var jack = new User
            {
                UserName        = "******",
                FirstName       = "Jack",
                Email           = "*****@*****.**",
                PhoneNumber     = "07881913134",
                Birthday        = Convert.ToDateTime("13/10/1994", timezone),
                Online          = false,
                LocationEnabled = false
            };

            var drink1 = new Drink
            {
                Id              = Guid.NewGuid(),
                Name            = "Jack Daniels Coke",
                Price           = 3.5m,
                BeverageType    = "Spirit",
                CreatedDateTime = DateTime.Now,
                UpdatedDateTime = DateTime.Now,
            };
            var drink2 = new Drink
            {
                Id              = Guid.NewGuid(),
                Name            = "Vodka Lemonade",
                Price           = 2,
                BeverageType    = "Spirit",
                CreatedDateTime = DateTime.Now,
                UpdatedDateTime = DateTime.Now
            };
            var drink3 = new Drink
            {
                Id              = Guid.NewGuid(),
                Name            = "Vodka Blackcurrent Lime",
                Price           = 2,
                BeverageType    = "Spirit",
                CreatedDateTime = DateTime.Now,
                UpdatedDateTime = DateTime.Now
            };
            var drink4 = new Drink
            {
                Id              = Guid.NewGuid(),
                Name            = "Vodka Irn Bru",
                Price           = 2,
                BeverageType    = "Spirit",
                CreatedDateTime = DateTime.Now,
                UpdatedDateTime = DateTime.Now
            };
            var drink5 = new Drink
            {
                Id              = Guid.NewGuid(),
                Name            = "Southern Comfort Lemonade",
                Price           = 2,
                BeverageType    = "Spirit",
                CreatedDateTime = DateTime.Now,
                UpdatedDateTime = DateTime.Now
            };
            var drink6 = new Drink
            {
                Id              = Guid.NewGuid(),
                Name            = "Rum Coke",
                Price           = 2,
                BeverageType    = "Spirit",
                CreatedDateTime = DateTime.Now,
                UpdatedDateTime = DateTime.Now
            };
            var drink7 = new Drink
            {
                Id              = Guid.NewGuid(),
                Name            = "Tennants",
                Price           = 2,
                BeverageType    = "Beer",
                CreatedDateTime = DateTime.Now,
                UpdatedDateTime = DateTime.Now
            };

            var component1 = new DrinkComponent
            {
                CreatedDateTime = DateTime.Now,
                UpdatedDateTime = DateTime.Now,
                Id   = Guid.NewGuid(),
                Name = "Vodka"
            };
            var component2 = new DrinkComponent
            {
                CreatedDateTime = DateTime.Now,
                UpdatedDateTime = DateTime.Now,
                Id   = Guid.NewGuid(),
                Name = "Southern Comfort"
            };
            var component3 = new DrinkComponent
            {
                CreatedDateTime = DateTime.Now,
                UpdatedDateTime = DateTime.Now,
                Id   = Guid.NewGuid(),
                Name = "Lemonade"
            };
            var component4 = new DrinkComponent
            {
                CreatedDateTime = DateTime.Now,
                UpdatedDateTime = DateTime.Now,
                Id   = Guid.NewGuid(),
                Name = "Coke"
            };
            var component5 = new DrinkComponent
            {
                CreatedDateTime = DateTime.Now,
                UpdatedDateTime = DateTime.Now,
                Id   = Guid.NewGuid(),
                Name = "Rum"
            };
            var component6 = new DrinkComponent
            {
                CreatedDateTime = DateTime.Now,
                UpdatedDateTime = DateTime.Now,
                Id   = Guid.NewGuid(),
                Name = "Jack Daniels"
            };
            var component7 = new DrinkComponent
            {
                CreatedDateTime = DateTime.Now,
                UpdatedDateTime = DateTime.Now,
                Id   = Guid.NewGuid(),
                Name = "Irn Bru"
            };

            var recipe1 = new DrinkRecipe
            {
                CreatedDateTime = DateTime.Now,
                UpdatedDateTime = DateTime.Now,
                Drink           = drink2,
                DrinkComponents = component1,
                Id = Guid.NewGuid()
            };
            var recipe2 = new DrinkRecipe
            {
                CreatedDateTime = DateTime.Now,
                UpdatedDateTime = DateTime.Now,
                Drink           = drink2,
                DrinkComponents = component3,
                Id = Guid.NewGuid()
            };

            var order1 = new Order
            {
                Completed         = false,
                ContainsFavourite = false,
                CreatedDateTime   = DateTime.Now,
                UpdatedDateTime   = DateTime.Now,
                Id = Guid.NewGuid(),
                OrderCompletedTime = DateTime.Now,
                OrderNumber        = 33,
                OrderWord          = "Explorer",
                TotalCost          = 6,
                User = dion,
                Paid = false
            };

            var contents1 = new BasketContents
            {
                CreatedDateTime = DateTime.Now,
                UpdatedDateTime = DateTime.Now,
                Drink           = drink1,
                Id    = Guid.NewGuid(),
                Order = order1
            };
            var contents2 = new BasketContents
            {
                CreatedDateTime = DateTime.Now,
                UpdatedDateTime = DateTime.Now,
                Drink           = drink1,
                Id    = Guid.NewGuid(),
                Order = order1
            };
            var contents3 = new BasketContents
            {
                CreatedDateTime = DateTime.Now,
                UpdatedDateTime = DateTime.Now,
                Drink           = drink1,
                Id    = Guid.NewGuid(),
                Order = order1
            };

            AddRole(context, "Customer");
            AddRole(context, "Admin");
            AddUser(context, dion, "password", "Customer");
            AddUser(context, jack, "password", "Admin");

            context.Drinks.AddOrUpdate(drink1);
            context.Drinks.AddOrUpdate(drink2);
            context.Drinks.AddOrUpdate(drink3);
            context.Drinks.AddOrUpdate(drink4);
            context.Drinks.AddOrUpdate(drink5);
            context.Drinks.AddOrUpdate(drink6);
            context.Drinks.AddOrUpdate(drink7);

            context.DrinkComponents.AddOrUpdate(component1);
            context.DrinkComponents.AddOrUpdate(component2);
            context.DrinkComponents.AddOrUpdate(component3);
            context.DrinkComponents.AddOrUpdate(component4);
            context.DrinkComponents.AddOrUpdate(component5);
            context.DrinkComponents.AddOrUpdate(component6);
            context.DrinkComponents.AddOrUpdate(component7);

            context.DrinkRecipes.AddOrUpdate(recipe1);
            context.DrinkRecipes.AddOrUpdate(recipe2);

            context.Orders.AddOrUpdate(order1);

            context.BasketContents.AddOrUpdate(contents1);
            context.BasketContents.AddOrUpdate(contents2);
            context.BasketContents.AddOrUpdate(contents3);
            //  This method will be called after migrating to the latest version.

            //  You can use the DbSet<T>.AddOrUpdate() helper extension method
            //  to avoid creating duplicate seed data. E.g.
            //
            //    context.People.AddOrUpdate(
            //      p => p.FullName,
            //      new Person { FullName = "Andrew Peters" },
            //      new Person { FullName = "Brice Lambson" },
            //      new Person { FullName = "Rowan Miller" }
            //    );
            //
        }