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:
14
Content.Shared/ContainerHeld/ContainerHeldComponent.cs
Normal file
14
Content.Shared/ContainerHeld/ContainerHeldComponent.cs
Normal 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;
|
||||||
|
}
|
||||||
43
Content.Shared/ContainerHeld/ContainerHeldSystem.cs
Normal file
43
Content.Shared/ContainerHeld/ContainerHeldSystem.cs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
42
Resources/Prototypes/Entities/Objects/Fun/candy_bucket.yml
Normal file
42
Resources/Prototypes/Entities/Objects/Fun/candy_bucket.yml
Normal 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 |
BIN
Resources/Textures/Objects/Fun/candy_bucket.rsi/empty_icon.png
Normal file
BIN
Resources/Textures/Objects/Fun/candy_bucket.rsi/empty_icon.png
Normal file
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 |
BIN
Resources/Textures/Objects/Fun/candy_bucket.rsi/full_icon.png
Normal file
BIN
Resources/Textures/Objects/Fun/candy_bucket.rsi/full_icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 524 B |
33
Resources/Textures/Objects/Fun/candy_bucket.rsi/meta.json
Normal file
33
Resources/Textures/Objects/Fun/candy_bucket.rsi/meta.json
Normal 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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user