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.GameObjects.EntitySystems;
|
||||||
using Content.Shared.Interfaces;
|
using Content.Shared.Interfaces;
|
||||||
using Content.Shared.Interfaces.GameObjects.Components;
|
using Content.Shared.Interfaces.GameObjects.Components;
|
||||||
|
using Content.Shared.Utility;
|
||||||
using Robust.Server.GameObjects.Components.Container;
|
using Robust.Server.GameObjects.Components.Container;
|
||||||
using Robust.Server.GameObjects.Components.UserInterface;
|
using Robust.Server.GameObjects.Components.UserInterface;
|
||||||
using Robust.Server.GameObjects.EntitySystems;
|
using Robust.Server.GameObjects.EntitySystems;
|
||||||
@@ -300,15 +301,12 @@ namespace Content.Server.GameObjects.Components.Chemistry
|
|||||||
hands.PutInHand(item);
|
hands.PutInHand(item);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Put it on the floor
|
//Put it on the floor
|
||||||
bottle.Transform.GridPosition = user.Transform.GridPosition;
|
bottle.Transform.GridPosition = user.Transform.GridPosition;
|
||||||
//Give it an offset
|
//Give it an offset
|
||||||
var x_negative = random.Prob(0.5f) ? -1 : 1;
|
bottle.RandomOffset(0.2f);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ using Content.Shared.GameObjects.Components.Conveyor;
|
|||||||
using Content.Shared.GameObjects.Components.Interactable;
|
using Content.Shared.GameObjects.Components.Interactable;
|
||||||
using Content.Shared.Interfaces.GameObjects.Components;
|
using Content.Shared.Interfaces.GameObjects.Components;
|
||||||
using Content.Shared.Physics;
|
using Content.Shared.Physics;
|
||||||
|
using Content.Shared.Utility;
|
||||||
using Robust.Server.GameObjects;
|
using Robust.Server.GameObjects;
|
||||||
using Robust.Shared.Containers;
|
using Robust.Shared.Containers;
|
||||||
using Robust.Shared.GameObjects;
|
using Robust.Shared.GameObjects;
|
||||||
@@ -170,7 +171,7 @@ namespace Content.Server.GameObjects.Components.Conveyor
|
|||||||
|
|
||||||
Owner.AddComponent<ItemComponent>();
|
Owner.AddComponent<ItemComponent>();
|
||||||
_group?.RemoveConveyor(this);
|
_group?.RemoveConveyor(this);
|
||||||
Owner.Transform.WorldPosition += (_random.NextFloat() * 0.4f - 0.2f, _random.NextFloat() * 0.4f - 0.2f);
|
Owner.RandomOffset(0.2f);
|
||||||
|
|
||||||
return true;
|
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