Candy Bucket for Halloween (#21257)

* Added candy bucket and component to update appearance of held containers akin to it

* cleanup newline

* newline was load-bearing

* moved component to Shared, cleanup

* newline is spooky

* You build and run without errors, stop pretending otherwise

* Updated for new storage system in master branch
This commit is contained in:
Bixkitts
2023-10-31 16:54:41 +01:00
committed by GitHub
parent 77db8b166a
commit 74f1098008
10 changed files with 132 additions and 0 deletions

View File

@@ -0,0 +1,14 @@
namespace Content.Shared.ContainerHeld;
[RegisterComponent]
public sealed partial class ContainerHeldComponent: Component
{
/// <summary>
/// The amount of weight needed to be in the container
/// in order for it to toggle it's appearance
/// to ToggleVisuals.Toggled = true, and
/// SetHeldPrefix() to "full" instead of "empty".
/// </summary>
[DataField("threshold")]
public int Threshold { get; private set; } = 1;
}

View File

@@ -0,0 +1,43 @@
using Robust.Shared.Containers;
using Content.Shared.Item;
using Content.Shared.Storage;
using Content.Shared.Storage.EntitySystems;
using Content.Shared.Toggleable;
namespace Content.Shared.ContainerHeld;
public sealed class ContainerHeldSystem : EntitySystem
{
[Dependency] private readonly SharedItemSystem _item = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly SharedStorageSystem _storage = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<ContainerHeldComponent, EntInsertedIntoContainerMessage>(OnContainerModified);
SubscribeLocalEvent<ContainerHeldComponent, EntRemovedFromContainerMessage>(OnContainerModified);
}
private void OnContainerModified(EntityUid uid, ContainerHeldComponent comp, ContainerModifiedMessage args)
{
if (!(TryComp<StorageComponent>(uid, out var storage)
&& TryComp<AppearanceComponent>(uid, out var appearance)
&& TryComp<ItemComponent>(uid, out var item)))
{
return;
}
if (_storage.GetCumulativeItemSizes(uid, storage) >= comp.Threshold)
{
_item.SetHeldPrefix(uid, "full", item);
_appearance.SetData(uid, ToggleVisuals.Toggled, true, appearance);
}
else
{
_item.SetHeldPrefix(uid, "empty", item);
_appearance.SetData(uid, ToggleVisuals.Toggled, false, appearance);
}
}
}

View File

@@ -0,0 +1,42 @@
- type: entity
name: "candy bucket"
parent: BaseItem
id: CandyBucket
description: A festive bucket for all your treats.
components:
- type: Sprite
sprite: Objects/Fun/candy_bucket.rsi
layers:
- state: empty_icon
map: [ "enum.ToggleVisuals.Layer" ]
- type: ContainerHeld
threshold: 1
- type: Item
heldPrefix: empty
size: 20
- type: Appearance
- type: GenericVisualizer
visuals:
enum.ToggleVisuals.Toggled:
enum.ToggleVisuals.Layer:
True: {state: full_icon}
False: {state: empty_icon}
- type: Storage
maxItemSize: Small
maxTotalWeight: 10
whitelist:
components:
- Pill
tags:
- FoodSnack
- type: ContainerContainer
containers:
storagebase: !type:Container
ents: []
- type: UserInterface
interfaces:
- key: enum.StorageUiKey.Key
type: StorageBoundUserInterface
# to prevent bag open/honk spam
- type: UseDelay
delay: 0.5

Binary file not shown.

After

Width:  |  Height:  |  Size: 1001 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 992 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 468 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 524 B

View File

@@ -0,0 +1,33 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Made by @ps3moira#9488",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "empty_icon"
},
{
"name": "full_icon"
},
{
"name": "empty-inhand-right",
"directions": 4
},
{
"name": "empty-inhand-left",
"directions": 4
},
{
"name": "full-inhand-right",
"directions": 4
},
{
"name": "full-inhand-left",
"directions": 4
}
]
}