* Random offset for DefaultGrid every round This is useful to make coders aware of entitycoordinates and mapcoordinates being different and to help spot problems early. It also puts the onus of fixing positioning bugs back onto the original coder rather than someone else if they happen to spot it. * Fix clickable test * Fix entitysystemextensions
103 lines
5.4 KiB
C#
103 lines
5.4 KiB
C#
using System;
|
|
using System.Threading.Tasks;
|
|
using Content.Client.Clickable;
|
|
using Content.Server.GameTicking;
|
|
using NUnit.Framework;
|
|
using Robust.Server.GameObjects;
|
|
using Robust.Shared.GameObjects;
|
|
using Robust.Shared.IoC;
|
|
using Robust.Shared.Map;
|
|
using Robust.Shared.Maths;
|
|
using Robust.Shared.Timing;
|
|
|
|
namespace Content.IntegrationTests.Tests
|
|
{
|
|
[TestFixture]
|
|
public sealed class ClickableTest : ContentIntegrationTest
|
|
{
|
|
private ClientIntegrationInstance _client;
|
|
private ServerIntegrationInstance _server;
|
|
|
|
private const double DirSouth = 0;
|
|
private const double DirNorth = Math.PI;
|
|
private const double DirEast = Math.PI / 2;
|
|
private const double DirSouthEast = Math.PI / 4;
|
|
private const double DirSouthEastJustShy = Math.PI / 4 - 0.1;
|
|
|
|
[OneTimeSetUp]
|
|
public async Task Setup()
|
|
{
|
|
(_client, _server) = await StartConnectedServerClientPair();
|
|
}
|
|
|
|
[Parallelizable(ParallelScope.None)]
|
|
[Test]
|
|
[TestCase("ClickTestRotatingCornerVisible", 0.25f, 0.25f, DirSouth, 1, ExpectedResult = true)]
|
|
[TestCase("ClickTestRotatingCornerVisible", 0.35f, 0.5f, DirSouth, 2, ExpectedResult = true)]
|
|
[TestCase("ClickTestRotatingCornerVisible", -0.25f, -0.25f, DirSouth, 1, ExpectedResult = false)]
|
|
[TestCase("ClickTestRotatingCornerVisible", 0.25f, 0.25f, DirNorth, 1, ExpectedResult = false)]
|
|
[TestCase("ClickTestRotatingCornerVisible", -0.25f, -0.25f, DirNorth, 1, ExpectedResult = true)]
|
|
[TestCase("ClickTestRotatingCornerVisible", -0.25f, 0.25f, DirEast, 1, ExpectedResult = true)]
|
|
[TestCase("ClickTestRotatingCornerVisible", 0, 0.25f, DirSouthEast, 1, ExpectedResult = true)]
|
|
[TestCase("ClickTestRotatingCornerVisibleNoRot", 0.25f, 0.25f, DirSouth, 1, ExpectedResult = true)]
|
|
[TestCase("ClickTestRotatingCornerVisibleNoRot", -0.25f, -0.25f, DirSouth, 1, ExpectedResult = false)]
|
|
[TestCase("ClickTestRotatingCornerVisibleNoRot", 0.25f, 0.25f, DirNorth, 1, ExpectedResult = false)]
|
|
[TestCase("ClickTestRotatingCornerVisibleNoRot", -0.25f, -0.25f, DirNorth, 1, ExpectedResult = true)]
|
|
[TestCase("ClickTestRotatingCornerVisibleNoRot", 0, 0.35f, DirSouthEastJustShy, 1, ExpectedResult = false)]
|
|
[TestCase("ClickTestRotatingCornerVisibleNoRot", 0.25f, 0.25f, DirSouthEastJustShy, 1, ExpectedResult = true)]
|
|
[TestCase("ClickTestRotatingCornerInvisible", 0.25f, 0.25f, DirSouth, 1, ExpectedResult = true)]
|
|
[TestCase("ClickTestRotatingCornerInvisible", 0.35f, 0.5f, DirSouth, 2, ExpectedResult = true)]
|
|
[TestCase("ClickTestRotatingCornerInvisible", -0.25f, -0.25f, DirSouth, 1, ExpectedResult = false)]
|
|
[TestCase("ClickTestRotatingCornerInvisible", 0.25f, 0.25f, DirNorth, 1, ExpectedResult = false)]
|
|
[TestCase("ClickTestRotatingCornerInvisible", -0.25f, -0.25f, DirNorth, 1, ExpectedResult = true)]
|
|
[TestCase("ClickTestRotatingCornerInvisible", -0.25f, 0.25f, DirEast, 1, ExpectedResult = true)]
|
|
[TestCase("ClickTestRotatingCornerInvisible", 0, 0.25f, DirSouthEast, 1, ExpectedResult = true)]
|
|
[TestCase("ClickTestRotatingCornerInvisibleNoRot", 0.25f, 0.25f, DirSouth, 1, ExpectedResult = true)]
|
|
[TestCase("ClickTestRotatingCornerInvisibleNoRot", -0.25f, -0.25f, DirSouth, 1, ExpectedResult = false)]
|
|
[TestCase("ClickTestRotatingCornerInvisibleNoRot", 0.25f, 0.25f, DirNorth, 1, ExpectedResult = false)]
|
|
[TestCase("ClickTestRotatingCornerInvisibleNoRot", -0.25f, -0.25f, DirNorth, 1, ExpectedResult = true)]
|
|
[TestCase("ClickTestRotatingCornerInvisibleNoRot", 0, 0.35f, DirSouthEastJustShy, 1, ExpectedResult = false)]
|
|
[TestCase("ClickTestRotatingCornerInvisibleNoRot", 0.25f, 0.25f, DirSouthEastJustShy, 1, ExpectedResult = true)]
|
|
public async Task<bool> Test(string prototype, float clickPosX, float clickPosY, double angle, float scale)
|
|
{
|
|
Vector2? worldPos = null;
|
|
EntityUid entity = default;
|
|
var clientEntManager = _client.ResolveDependency<IEntityManager>();
|
|
var serverEntManager = _server.ResolveDependency<IEntityManager>();
|
|
var mapManager = _server.ResolveDependency<IMapManager>();
|
|
var gameTicker = _server.ResolveDependency<IEntitySystemManager>().GetEntitySystem<GameTicker>();
|
|
|
|
await _server.WaitPost(() =>
|
|
{
|
|
var gridEnt = mapManager.GetGrid(gameTicker.DefaultGridId).GridEntityId;
|
|
worldPos = serverEntManager.GetEntity(gridEnt).Transform.WorldPosition;
|
|
|
|
var ent = serverEntManager.SpawnEntity(prototype, new EntityCoordinates(gridEnt, 0f, 0f));
|
|
ent.Transform.LocalRotation = angle;
|
|
ent.GetComponent<SpriteComponent>().Scale = (scale, scale);
|
|
entity = ent.Uid;
|
|
});
|
|
|
|
// Let client sync up.
|
|
await RunTicksSync(_client, _server, 5);
|
|
|
|
var hit = false;
|
|
|
|
await _client.WaitPost(() =>
|
|
{
|
|
var ent = clientEntManager.GetEntity(entity);
|
|
var clickable = ent.GetComponent<ClickableComponent>();
|
|
|
|
hit = clickable.CheckClick((clickPosX, clickPosY) + worldPos!.Value, out _, out _);
|
|
});
|
|
|
|
await _server.WaitPost(() =>
|
|
{
|
|
serverEntManager.DeleteEntity(entity);
|
|
});
|
|
|
|
return hit;
|
|
}
|
|
}
|
|
}
|