Skip to content

Commit

Permalink
[Feature] StepTriggerGroup to improve StepTriggerImmune behaviour (Si…
Browse files Browse the repository at this point in the history
…mple-Station#53)

* Ipc modifier added

* StepTriggerGroup prototype and change in system.

* fix change chemistry_effects.yml

* types added in trigger/immunity

* comments/clean

* minor fix

* another small fix

* proto id / mouse landmine fix

* CleanCode optimization + fixes

* final

* fix
  • Loading branch information
HellCatten authored and VMSolidus committed Sep 18, 2024
1 parent 2f5e697 commit efcfc48
Show file tree
Hide file tree
Showing 26 changed files with 225 additions and 7 deletions.
8 changes: 8 additions & 0 deletions Content.Shared/StepTrigger/Components/StepTriggerComponent.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using Content.Shared.StepTrigger.Prototypes;
using Content.Shared.StepTrigger.Systems;
using Content.Shared.Whitelist;
using Robust.Shared.GameStates;
Expand Down Expand Up @@ -57,6 +58,13 @@ public sealed partial class StepTriggerComponent : Component
/// </summary>
[DataField, AutoNetworkedField]
public bool StepOn = false;

/// <summary>
/// If TriggerGroups is specified, it will check StepTriggerImmunityComponent to have the same TriggerType to activate immunity
/// </summary>
// WD EDIT
[DataField]
public StepTriggerGroup? TriggerGroups;
}

[RegisterComponent]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
using Content.Shared.StepTrigger.Prototypes;
using Content.Shared.StepTrigger.Systems;
using Robust.Shared.GameStates;

namespace Content.Shared.StepTrigger.Components;
Expand All @@ -12,4 +14,12 @@ namespace Content.Shared.StepTrigger.Components;
/// Consider using a subscription to StepTriggerAttemptEvent if you wish to be more selective.
/// </remarks>
[RegisterComponent, NetworkedComponent]
public sealed partial class StepTriggerImmuneComponent : Component { }
[Access(typeof(StepTriggerSystem))]
public sealed partial class StepTriggerImmuneComponent : Component
{
/// <summary>
/// WhiteList of immunity step triggers.
/// </summary>
[DataField]
public StepTriggerGroup? Whitelist;
}
77 changes: 77 additions & 0 deletions Content.Shared/StepTrigger/Prototypes/StepTriggerGroup.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
using Content.Shared.Damage.Prototypes;
using Content.Shared.StepTrigger.Components;
using Content.Shared.StepTrigger.Systems;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;

namespace Content.Shared.StepTrigger.Prototypes
{
/// <summary>
/// A group of <see cref="StepTriggerTypePrototype">
/// Used to determine StepTriggerTypes like Tags.
/// Used for better work with Immunity.
/// StepTriggerTypes in StepTriggerTypes.yml
/// WD EDIT
/// </summary>
/// <code>
/// stepTriggerGroups:
/// types:
/// - Lava
/// - Landmine
/// - Shard
/// - Chasm
/// - Mousetrap
/// - SlipTile
/// - SlipEntity
/// </code>
[DataDefinition]
[Serializable, NetSerializable]
public sealed partial class StepTriggerGroup
{
[DataField]
public List<ProtoId<StepTriggerTypePrototype>>? Types = null;

/// <summary>
/// Checks if types of this StepTriggerGroup is similar to types of AnotherGroup
/// </summary>
public bool IsValid(StepTriggerGroup? AnotherGroup)
{
if (Types != null)
{
foreach (var type in Types)
{
if (AnotherGroup != null
&& AnotherGroup.Types != null
&& AnotherGroup.Types.Contains(type))
return true;
}
}
return false;
}

/// <summary>
/// Checks validation (if types of this StepTriggerGroup are similar to types of
/// another StepTriggerComponent.
/// </summary>
public bool IsValid(StepTriggerComponent component)
{
if (component.TriggerGroups != null)
{
return IsValid(component.TriggerGroups);
}
return false;
}

/// <summary>
/// Checks validation (if types of this StepTriggerGroup are similar to types of
/// another StepTriggerImmuneComponent.
/// </summary>
public bool IsValid(StepTriggerImmuneComponent component)
{
if (component.Whitelist != null)
return IsValid(component.Whitelist);
return false;
}
}
}
19 changes: 19 additions & 0 deletions Content.Shared/StepTrigger/Prototypes/StepTriggerTypePrototype.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using Robust.Shared.Prototypes;

namespace Content.Shared.StepTrigger.Prototypes
{
/// <summary>
/// Prototype representing a StepTriggerType in YAML.
/// Meant to only have an ID property, as that is the only thing that
/// gets saved in StepTriggerGroup.
/// </summary>
// WD EDIT
[Prototype("stepTriggerType")]
public sealed partial class StepTriggerTypePrototype : IPrototype
{
[ViewVariables]
[IdDataField]
public string ID { get; private set; } = default!;
}
}

12 changes: 10 additions & 2 deletions Content.Shared/StepTrigger/Systems/StepTriggerSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using Robust.Shared.Physics;
using Robust.Shared.Physics.Components;
using Robust.Shared.Physics.Events;
using Enumerable = System.Linq.Enumerable;

namespace Content.Shared.StepTrigger.Systems;

Expand Down Expand Up @@ -118,11 +119,18 @@ private void UpdateColliding(EntityUid uid, StepTriggerComponent component, Tran

private bool CanTrigger(EntityUid uid, EntityUid otherUid, StepTriggerComponent component)
{
if (HasComp<StepTriggerImmuneComponent>(otherUid)
|| !component.Active
// WD EDIT START
if (!component.Active
|| component.CurrentlySteppedOn.Contains(otherUid))
return false;

// Immunity checks
if (TryComp<StepTriggerImmuneComponent>(otherUid, out var stepTriggerImmuneComponent)
&& component.TriggerGroups != null
&& component.TriggerGroups.IsValid(stepTriggerImmuneComponent))
return false;
// WD EDIT END

// Can't trigger if we don't ignore weightless entities
// and the entity is flying or currently weightless
// Makes sense simulation wise to have this be part of steptrigger directly IMO
Expand Down
5 changes: 4 additions & 1 deletion Resources/Prototypes/Entities/Effects/chemistry_effects.yml
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,9 @@
animationState: foam-dissolve
- type: Slippery
- type: StepTrigger
triggerGroups: # WD EDIT
types:
- SlipTile
# disabled until foam reagent duplication is fixed
#- type: ScoopableSolution
# solution: solutionArea
Expand Down Expand Up @@ -135,7 +138,7 @@
- type: RCDDeconstructable
cost: 2
delay: 2
fx: EffectRCDDeconstruct2
fx: EffectRCDDeconstruct2
- type: Clickable
- type: InteractionOutline
- type: Sprite
Expand Down
3 changes: 3 additions & 0 deletions Resources/Prototypes/Entities/Effects/puddle.yml
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,9 @@
- type: EdgeSpreader
id: Puddle
- type: StepTrigger
triggerGroups:
types:
- SlipTile
- type: Drink
delay: 3
transferAmount: 1
Expand Down
4 changes: 4 additions & 0 deletions Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1689,6 +1689,10 @@
- type: FireVisuals
sprite: Mobs/Effects/onfire.rsi
normalState: Mouse_burning
- type: StepTriggerImmune # WD EDIT START
whitelist:
types:
- Landmine # END

- type: entity
parent: MobMouse
Expand Down
3 changes: 3 additions & 0 deletions Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,9 @@
- type: Speech
speechVerb: Cluwne
- type: StepTrigger
triggerGroups:
types:
- SlipEntity
intersectRatio: 0.2
- type: Fixtures
fixtures:
Expand Down
4 changes: 4 additions & 0 deletions Resources/Prototypes/Entities/Mobs/Player/ipc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,10 @@
- type: OfferItem
- type: LayingDown
- type: Carriable
- type: StepTriggerImmune #WD EDIT
whitelist:
types:
- Shard

- type: entity
save: false
Expand Down
5 changes: 5 additions & 0 deletions Resources/Prototypes/Entities/Mobs/Species/harpy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,11 @@
- GalacticCommon
- SolCommon
- type: StepTriggerImmune
whitelist: # WD EDIT
types:
- Shard
- Landmine
- Mousetrap

- type: entity
save: false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,9 @@
launchForwardsMultiplier: 1.5
- type: StepTrigger
intersectRatio: 0.2
triggerGroups:
types:
- SlipEntity
- type: CollisionWake
enabled: false
- type: Physics
Expand Down
3 changes: 3 additions & 0 deletions Resources/Prototypes/Entities/Objects/Devices/mousetrap.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@
- type: StepTrigger
intersectRatio: 0.2
requiredTriggeredSpeed: 0
triggerGroups: # WD EDIT
types:
- Mousetrap
- type: Mousetrap
- type: TriggerOnStepTrigger
- type: ShoesRequiredStepTrigger
Expand Down
3 changes: 3 additions & 0 deletions Resources/Prototypes/Entities/Objects/Devices/pda.yml
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,9 @@
paralyzeTime: 4
launchForwardsMultiplier: 1.5
- type: StepTrigger
triggerGroups: # WD EDIT
types:
- SlipEntity
- type: CollisionWake
enabled: false
- type: Physics
Expand Down
3 changes: 3 additions & 0 deletions Resources/Prototypes/Entities/Objects/Fun/dice.yml
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,9 @@
mask:
- ItemMask
- type: StepTrigger
triggerGroups: # WD EDIT
types:
- Shard
intersectRatio: 0.2
- type: TriggerOnStepTrigger
- type: ShoesRequiredStepTrigger
Expand Down
3 changes: 3 additions & 0 deletions Resources/Prototypes/Entities/Objects/Materials/shards.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@
- !type:DoActsBehavior
acts: [ "Destruction" ]
- type: StepTrigger
triggerGroups: # WD EDIT
types:
- Shard
intersectRatio: 0.2
- type: ShoesRequiredStepTrigger
- type: Slippery
Expand Down
3 changes: 3 additions & 0 deletions Resources/Prototypes/Entities/Objects/Misc/land_mine.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@
params:
maxDistance: 10
- type: StepTrigger
triggerGroups: # WD EDIT
types:
- Landmine
requiredTriggeredSpeed: 0
stepOn: true

Expand Down
3 changes: 3 additions & 0 deletions Resources/Prototypes/Entities/Objects/Misc/spider_web.yml
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,9 @@
paralyzeTime: 2
launchForwardsMultiplier: 1.5
- type: StepTrigger
triggerGroups:
types:
- SlipTile
intersectRatio: 0.2
- type: Physics
- type: Fixtures
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@
paralyzeTime: 2
launchForwardsMultiplier: 1.5
- type: StepTrigger
triggerGroups: # WD EDIT
types:
- SlipEntity
intersectRatio: 0.2
- type: CollisionWake
enabled: false
Expand Down Expand Up @@ -157,6 +160,9 @@
paralyzeTime: 5
launchForwardsMultiplier: 2.5
- type: StepTrigger
triggerGroups: # WD EDIT
types:
- SlipEntity
intersectRatio: 0.04
- type: Item
heldPrefix: syndie
Expand Down Expand Up @@ -198,6 +204,9 @@
- type: Slippery
paralyzeTime: 2
- type: StepTrigger
triggerGroups: # WD EDIT
types:
- SlipEntity
- type: Item
heldPrefix: gibs
- type: FlavorProfile
Expand Down
3 changes: 3 additions & 0 deletions Resources/Prototypes/Entities/Tiles/bananium.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@
paralyzeTime: 2
launchForwardsMultiplier: 1.5
- type: StepTrigger
triggerGroups: # WD EDIT
types:
- SlipTile
intersectRatio: 0.2
- type: Physics
bodyType: Static
Expand Down
9 changes: 6 additions & 3 deletions Resources/Prototypes/Entities/Tiles/chasm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@
blacklist:
tags:
- Catwalk
triggerGroups: # WD EDIT
types:
- Chasm
- type: Transform
anchored: true
- type: Clickable
Expand Down Expand Up @@ -55,7 +58,7 @@
sprite: Tiles/Planet/Chasms/chromite_chasm.rsi
- type: Icon
sprite: Tiles/Planet/Chasms/chromite_chasm.rsi

- type: entity
parent: FloorChasmEntity
id: FloorDesertChasm
Expand All @@ -65,7 +68,7 @@
sprite: Tiles/Planet/Chasms/desert_chasm.rsi
- type: Icon
sprite: Tiles/Planet/Chasms/desert_chasm.rsi

- type: entity
parent: FloorChasmEntity
id: FloorSnowChasm
Expand All @@ -74,4 +77,4 @@
- type: Sprite
sprite: Tiles/Planet/Chasms/snow_chasm.rsi
- type: Icon
sprite: Tiles/Planet/Chasms/snow_chasm.rsi
sprite: Tiles/Planet/Chasms/snow_chasm.rsi
3 changes: 3 additions & 0 deletions Resources/Prototypes/Entities/Tiles/lava.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@
blacklist:
tags:
- Catwalk
triggerGroups: # WD EDIT
types:
- Lava
- type: Lava
fireStacks: 0.75
- type: Transform
Expand Down
Loading

0 comments on commit efcfc48

Please sign in to comment.