Make recyclers great again (#6653)
Co-authored-by: metalgearsloth <metalgearsloth@gmail.com>
@@ -3,6 +3,8 @@ using System.Collections.Generic;
|
||||
using Content.Server.MachineLinking.Events;
|
||||
using Content.Server.MachineLinking.Models;
|
||||
using Content.Server.Power.Components;
|
||||
using Content.Server.Recycling;
|
||||
using Content.Server.Recycling.Components;
|
||||
using Content.Server.Stunnable;
|
||||
using Content.Shared.Conveyor;
|
||||
using Content.Shared.Item;
|
||||
@@ -20,6 +22,7 @@ namespace Content.Server.Conveyor
|
||||
{
|
||||
public sealed class ConveyorSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private RecyclerSystem _recycler = default!;
|
||||
[Dependency] private StunSystem _stunSystem = default!;
|
||||
|
||||
public override void Initialize()
|
||||
@@ -87,6 +90,15 @@ namespace Content.Server.Conveyor
|
||||
TwoWayLeverSignal.Right => ConveyorState.Forward,
|
||||
_ => ConveyorState.Off
|
||||
};
|
||||
|
||||
if (TryComp<RecyclerComponent>(component.Owner, out var recycler))
|
||||
{
|
||||
if (component.State != ConveyorState.Off)
|
||||
_recycler.EnableRecycler(recycler);
|
||||
else
|
||||
_recycler.DisableRecycler(recycler);
|
||||
}
|
||||
|
||||
UpdateAppearance(component);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,13 +1,8 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Content.Server.Conveyor;
|
||||
using Content.Shared.Conveyor;
|
||||
using Content.Shared.Movement.Components;
|
||||
using Robust.Shared.Containers;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.IoC;
|
||||
using Robust.Shared.Map;
|
||||
using Robust.Shared.Maths;
|
||||
using Robust.Shared.Physics;
|
||||
using Robust.Shared.Physics.Controllers;
|
||||
|
||||
|
||||
@@ -1,24 +1,20 @@
|
||||
using System;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.IoC;
|
||||
using Robust.Shared.Serialization.Manager.Attributes;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
|
||||
|
||||
namespace Content.Server.Recycling.Components
|
||||
{
|
||||
[RegisterComponent]
|
||||
[RegisterComponent, Friend(typeof(RecyclerSystem))]
|
||||
public sealed class RecyclableComponent : Component
|
||||
{
|
||||
[Dependency] private readonly IEntityManager _entMan = default!;
|
||||
|
||||
/// <summary>
|
||||
/// The prototype that will be spawned on recycle.
|
||||
/// </summary>
|
||||
[DataField("prototype")] private string? _prototype;
|
||||
[DataField("prototype", customTypeSerializer:typeof(PrototypeIdSerializer<EntityPrototype>))] public string? Prototype;
|
||||
|
||||
/// <summary>
|
||||
/// The amount of things that will be spawned on recycle.
|
||||
/// </summary>
|
||||
[DataField("amount")] private int _amount = 1;
|
||||
[DataField("amount")] public int Amount = 1;
|
||||
|
||||
/// <summary>
|
||||
/// Whether this is "safe" to recycle or not.
|
||||
@@ -26,19 +22,5 @@ namespace Content.Server.Recycling.Components
|
||||
/// </summary>
|
||||
[DataField("safe")]
|
||||
public bool Safe { get; set; } = true;
|
||||
|
||||
public void Recycle(float efficiency = 1f)
|
||||
{
|
||||
if(!string.IsNullOrEmpty(_prototype))
|
||||
{
|
||||
for (var i = 0; i < Math.Max(_amount * efficiency, 1); i++)
|
||||
{
|
||||
_entMan.SpawnEntity(_prototype, _entMan.GetComponent<TransformComponent>(Owner).Coordinates);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_entMan.QueueDeleteEntity(Owner);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,13 +6,8 @@ using Content.Server.Popups;
|
||||
using Content.Shared.Body.Components;
|
||||
using Content.Shared.Popups;
|
||||
using Content.Shared.Recycling;
|
||||
using Content.Shared.Sound;
|
||||
using Robust.Server.GameObjects;
|
||||
using Robust.Shared.Analyzers;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.IoC;
|
||||
using Robust.Shared.Localization;
|
||||
using Robust.Shared.Serialization.Manager.Attributes;
|
||||
using Robust.Shared.ViewVariables;
|
||||
|
||||
namespace Content.Server.Recycling.Components
|
||||
{
|
||||
@@ -23,6 +18,10 @@ namespace Content.Server.Recycling.Components
|
||||
{
|
||||
[Dependency] private readonly IEntityManager _entMan = default!;
|
||||
|
||||
[ViewVariables]
|
||||
[DataField("enabled")]
|
||||
public bool Enabled = true;
|
||||
|
||||
/// <summary>
|
||||
/// Whether or not sentient beings will be recycled
|
||||
/// </summary>
|
||||
@@ -47,13 +46,15 @@ namespace Content.Server.Recycling.Components
|
||||
|
||||
SuicideKind ISuicideAct.Suicide(EntityUid victim, IChatManager chat)
|
||||
{
|
||||
if (_entMan.TryGetComponent(victim, out ActorComponent? actor) && actor.PlayerSession.ContentData()?.Mind is {} mind)
|
||||
if (_entMan.TryGetComponent(victim, out ActorComponent? actor) &&
|
||||
actor.PlayerSession.ContentData()?.Mind is { } mind)
|
||||
{
|
||||
EntitySystem.Get<GameTicker>().OnGhostAttempt(mind, false);
|
||||
mind.OwnedEntity?.PopupMessage(Loc.GetString("recycler-component-suicide-message"));
|
||||
}
|
||||
|
||||
victim.PopupMessageOtherClients(Loc.GetString("recycler-component-suicide-message-others", ("victim",victim)));
|
||||
victim.PopupMessageOtherClients(Loc.GetString("recycler-component-suicide-message-others",
|
||||
("victim", victim)));
|
||||
|
||||
if (_entMan.TryGetComponent<SharedBodyComponent?>(victim, out var body))
|
||||
{
|
||||
@@ -61,8 +62,16 @@ namespace Content.Server.Recycling.Components
|
||||
}
|
||||
|
||||
EntitySystem.Get<RecyclerSystem>().Bloodstain(this);
|
||||
|
||||
return SuicideKind.Bloodloss;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Default sound to play when recycling
|
||||
/// </summary>
|
||||
[ViewVariables(VVAccess.ReadWrite)] [DataField("sound")]
|
||||
public SoundSpecifier? Sound = new SoundPathSpecifier("/Audio/Effects/saw.ogg");
|
||||
|
||||
// Ratelimit sounds to avoid spam
|
||||
public TimeSpan LastSound;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,52 +1,93 @@
|
||||
using Content.Server.Audio;
|
||||
using Content.Server.Power.Components;
|
||||
using Content.Server.Recycling.Components;
|
||||
using Content.Shared.Audio;
|
||||
using Content.Shared.Body.Components;
|
||||
using Content.Shared.Recycling;
|
||||
using Content.Shared.Emag.Systems;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.IoC;
|
||||
using Content.Shared.Recycling;
|
||||
using Content.Shared.Tag;
|
||||
using Robust.Shared.Audio;
|
||||
using Robust.Shared.Physics.Dynamics;
|
||||
using Robust.Shared.Player;
|
||||
using Robust.Shared.Timing;
|
||||
|
||||
namespace Content.Server.Recycling
|
||||
{
|
||||
internal sealed class RecyclerSystem : EntitySystem
|
||||
public sealed class RecyclerSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly IGameTiming _timing = default!;
|
||||
[Dependency] private readonly AmbientSoundSystem _ambience = default!;
|
||||
[Dependency] private readonly TagSystem _tags = default!;
|
||||
|
||||
private const float RecyclerSoundCooldown = 0.8f;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
SubscribeLocalEvent<RecyclerComponent, StartCollideEvent>(HandleCollide);
|
||||
SubscribeLocalEvent<RecyclerComponent, StartCollideEvent>(OnCollide);
|
||||
SubscribeLocalEvent<RecyclerComponent, GotEmaggedEvent>(OnEmagged);
|
||||
}
|
||||
|
||||
private void HandleCollide(EntityUid uid, RecyclerComponent component, StartCollideEvent args)
|
||||
public void EnableRecycler(RecyclerComponent component)
|
||||
{
|
||||
if (component.Enabled) return;
|
||||
|
||||
component.Enabled = true;
|
||||
_ambience.SetAmbience(component.Owner, true);
|
||||
}
|
||||
|
||||
public void DisableRecycler(RecyclerComponent component)
|
||||
{
|
||||
if (!component.Enabled) return;
|
||||
|
||||
component.Enabled = false;
|
||||
_ambience.SetAmbience(component.Owner, false);
|
||||
}
|
||||
|
||||
private void OnCollide(EntityUid uid, RecyclerComponent component, StartCollideEvent args)
|
||||
{
|
||||
if (component.Enabled && args.OurFixture.ID != "brrt") return;
|
||||
|
||||
Recycle(component, args.OtherFixture.Body.Owner);
|
||||
}
|
||||
|
||||
private void Recycle(RecyclerComponent component, EntityUid entity)
|
||||
{
|
||||
// TODO: Prevent collision with recycled items
|
||||
RecyclableComponent? recyclable = null;
|
||||
|
||||
// Can only recycle things that are recyclable... And also check the safety of the thing to recycle.
|
||||
if (!EntityManager.TryGetComponent(entity, out RecyclableComponent? recyclable) || !recyclable.Safe && component.Safe) return;
|
||||
if (!_tags.HasTag(entity, "Recyclable") &&
|
||||
(!TryComp(entity, out recyclable) || !recyclable.Safe && component.Safe))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: Prevent collision with recycled items
|
||||
|
||||
// Mobs are a special case!
|
||||
if (CanGib(component, entity))
|
||||
{
|
||||
EntityManager.GetComponent<SharedBodyComponent>(entity).Gib(true);
|
||||
Comp<SharedBodyComponent>(entity).Gib(true);
|
||||
Bloodstain(component);
|
||||
return;
|
||||
}
|
||||
|
||||
recyclable.Recycle(component.Efficiency);
|
||||
if (recyclable == null)
|
||||
QueueDel(entity);
|
||||
else
|
||||
Recycle(recyclable, component.Efficiency);
|
||||
|
||||
if (component.Sound != null && (_timing.CurTime - component.LastSound).TotalSeconds > RecyclerSoundCooldown)
|
||||
{
|
||||
SoundSystem.Play(Filter.Pvs(component.Owner, entityManager: EntityManager), component.Sound.GetSound(), component.Owner, AudioHelpers.WithVariation(0.01f).WithVolume(-3));
|
||||
component.LastSound = _timing.CurTime;
|
||||
}
|
||||
}
|
||||
|
||||
private bool CanGib(RecyclerComponent component, EntityUid entity)
|
||||
{
|
||||
// We suppose this entity has a Recyclable component.
|
||||
return EntityManager.HasComponent<SharedBodyComponent>(entity) && !component.Safe &&
|
||||
EntityManager.TryGetComponent(component.Owner, out ApcPowerReceiverComponent? receiver) && receiver.Powered;
|
||||
// TODO: Power needs a helper for this jeez
|
||||
return HasComp<SharedBodyComponent>(entity) && !component.Safe &&
|
||||
TryComp<ApcPowerReceiverComponent>(component.Owner, out var receiver) && receiver.Powered;
|
||||
}
|
||||
|
||||
public void Bloodstain(RecyclerComponent component)
|
||||
@@ -57,13 +98,26 @@ namespace Content.Server.Recycling
|
||||
}
|
||||
}
|
||||
|
||||
private void Recycle(RecyclableComponent component, float efficiency = 1f)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(component.Prototype))
|
||||
{
|
||||
var xform = Transform(component.Owner);
|
||||
|
||||
for (var i = 0; i < Math.Max(component.Amount * efficiency, 1); i++)
|
||||
{
|
||||
Spawn(component.Prototype, xform.Coordinates);
|
||||
}
|
||||
}
|
||||
|
||||
QueueDel(component.Owner);
|
||||
}
|
||||
|
||||
private void OnEmagged(EntityUid uid, RecyclerComponent component, GotEmaggedEvent args)
|
||||
{
|
||||
if (component.Safe == true)
|
||||
{
|
||||
if (!component.Safe) return;
|
||||
component.Safe = false;
|
||||
args.Handled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BIN
Resources/Audio/Ambience/Objects/circular_saw.ogg
Normal file
1
Resources/Audio/Ambience/Objects/license.txt
Normal file
@@ -0,0 +1 @@
|
||||
circular_saw.ogg - https://freesound.org/people/derjuli/sounds/448133/ and clipped - CC0-1.0
|
||||
@@ -1,20 +1,23 @@
|
||||
hit_kick.ogg is made by Taira Komori
|
||||
(https://taira-komori.jpn.org/freesounden.html)
|
||||
|
||||
smoke.ogg taken from https://github.com/tgstation/tgstation/blob/a5d362ce84e4f0c61026236d5ec84d3c81553664/sound/effects/smoke.ogg
|
||||
|
||||
adminhelp.ogg taken from https://github.com/tgstation/tgstation/blob/d775e1ac804eb9d0259573f5f29a18d320c97ef3/sound/effects/adminhelp.ogg
|
||||
adminhelp.ogg taken from https://github.com/tgstation/tgstation/blob/d775e1ac804eb9d0259573f5f29a18d320c97ef3/sound/effects/adminhelp.ogg
|
||||
(available in master, therefore see master license: "All assets including icons and sound are under a Creative Commons 3.0 BY-SA license unless otherwise indicated.")
|
||||
"Changed the adminhelpsound to some creative commons sound I pinched. Until somebody can get a better one. I'm sick of MAAAAAAAAOOOOOOW."
|
||||
Actual source is https://freesound.org/people/martian/sounds/19261/ (CC0)
|
||||
The sound had been reversed and the volume altered.
|
||||
|
||||
voteding.ogg taken from "Bike, Bell Ding, Single, 01-01.wav" by InspectorJ (www.jshaw.co.uk) of Freesound.org at https://freesound.org/people/InspectorJ/sounds/484344/ under CC BY 3.0. The volume has been reduced.
|
||||
hit_kick.ogg is made by Taira Komori
|
||||
(https://taira-komori.jpn.org/freesounden.html)
|
||||
|
||||
fire.ogg taken and edited from https://freesound.org/people/raremess/sounds/222557/
|
||||
|
||||
holy.ogg taken from https://freesound.org/people/random_intruder/sounds/392172/ and edited
|
||||
|
||||
poster_broken.ogg taken from https://github.com/tgstation/tgstation/blob/2834383245d2129a106acef3afd17b81e1e64777/sound/items/poster_ripped.ogg
|
||||
|
||||
poster_being_set.ogg taken from https://github.com/tgstation/tgstation/blob/2834383245d2129a106acef3afd17b81e1e64777/sound/items/poster_ripped.ogg
|
||||
|
||||
fire.ogg taken and edited from https://freesound.org/people/raremess/sounds/222557/
|
||||
saw.ogg taken from https://freesound.org/people/domiscz/sounds/461728/ and clipped - CC0-1.0
|
||||
*It's actually an angle grinder
|
||||
|
||||
holy.ogg taken from https://freesound.org/people/random_intruder/sounds/392172/ and edited
|
||||
smoke.ogg taken from https://github.com/tgstation/tgstation/blob/a5d362ce84e4f0c61026236d5ec84d3c81553664/sound/effects/smoke.ogg
|
||||
|
||||
voteding.ogg taken from "Bike, Bell Ding, Single, 01-01.wav" by InspectorJ (www.jshaw.co.uk) of Freesound.org at https://freesound.org/people/InspectorJ/sounds/484344/ under CC BY 3.0. The volume has been reduced.
|
||||
BIN
Resources/Audio/Effects/saw.ogg
Normal file
@@ -2104,6 +2104,7 @@
|
||||
sprite: Objects/Consumable/Drinks/ramen.rsi
|
||||
- type: Tag
|
||||
tags:
|
||||
- Recyclable
|
||||
- Trash
|
||||
- type: Recyclable
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
stateOpen: icon_open
|
||||
- type: Tag
|
||||
tags:
|
||||
- Recyclable
|
||||
- Trash
|
||||
- type: ItemCooldown
|
||||
- type: Recyclable
|
||||
@@ -56,6 +57,7 @@
|
||||
- type: Tag
|
||||
tags:
|
||||
- Cola
|
||||
- Recyclable
|
||||
- Trash
|
||||
- type: Sprite
|
||||
sprite: Objects/Consumable/Drinks/cola.rsi
|
||||
|
||||
@@ -52,6 +52,7 @@
|
||||
acts: [ "Destruction" ]
|
||||
- type: Tag
|
||||
tags:
|
||||
- Recyclable
|
||||
- Trash
|
||||
- type: Recyclable
|
||||
|
||||
|
||||
@@ -55,6 +55,7 @@
|
||||
netsync: false
|
||||
- type: Tag
|
||||
tags:
|
||||
- Recyclable
|
||||
- Trash
|
||||
- type: Recyclable
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
abstract: true
|
||||
components:
|
||||
- type: Food
|
||||
- type: Recyclable
|
||||
- type: Sprite
|
||||
netsync: false
|
||||
|
||||
|
||||
@@ -195,6 +195,7 @@
|
||||
- SmallImpassable
|
||||
- type: Tag
|
||||
tags:
|
||||
- Recyclable
|
||||
- Trash
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
|
||||
@@ -208,6 +208,7 @@
|
||||
HeldPrefix: packet
|
||||
- type: Tag
|
||||
tags:
|
||||
- Recyclable
|
||||
- Trash
|
||||
- type: Recyclable
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
openIcon: open
|
||||
- type: Tag
|
||||
tags:
|
||||
- Recyclable
|
||||
- Trash
|
||||
- type: Recyclable
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
- type: Tag
|
||||
tags:
|
||||
- Cigarette
|
||||
- Recyclable
|
||||
- Trash
|
||||
- type: Recyclable
|
||||
- type: Clothing
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
- type: Tag
|
||||
tags:
|
||||
- Cigarette
|
||||
- Recyclable
|
||||
- Trash
|
||||
- type: Recyclable
|
||||
- type: Clothing
|
||||
@@ -42,6 +43,7 @@
|
||||
- type: Tag
|
||||
tags:
|
||||
- Cigarette
|
||||
- Recyclable
|
||||
- Trash
|
||||
- type: Recyclable
|
||||
- type: Clothing
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
- type: Tag
|
||||
tags:
|
||||
- CigPack
|
||||
- Recyclable
|
||||
- Trash
|
||||
- type: Recyclable
|
||||
- type: Storage
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
size: 2
|
||||
- type: Tag
|
||||
tags:
|
||||
- Recyclable
|
||||
- RollingPaper
|
||||
- Trash
|
||||
- type: Recyclable
|
||||
@@ -80,5 +81,6 @@
|
||||
- type: Tag
|
||||
tags:
|
||||
- CigFilter
|
||||
- Recyclable
|
||||
- Trash
|
||||
- type: Recyclable
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
- type: BurnStateVisualizer
|
||||
- type: Tag
|
||||
tags:
|
||||
- Recyclable
|
||||
- Trash
|
||||
- type: Recyclable
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
tags:
|
||||
- Write
|
||||
- Crayon
|
||||
- Recyclable
|
||||
- Trash
|
||||
- type: Recyclable
|
||||
- type: UserInterface
|
||||
@@ -38,6 +39,7 @@
|
||||
- Write
|
||||
- Crayon
|
||||
- CrayonWhite
|
||||
- Recyclable
|
||||
- Trash
|
||||
|
||||
- type: entity
|
||||
@@ -60,6 +62,7 @@
|
||||
- Write
|
||||
- Crayon
|
||||
- CrayonWhite
|
||||
- Recyclable
|
||||
- Trash
|
||||
|
||||
- type: entity
|
||||
@@ -82,6 +85,7 @@
|
||||
- Write
|
||||
- Crayon
|
||||
- CrayonBlack
|
||||
- Recyclable
|
||||
- Trash
|
||||
|
||||
- type: entity
|
||||
@@ -104,6 +108,7 @@
|
||||
- Write
|
||||
- Crayon
|
||||
- CrayonRed
|
||||
- Recyclable
|
||||
- Trash
|
||||
|
||||
- type: entity
|
||||
@@ -126,6 +131,7 @@
|
||||
- Write
|
||||
- Crayon
|
||||
- CrayonOrange
|
||||
- Recyclable
|
||||
- Trash
|
||||
|
||||
- type: entity
|
||||
@@ -148,6 +154,7 @@
|
||||
- Write
|
||||
- Crayon
|
||||
- CrayonYellow
|
||||
- Recyclable
|
||||
- Trash
|
||||
|
||||
- type: entity
|
||||
@@ -170,6 +177,7 @@
|
||||
- Write
|
||||
- Crayon
|
||||
- CrayonGreen
|
||||
- Recyclable
|
||||
- Trash
|
||||
|
||||
- type: entity
|
||||
@@ -192,6 +200,7 @@
|
||||
- Write
|
||||
- Crayon
|
||||
- CrayonBlue
|
||||
- Recyclable
|
||||
- Trash
|
||||
|
||||
- type: entity
|
||||
@@ -214,6 +223,7 @@
|
||||
- Write
|
||||
- Crayon
|
||||
- CrayonPurple
|
||||
- Recyclable
|
||||
- Trash
|
||||
|
||||
- type: entity
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
Slash: 2
|
||||
- type: Tag
|
||||
tags:
|
||||
- Recyclable
|
||||
- Trash
|
||||
- type: Recyclable
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
Slash: 2
|
||||
- type: Tag
|
||||
tags:
|
||||
- Recyclable
|
||||
- Trash
|
||||
- type: Recyclable
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
sprite: Objects/Misc/utensils.rsi
|
||||
- type: Tag
|
||||
tags:
|
||||
- Recyclable
|
||||
- Trash
|
||||
- type: Recyclable
|
||||
|
||||
|
||||
@@ -54,6 +54,7 @@
|
||||
- type: LightBulbVisualizer
|
||||
- type: Tag
|
||||
tags:
|
||||
- Recyclable
|
||||
- Trash
|
||||
- type: Recyclable
|
||||
|
||||
|
||||
@@ -51,6 +51,7 @@
|
||||
emptySpriteName: medipen_empty
|
||||
- type: Tag
|
||||
tags:
|
||||
- Recyclable
|
||||
- Trash
|
||||
- type: Recyclable
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
- type: Tag
|
||||
tags:
|
||||
- Bottle
|
||||
- Recyclable
|
||||
- Trash
|
||||
- type: Recyclable
|
||||
- type: Sprite
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
- type: Tag
|
||||
tags:
|
||||
- Flare
|
||||
- Recyclable
|
||||
- Trash
|
||||
- type: Recyclable
|
||||
- type: ExpendableLight
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
components:
|
||||
- type: Tag
|
||||
tags:
|
||||
- Recyclable
|
||||
- Trash
|
||||
- type: Recyclable
|
||||
- type: ExpendableLight
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
- type: Tag
|
||||
tags:
|
||||
- Matchstick
|
||||
- Recyclable
|
||||
- Trash
|
||||
- type: Recyclable
|
||||
- type: Sprite
|
||||
@@ -80,5 +81,6 @@
|
||||
- matchbox3
|
||||
- type: Tag
|
||||
tags:
|
||||
- Recyclable
|
||||
- Trash
|
||||
- type: Recyclable
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
- type: Tag
|
||||
tags:
|
||||
- Cartridge
|
||||
- Recyclable
|
||||
- type: Item
|
||||
size: 1
|
||||
- type: Recyclable
|
||||
|
||||
@@ -4,22 +4,40 @@
|
||||
name: recycler
|
||||
description: A large crushing machine used to recycle small items inefficiently. There are lights on the side.
|
||||
components:
|
||||
- type: AmbientSound
|
||||
enabled: false
|
||||
volume: -8
|
||||
range: 5
|
||||
sound:
|
||||
# TODO: https://freesound.org/people/derjuli/sounds/448133/ CC-NC-
|
||||
path: /Audio/Ambience/Objects/circular_saw.ogg
|
||||
- type: Physics
|
||||
- type: Fixtures
|
||||
fixtures:
|
||||
- shape:
|
||||
!type:PhysShapeAabb
|
||||
bounds: "-0.49,-0.49,0.49,0.49"
|
||||
bounds: "-0.2,-0.2,0.2,0.2"
|
||||
id: brrt
|
||||
hard: false
|
||||
layer:
|
||||
- Opaque
|
||||
- Impassable
|
||||
- MobImpassable
|
||||
- VaultImpassable
|
||||
- shape:
|
||||
!type:PhysShapeAabb
|
||||
bounds: "-0.49,-0.49,0.49,0.49"
|
||||
id: collision
|
||||
hard: true
|
||||
mask:
|
||||
- Impassable
|
||||
layer:
|
||||
- Opaque
|
||||
- type: Transform
|
||||
anchored: true
|
||||
- type: Sprite
|
||||
netsync: false
|
||||
drawdepth: Doors
|
||||
sprite: Structures/Machines/recycling.rsi
|
||||
layers:
|
||||
- state: grinder-o0
|
||||
|
||||
@@ -240,6 +240,10 @@
|
||||
- type: Tag
|
||||
id: Powerdrill
|
||||
|
||||
# Give this to something that doesn't need any special recycler behavior and just needs deleting.
|
||||
- type: Tag
|
||||
id: Recyclable
|
||||
|
||||
- type: Tag
|
||||
id: RCDDeconstructWhitelist
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 16 KiB |