From: forkeyboards <91704530+forkeyboards@users.noreply.github.com>
Date: Sat, 13 May 2023 03:11:35 +0000 (-0400)
Subject: White Cane for Blind People (#16318)
X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=e72db8006087027995b7da5f30609d8b86ae8b39;p=space-station-14.git
White Cane for Blind People (#16318)
---
diff --git a/Content.Server/Traits/TraitSystem.cs b/Content.Server/Traits/TraitSystem.cs
index a153990afa..114c0ea914 100644
--- a/Content.Server/Traits/TraitSystem.cs
+++ b/Content.Server/Traits/TraitSystem.cs
@@ -1,4 +1,6 @@
using Content.Server.GameTicking;
+using Content.Shared.Hands.Components;
+using Content.Shared.Hands.EntitySystems;
using Content.Shared.Traits;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.Manager;
@@ -9,6 +11,7 @@ public sealed class TraitSystem : EntitySystem
{
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly ISerializationManager _serializationManager = default!;
+ [Dependency] private readonly SharedHandsSystem _sharedHandsSystem = default!;
public override void Initialize()
{
@@ -41,6 +44,18 @@ public sealed class TraitSystem : EntitySystem
comp.Owner = args.Mob;
EntityManager.AddComponent(args.Mob, comp);
}
+
+ // Add item required by the trait
+ if (traitPrototype.TraitGear != null)
+ {
+ if (!TryComp(args.Mob, out HandsComponent? handsComponent))
+ continue;
+
+ var coords = Transform(args.Mob).Coordinates;
+ var inhandEntity = EntityManager.SpawnEntity(traitPrototype.TraitGear, coords);
+ _sharedHandsSystem.TryPickup(args.Mob, inhandEntity, checkActionBlocker: false,
+ handsComp: handsComponent);
+ }
}
}
}
diff --git a/Content.Shared/Traits/TraitPrototype.cs b/Content.Shared/Traits/TraitPrototype.cs
index 74f7d5aaaa..10645d0eda 100644
--- a/Content.Shared/Traits/TraitPrototype.cs
+++ b/Content.Shared/Traits/TraitPrototype.cs
@@ -1,5 +1,6 @@
using Content.Shared.Whitelist;
using Robust.Shared.Prototypes;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
using static Robust.Shared.Prototypes.EntityPrototype; // don't worry about it
namespace Content.Shared.Traits
@@ -43,5 +44,11 @@ namespace Content.Shared.Traits
///
[DataField("components")]
public ComponentRegistry Components { get; } = default!;
+
+ ///
+ /// Gear that is given to the player, when they pick this trait.
+ ///
+ [DataField("traitGear", required: false, customTypeSerializer:typeof(PrototypeIdSerializer))]
+ public string TraitGear = string.Empty;
}
}
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/white_cane.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/white_cane.yml
new file mode 100644
index 0000000000..f38c714c65
--- /dev/null
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/white_cane.yml
@@ -0,0 +1,24 @@
+- type: entity
+ parent: BaseItem
+ id: WhiteCane
+ name: white cane
+ description: This isn't for you. It's for the people who can't figure out you're blind when you ask if cargo is the bar.
+ components:
+ - type: Sprite
+ sprite: Objects/Weapons/Melee/white_cane.rsi
+ state: icon
+ - type: Item
+ size: 15
+ sprite: Objects/Weapons/Melee/white_cane.rsi
+ - type: MeleeWeapon
+ damage:
+ types:
+ Blunt: 5
+ - type: StaminaDamageOnHit
+ damage: 5
+ - type: Wieldable
+ - type: IncreaseDamageOnWield
+ damage:
+ types:
+ Blunt: 3
+
\ No newline at end of file
diff --git a/Resources/Prototypes/Traits/disabilities.yml b/Resources/Prototypes/Traits/disabilities.yml
index c6deeff61f..d6de5161a2 100644
--- a/Resources/Prototypes/Traits/disabilities.yml
+++ b/Resources/Prototypes/Traits/disabilities.yml
@@ -2,6 +2,7 @@
id: Blindness
name: trait-blindness-name
description: trait-blindness-desc
+ traitGear: WhiteCane
whitelist:
components:
- Blindable
diff --git a/Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/icon.png b/Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/icon.png
new file mode 100644
index 0000000000..cb82a60e0a
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/inhand-left.png b/Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/inhand-left.png
new file mode 100644
index 0000000000..250bed1ebe
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/inhand-left.png differ
diff --git a/Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/inhand-right.png
new file mode 100644
index 0000000000..eab3d5741c
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/inhand-right.png differ
diff --git a/Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/meta.json b/Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/meta.json
new file mode 100644
index 0000000000..40192e97b5
--- /dev/null
+++ b/Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/meta.json
@@ -0,0 +1,30 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-4.0",
+ "copyright": "Sprited by Tristan Thomas",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ },
+ {
+ "name": "wielded-inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "wielded-inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/wielded-inhand-left.png
new file mode 100644
index 0000000000..8ec2023a77
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/wielded-inhand-left.png differ
diff --git a/Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/wielded-inhand-right.png
new file mode 100644
index 0000000000..08d05d81f7
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/wielded-inhand-right.png differ