Add extension method to shuffle an entity by a random value
This commit is contained in:
@@ -14,6 +14,7 @@ using Content.Shared.GameObjects.Components.Chemistry.ChemMaster;
|
||||
using Content.Shared.GameObjects.EntitySystems;
|
||||
using Content.Shared.Interfaces;
|
||||
using Content.Shared.Interfaces.GameObjects.Components;
|
||||
using Content.Shared.Utility;
|
||||
using Robust.Server.GameObjects.Components.Container;
|
||||
using Robust.Server.GameObjects.Components.UserInterface;
|
||||
using Robust.Server.GameObjects.EntitySystems;
|
||||
@@ -300,15 +301,12 @@ namespace Content.Server.GameObjects.Components.Chemistry
|
||||
hands.PutInHand(item);
|
||||
continue;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//Put it on the floor
|
||||
bottle.Transform.GridPosition = user.Transform.GridPosition;
|
||||
//Give it an offset
|
||||
var x_negative = random.Prob(0.5f) ? -1 : 1;
|
||||
var y_negative = random.Prob(0.5f) ? -1 : 1;
|
||||
bottle.Transform.LocalPosition += new Vector2(random.NextFloat() * 0.2f * x_negative, random.NextFloat() * 0.2f * y_negative);
|
||||
bottle.RandomOffset(0.2f);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ using Content.Shared.GameObjects.Components.Conveyor;
|
||||
using Content.Shared.GameObjects.Components.Interactable;
|
||||
using Content.Shared.Interfaces.GameObjects.Components;
|
||||
using Content.Shared.Physics;
|
||||
using Content.Shared.Utility;
|
||||
using Robust.Server.GameObjects;
|
||||
using Robust.Shared.Containers;
|
||||
using Robust.Shared.GameObjects;
|
||||
@@ -170,7 +171,7 @@ namespace Content.Server.GameObjects.Components.Conveyor
|
||||
|
||||
Owner.AddComponent<ItemComponent>();
|
||||
_group?.RemoveConveyor(this);
|
||||
Owner.Transform.WorldPosition += (_random.NextFloat() * 0.4f - 0.2f, _random.NextFloat() * 0.4f - 0.2f);
|
||||
Owner.RandomOffset(0.2f);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
41
Content.Shared/Utility/SharedEntityExtensions.cs
Normal file
41
Content.Shared/Utility/SharedEntityExtensions.cs
Normal file
@@ -0,0 +1,41 @@
|
||||
using System;
|
||||
using Robust.Shared.Interfaces.GameObjects;
|
||||
using Robust.Shared.Interfaces.Random;
|
||||
using Robust.Shared.IoC;
|
||||
using Robust.Shared.Maths;
|
||||
using Robust.Shared.Random;
|
||||
using Robust.Shared.Utility;
|
||||
|
||||
namespace Content.Shared.Utility
|
||||
{
|
||||
public static class SharedEntityExtensions
|
||||
{
|
||||
public static void RandomOffset(this IEntity entity, float minX, float maxX, float minY, float maxY)
|
||||
{
|
||||
DebugTools.AssertNotNull(entity);
|
||||
DebugTools.Assert(minX <= maxX, $"Minimum X value ({minX}) must be smaller than or equal to the maximum X value ({maxX})");
|
||||
DebugTools.Assert(minY <= maxY, $"Minimum Y value ({minY}) must be smaller than or equal to the maximum Y value ({maxY})");
|
||||
|
||||
var random = IoCManager.Resolve<IRobustRandom>();
|
||||
var randomX = random.NextFloat() * (maxX - minX) + minX;
|
||||
var randomY = random.NextFloat() * (maxY - minY) + minY;
|
||||
var offset = new Vector2(randomX, randomY);
|
||||
|
||||
entity.Transform.LocalPosition += offset;
|
||||
}
|
||||
|
||||
public static void RandomOffset(this IEntity entity, float min, float max)
|
||||
{
|
||||
DebugTools.AssertNotNull(entity);
|
||||
DebugTools.Assert(min <= max, $"Minimum value ({min}) must be smaller than or equal to the maximum value ({max})");
|
||||
|
||||
entity.RandomOffset(min, max, min, max);
|
||||
}
|
||||
|
||||
public static void RandomOffset(this IEntity entity, float value)
|
||||
{
|
||||
value = Math.Abs(value);
|
||||
entity.RandomOffset(-value, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user