]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
White Cane for Blind People (#16318)
authorforkeyboards <91704530+forkeyboards@users.noreply.github.com>
Sat, 13 May 2023 03:11:35 +0000 (23:11 -0400)
committerGitHub <noreply@github.com>
Sat, 13 May 2023 03:11:35 +0000 (13:11 +1000)
Content.Server/Traits/TraitSystem.cs
Content.Shared/Traits/TraitPrototype.cs
Resources/Prototypes/Entities/Objects/Weapons/Melee/white_cane.yml [new file with mode: 0644]
Resources/Prototypes/Traits/disabilities.yml
Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/icon.png [new file with mode: 0644]
Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/inhand-left.png [new file with mode: 0644]
Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/inhand-right.png [new file with mode: 0644]
Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/meta.json [new file with mode: 0644]
Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/wielded-inhand-left.png [new file with mode: 0644]
Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/wielded-inhand-right.png [new file with mode: 0644]

index a153990afa39363cd1ec8d72a5c339d7541cade6..114c0ea914e0784370f2befff8433186acbb31d8 100644 (file)
@@ -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);
+            }
         }
     }
 }
index 74f7d5aaaa982f2829bd576ea7e7bbba9c40ff23..10645d0eda3b2f55ccef2ac80e552dd499cbc5a0 100644 (file)
@@ -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
         /// </summary>
         [DataField("components")]
         public ComponentRegistry Components { get; } = default!;
+
+        /// <summary>
+        ///     Gear that is given to the player, when they pick this trait.
+        /// </summary>
+        [DataField("traitGear", required: false, customTypeSerializer:typeof(PrototypeIdSerializer<EntityPrototype>))]
+        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 (file)
index 0000000..f38c714
--- /dev/null
@@ -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
index c6deeff61f2723958263f6cdd6abdeec180811aa..d6de5161a2f112686d063ad97d8403f38970b925 100644 (file)
@@ -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 (file)
index 0000000..cb82a60
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 (file)
index 0000000..250bed1
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 (file)
index 0000000..eab3d57
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 (file)
index 0000000..40192e9
--- /dev/null
@@ -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 (file)
index 0000000..8ec2023
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 (file)
index 0000000..08d05d8
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Melee/white_cane.rsi/wielded-inhand-right.png differ