Fix slippery items not being slippery (#1948)
* Fix slippery items not being slippery * Fix slippery not being slippery part 2 redux electric boogaloo * You got a license for that hard collidable?
This commit is contained in:
@@ -63,7 +63,7 @@ namespace Content.Server.GameObjects.Components.Fluids
|
|||||||
get => _slipThreshold;
|
get => _slipThreshold;
|
||||||
set => _slipThreshold = value;
|
set => _slipThreshold = value;
|
||||||
}
|
}
|
||||||
private bool _slippery = false;
|
|
||||||
private float _evaporateTime;
|
private float _evaporateTime;
|
||||||
private string _spillSound;
|
private string _spillSound;
|
||||||
|
|
||||||
@@ -97,6 +97,8 @@ namespace Content.Server.GameObjects.Components.Fluids
|
|||||||
// Whether the underlying solution color should be used
|
// Whether the underlying solution color should be used
|
||||||
private bool _recolor;
|
private bool _recolor;
|
||||||
|
|
||||||
|
private bool Slippery => Owner.TryGetComponent(out SlipperyComponent slippery) && slippery.Slippery;
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override void ExposeData(ObjectSerializer serializer)
|
public override void ExposeData(ObjectSerializer serializer)
|
||||||
{
|
{
|
||||||
@@ -107,7 +109,6 @@ namespace Content.Server.GameObjects.Components.Fluids
|
|||||||
serializer.DataField(ref _evaporateThreshold, "evaporate_threshold", ReagentUnit.New(20));
|
serializer.DataField(ref _evaporateThreshold, "evaporate_threshold", ReagentUnit.New(20));
|
||||||
serializer.DataField(ref _spriteVariants, "variants", 1);
|
serializer.DataField(ref _spriteVariants, "variants", 1);
|
||||||
serializer.DataField(ref _recolor, "recolor", false);
|
serializer.DataField(ref _recolor, "recolor", false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
@@ -155,7 +156,7 @@ namespace Content.Server.GameObjects.Components.Fluids
|
|||||||
|
|
||||||
void IExamine.Examine(FormattedMessage message, bool inDetailsRange)
|
void IExamine.Examine(FormattedMessage message, bool inDetailsRange)
|
||||||
{
|
{
|
||||||
if(_slippery)
|
if(Slippery)
|
||||||
{
|
{
|
||||||
message.AddText(Loc.GetString("It looks slippery."));
|
message.AddText(Loc.GetString("It looks slippery."));
|
||||||
}
|
}
|
||||||
@@ -246,15 +247,15 @@ namespace Content.Server.GameObjects.Components.Fluids
|
|||||||
|
|
||||||
private void UpdateSlip()
|
private void UpdateSlip()
|
||||||
{
|
{
|
||||||
if ((_slipThreshold == ReagentUnit.New(-1) || CurrentVolume < _slipThreshold) && Owner.TryGetComponent(out SlipperyComponent existingSlipperyComponent))
|
if ((_slipThreshold == ReagentUnit.New(-1) || CurrentVolume < _slipThreshold) &&
|
||||||
|
Owner.TryGetComponent(out SlipperyComponent oldSlippery))
|
||||||
{
|
{
|
||||||
Owner.RemoveComponent<SlipperyComponent>();
|
oldSlippery.Slippery = false;
|
||||||
_slippery = false;
|
|
||||||
}
|
}
|
||||||
else if (CurrentVolume >= _slipThreshold && !Owner.TryGetComponent(out SlipperyComponent newSlipperyComponent))
|
else if (CurrentVolume >= _slipThreshold)
|
||||||
{
|
{
|
||||||
Owner.AddComponent<SlipperyComponent>();
|
var newSlippery = Owner.EnsureComponent<SlipperyComponent>();
|
||||||
_slippery = true;
|
newSlippery.Slippery = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -44,9 +44,16 @@ namespace Content.Shared.GameObjects.Components.Movement
|
|||||||
[ViewVariables(VVAccess.ReadWrite)]
|
[ViewVariables(VVAccess.ReadWrite)]
|
||||||
private float RequiredSlipSpeed { get; set; } = 0f;
|
private float RequiredSlipSpeed { get; set; } = 0f;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Whether or not this component will try to slip entities.
|
||||||
|
/// </summary>
|
||||||
|
[ViewVariables(VVAccess.ReadWrite)]
|
||||||
|
public bool Slippery { get; set; }
|
||||||
|
|
||||||
private bool TrySlip(IEntity entity)
|
private bool TrySlip(IEntity entity)
|
||||||
{
|
{
|
||||||
if (ContainerHelpers.IsInContainer(Owner)
|
if (!Slippery
|
||||||
|
|| ContainerHelpers.IsInContainer(Owner)
|
||||||
|| _slipped.Contains(entity.Uid)
|
|| _slipped.Contains(entity.Uid)
|
||||||
|| !entity.TryGetComponent(out SharedStunnableComponent stun)
|
|| !entity.TryGetComponent(out SharedStunnableComponent stun)
|
||||||
|| !entity.TryGetComponent(out ICollidableComponent otherBody)
|
|| !entity.TryGetComponent(out ICollidableComponent otherBody)
|
||||||
@@ -137,6 +144,7 @@ namespace Content.Shared.GameObjects.Components.Movement
|
|||||||
serializer.DataField(this, x => ParalyzeTime, "paralyzeTime", 3f);
|
serializer.DataField(this, x => ParalyzeTime, "paralyzeTime", 3f);
|
||||||
serializer.DataField(this, x => IntersectPercentage, "intersectPercentage", 0.3f);
|
serializer.DataField(this, x => IntersectPercentage, "intersectPercentage", 0.3f);
|
||||||
serializer.DataField(this, x => RequiredSlipSpeed, "requiredSlipSpeed", 0f);
|
serializer.DataField(this, x => RequiredSlipSpeed, "requiredSlipSpeed", 0f);
|
||||||
|
serializer.DataField(this, x => x.Slippery, "slippery", true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -207,10 +207,17 @@
|
|||||||
parent: TrashBase
|
parent: TrashBase
|
||||||
id: TrashBananaPeel
|
id: TrashBananaPeel
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Objects/Consumable/Food/banana.rsi
|
sprite: Objects/Consumable/Food/banana.rsi
|
||||||
state: peel
|
state: peel
|
||||||
- type: Icon
|
- type: Icon
|
||||||
sprite: Objects/Consumable/Food/banana.rsi
|
sprite: Objects/Consumable/Food/banana.rsi
|
||||||
state: peel
|
state: peel
|
||||||
- type: Slippery
|
- type: Slippery
|
||||||
|
intersectPercentage: 0.2
|
||||||
|
- type: Collidable
|
||||||
|
shapes:
|
||||||
|
- !type:PhysShapeAabb
|
||||||
|
bounds: "-0.2,-0.2,0.2,0.2"
|
||||||
|
layer:
|
||||||
|
- MobImpassable
|
||||||
|
|||||||
@@ -85,6 +85,12 @@
|
|||||||
map: ["enum.PDAVisualLayers.Flashlight"]
|
map: ["enum.PDAVisualLayers.Flashlight"]
|
||||||
- type: Slippery
|
- type: Slippery
|
||||||
paralyzeTime: 4
|
paralyzeTime: 4
|
||||||
|
- type: Collidable
|
||||||
|
shapes:
|
||||||
|
- !type:PhysShapeAabb
|
||||||
|
bounds: "-0.25,-0.25,0.25,0.25"
|
||||||
|
layer:
|
||||||
|
- MobImpassable
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: Cargo PDA
|
name: Cargo PDA
|
||||||
|
|||||||
@@ -102,17 +102,22 @@
|
|||||||
parent: BaseItem
|
parent: BaseItem
|
||||||
description: A cheap bar of soap. Doesn't smell.
|
description: A cheap bar of soap. Doesn't smell.
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Objects/Specific/Janitorial/soap.rsi
|
sprite: Objects/Specific/Janitorial/soap.rsi
|
||||||
state: soap
|
state: soap
|
||||||
- type: Icon
|
- type: Icon
|
||||||
sprite: Objects/Specific/Janitorial/soap.rsi
|
sprite: Objects/Specific/Janitorial/soap.rsi
|
||||||
state: soap
|
state: soap
|
||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Specific/Janitorial/soap.rsi
|
sprite: Objects/Specific/Janitorial/soap.rsi
|
||||||
- type: Slippery
|
- type: Slippery
|
||||||
paralyzeTime: 2.5
|
paralyzeTime: 2.5
|
||||||
|
- type: Collidable
|
||||||
|
shapes:
|
||||||
|
- !type:PhysShapeAabb
|
||||||
|
bounds: "-0.3,-0.4,0.3,0.4"
|
||||||
|
layer:
|
||||||
|
- MobImpassable
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: soap
|
name: soap
|
||||||
|
|||||||
@@ -15,10 +15,13 @@
|
|||||||
- type: LoopingSound
|
- type: LoopingSound
|
||||||
- type: InteractionOutline
|
- type: InteractionOutline
|
||||||
- type: Clickable
|
- type: Clickable
|
||||||
|
- type: Slippery
|
||||||
- type: Collidable
|
- type: Collidable
|
||||||
shapes:
|
shapes:
|
||||||
- !type:PhysShapeAabb
|
- !type:PhysShapeAabb
|
||||||
bounds: "-0.5,-0.5,0.5,0.5"
|
bounds: "-0.4,-0.4,0.4,0.4"
|
||||||
|
layer:
|
||||||
|
- MobImpassable
|
||||||
hard: false
|
hard: false
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
|
|||||||
Reference in New Issue
Block a user