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