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); }
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); }
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))); } }
/// <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); }
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)); } }
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); }
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)); } }
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); } }
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; }
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" } // ); // }