Skip to content

Commit

Permalink
Whistle for security (second try) (space-wizards#23945)
Browse files Browse the repository at this point in the history
* Move Exclamation entity

* Add Whistle Component and Whistle System

* Add BaseWhistle prototype

* Add sound to BaseWhistle

* Add SecurityWhistle prototype

* Add Sprite and Icon to SecurityWhistle

* Add whistleExclamation prototype

* Fix SecurityWhistle prototype

Co-authored-by: lzk <124214523+lzk228@users.noreply.github.com>

* Add whistles to sec vendingMachine

* Revert "Add sound to BaseWhistle"

This reverts commit 0c2eeab.

* Add sounds for BaseWhistle

* Make atributions compact

* Remove unnecessary spaces

* Make WhistleSystem class sealed

* Remove possibility to exclamate one person from WhistleComponent

* Remove delay from WhistleSystem

Increase delay

* Remove unnecessary HashSet

* Try replace Resolve

* Refactor sound emmiting

* Rework spawn of exclamation

* Move WhistleComponent from Server to Shared

* Edit WhistleComponent because of moving

* Move WhistleSystem from Server to Client

* Edit WhistleSystem because of moving

* Add new event

* Add server part of WhistleSystem

* Modify system for prediction

* Add documentation to WhistleComponent

* Revert "Modify system for prediction"

This reverts commit 89abb29.

* Revert "Add server part of WhistleSystem"

This reverts commit ca52ca0.

* Revert "Add new event"

This reverts commit 5ca9694.

* Move system from client to shared

* Modify whistle system because of moving

* Separate checks and action

* Organize file folders according to conventions

* Make component Networked

* Change trigger component for WhistleSystem

* Put indents betwen methods

* Rework WhistleExclamation prototype

* Change variable name

* Add serializer to WhistleComponent

* Rename one variable

* add predict possibility to Shared

* add Client part of prediction

* Add Server part of prediction

* Increase whistle distance

* Prevent spawn for invisible entities

* WhistleComponent now use file-scoped namespace

* Delete unnecessary part from MakeLoudWhistle

* Add Resolve check

* Delete Server and Client part for prediction

* Make system prediction properly

* Change prediction behaviour

* Fix unexpected error occured

* Avoid using obsolete methods

* Add comments

* Update DataField to make it shorter

* Update size for new size system

* Prevent ping for invisible entities for real now

* Avoid triggering unnecessary debug asserts

---------

Co-authored-by: lzk <124214523+lzk228@users.noreply.github.com>
  • Loading branch information
Fahasor and lzk228 authored Jan 12, 2024
1 parent abc5094 commit fa3da1a
Show file tree
Hide file tree
Showing 17 changed files with 195 additions and 22 deletions.
25 changes: 25 additions & 0 deletions Content.Shared/Whistle/WhistleComponent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using Robust.Shared.GameStates;
using Content.Shared.Humanoid;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
using Robust.Shared.Prototypes;

namespace Content.Shared.Whistle;

/// <summary>
/// Spawn attached entity for entities in range with <see cref="HumanoidAppearanceComponent"/>.
/// </summary>
[RegisterComponent, NetworkedComponent]
public sealed partial class WhistleComponent : Component
{
/// <summary>
/// Entity prototype to spawn
/// </summary>
[DataField]
public EntProtoId Effect = "WhistleExclamation";

/// <summary>
/// Range value.
/// </summary>
[DataField]
public float Distance = 0;
}
64 changes: 64 additions & 0 deletions Content.Shared/Whistle/WhistleSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
using Content.Shared.Coordinates;
using Content.Shared.Humanoid;
using Content.Shared.Interaction.Events;
using Content.Shared.Stealth.Components;
using JetBrains.Annotations;
using Robust.Shared.Timing;

namespace Content.Shared.Whistle;

public sealed class WhistleSystem : EntitySystem
{
[Dependency] private readonly EntityLookupSystem _entityLookup = default!;
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly SharedTransformSystem _transform = default!;

public override void Initialize()
{
base.Initialize();

SubscribeLocalEvent<WhistleComponent, UseInHandEvent>(OnUseInHand);
}

private void ExclamateTarget(EntityUid target, WhistleComponent component)
{
SpawnAttachedTo(component.Effect, target.ToCoordinates());
}

public void OnUseInHand(EntityUid uid, WhistleComponent component, UseInHandEvent args)
{
if (!_timing.IsFirstTimePredicted)
return;

TryMakeLoudWhistle(uid, args.User, component);
args.Handled = true;
}

public bool TryMakeLoudWhistle(EntityUid uid, EntityUid owner, WhistleComponent? component = null)
{
if (!Resolve(uid, ref component, false) || component.Distance <= 0)
return false;

MakeLoudWhistle(uid, owner, component);
return true;
}

private void MakeLoudWhistle(EntityUid uid, EntityUid owner, WhistleComponent component)
{
StealthComponent? stealth = null;

foreach (var iterator in
_entityLookup.GetEntitiesInRange<HumanoidAppearanceComponent>(_transform.GetMapCoordinates(uid), component.Distance))
{
//Avoid pinging invisible entities
if (TryComp(iterator, out stealth) && stealth.Enabled)
continue;

//We don't want to ping user of whistle
if (iterator.Owner == owner)
continue;

ExclamateTarget(iterator, component);
}
}
}
11 changes: 11 additions & 0 deletions Resources/Audio/Items/Whistle/attributions.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
- files:
- "whistle_1.ogg"
- "whistle_2.ogg"
- "whistle_3.ogg"
- "whistle_4.ogg"
- "whistle_5.ogg"
- "whistle_6.ogg"
- "whistle_7.ogg"
license: "CC0-1.0"
copyright: "User strongbot on freesound.org. Modified by Fahasor on github"
source: "https://freesound.org/people/strongbot/sounds/568995/"
Binary file added Resources/Audio/Items/Whistle/whistle_1.ogg
Binary file not shown.
Binary file added Resources/Audio/Items/Whistle/whistle_2.ogg
Binary file not shown.
Binary file added Resources/Audio/Items/Whistle/whistle_3.ogg
Binary file not shown.
Binary file added Resources/Audio/Items/Whistle/whistle_4.ogg
Binary file not shown.
Binary file added Resources/Audio/Items/Whistle/whistle_5.ogg
Binary file not shown.
Binary file added Resources/Audio/Items/Whistle/whistle_6.ogg
Binary file not shown.
Binary file added Resources/Audio/Items/Whistle/whistle_7.ogg
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
- type: vendingMachineInventory
id: SecTechInventory
startingInventory:
SecurityWhistle: 5
Handcuffs: 8
GrenadeFlashBang: 4
TearGasGrenade: 4
Expand Down
39 changes: 39 additions & 0 deletions Resources/Prototypes/Entities/Effects/exclamation.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
- type: entity
id: Exclamation
name: exclamation
noSpawn: true
save: false
components:
- type: Transform
noRot: true
- type: Sprite
sprite: Structures/Storage/closet.rsi
drawdepth: Effects
noRot: true
layers:
- state: "cardboard_special"
- type: TimedDespawn
lifetime: 1
- type: Tag
tags:
- HideContextMenu


- type: entity
id: WhistleExclamation
name: exclamation
noSpawn: true
components:
- type: Sprite
sprite: Structures/Storage/closet.rsi
state: cardboard_special
drawdepth: Effects
offset: 0, 1
noRot: true
- type: Transform
noRot: true
- type: TimedDespawn
lifetime: 0.8
- type: Tag
tags:
- HideContextMenu
30 changes: 30 additions & 0 deletions Resources/Prototypes/Entities/Objects/Fun/whistles.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
- type: entity
abstract: true
parent: BaseItem
id: BaseWhistle
name: whistle
description: Someone forgot to turn off kettle?
components:
- type: Item
size: Tiny
- type: Clothing
quickEquip: false
slots: neck
- type: UseDelay
delay: 3
- type: EmitSoundOnUse
sound:
collection: BaseWhistle
- type: Whistle
distance: 5

- type: entity
parent: BaseWhistle
id: SecurityWhistle
description: Sound of it make you feel fear.
components:
- type: Sprite
sprite: Objects/Fun/whistle.rsi
state: securityWhistle
- type: Item
sprite: Objects/Fun/whistle.rsi
Original file line number Diff line number Diff line change
Expand Up @@ -107,25 +107,4 @@
- type: EntityStorage
isCollidableWhenOpen: false
openOnMove: false
airtight: false

#Exclamation effect for box opening
- type: entity
id: Exclamation
name: exclamation
noSpawn: true
save: false
components:
- type: Transform
noRot: true
- type: Sprite
sprite: Structures/Storage/closet.rsi
drawdepth: Effects
noRot: true
layers:
- state: "cardboard_special"
- type: TimedDespawn
lifetime: 1
- type: Tag
tags:
- HideContextMenu
airtight: false
10 changes: 10 additions & 0 deletions Resources/Prototypes/SoundCollections/whistle.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
- type: soundCollection
id: BaseWhistle
files:
- /Audio/Items/Whistle/whistle_1.ogg
- /Audio/Items/Whistle/whistle_2.ogg
- /Audio/Items/Whistle/whistle_3.ogg
- /Audio/Items/Whistle/whistle_4.ogg
- /Audio/Items/Whistle/whistle_5.ogg
- /Audio/Items/Whistle/whistle_6.ogg
- /Audio/Items/Whistle/whistle_7.ogg
14 changes: 14 additions & 0 deletions Resources/Textures/Objects/Fun/whistle.rsi/meta.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Made by Foleps (discord)",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "securityWhistle"
}
]
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit fa3da1a

Please sign in to comment.