diff --git a/LisergyClient/LisergyClient/Assets/Plugins/ClientSDK.dll b/LisergyClient/LisergyClient/Assets/Plugins/ClientSDK.dll index e90bb68f3..0d2891547 100644 --- a/LisergyClient/LisergyClient/Assets/Plugins/ClientSDK.dll +++ b/LisergyClient/LisergyClient/Assets/Plugins/ClientSDK.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:040e6a91a2e2814bcc41e81bc02ff57ac7867ba86d9fc73f7064dd17b9d923fd +oid sha256:7ae2da284c13e7a0fd33a96dd8f4472d8c21f4e838a7520d17f87f1eeb0e8711 size 33792 diff --git a/LisergyClient/LisergyClient/Assets/Plugins/Game.dll b/LisergyClient/LisergyClient/Assets/Plugins/Game.dll index f503f9286..7819176de 100644 --- a/LisergyClient/LisergyClient/Assets/Plugins/Game.dll +++ b/LisergyClient/LisergyClient/Assets/Plugins/Game.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b68d60e2575510e7677fbef3b0b208cffeaa471f939a1cc83a079fa639c36a41 -size 185344 +oid sha256:ba890608a75f452f98f882a2bdc8aca0101b3860ace2490f82621ee391d3ee1d +size 187392 diff --git a/LisergyClient/LisergyClient/Assets/Plugins/GameData.dll b/LisergyClient/LisergyClient/Assets/Plugins/GameData.dll index d96eaf9f5..e6cd988c5 100644 --- a/LisergyClient/LisergyClient/Assets/Plugins/GameData.dll +++ b/LisergyClient/LisergyClient/Assets/Plugins/GameData.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ccb58be41d6d84dd7c6afd39ca64a635192eb0583c695f1af80949b93a1ca9ac +oid sha256:b11a3bce9bafb63626b071a422849e666b3a9e06c9db8dff5265730b659dac86 size 11776 diff --git a/LisergyServer/ClientSDK/ClientNetwork.cs b/LisergyServer/ClientSDK/ClientNetwork.cs index da1996a83..31024ee95 100644 --- a/LisergyServer/ClientSDK/ClientNetwork.cs +++ b/LisergyServer/ClientSDK/ClientNetwork.cs @@ -10,7 +10,7 @@ using System.Runtime.CompilerServices; using Telepathy; -[assembly: InternalsVisibleTo("ServerTests")] +[assembly: InternalsVisibleTo("UnitTests")] namespace ClientSDK { public class ClientNetwork : IGameNetwork, IEventListener diff --git a/LisergyServer/Game/Engine/DataTypes/GameId.cs b/LisergyServer/Game/Engine/DataTypes/GameId.cs index 883ada63c..8c64a8f7d 100644 --- a/LisergyServer/Game/Engine/DataTypes/GameId.cs +++ b/LisergyServer/Game/Engine/DataTypes/GameId.cs @@ -20,7 +20,7 @@ public unsafe struct GameId : IEquatable, IEqualityComparer /// 0 = disabled. /// This is just during initial development later can think a better solution for debugging /// - internal static ulong DEBUG_MODE = 0; + public static ulong DEBUG_MODE = 0; /// /// Sets whats to be the next generated game id diff --git a/LisergyServer/Game/Engine/DataTypes/TimeBlock.cs b/LisergyServer/Game/Engine/DataTypes/TimeBlock.cs index cf349cad2..00df2eef3 100644 --- a/LisergyServer/Game/Engine/DataTypes/TimeBlock.cs +++ b/LisergyServer/Game/Engine/DataTypes/TimeBlock.cs @@ -21,6 +21,11 @@ public struct TimeBlock /// Gets the total time required for this task /// public TimeSpan TotalBlockTime => EndTime - StartTime; + + public override string ToString() + { + return $""; + } } /// @@ -72,9 +77,8 @@ public static TimeBlockSnapshot GetCurrentSnapshot(this TimeBlock block, DateTim snap.TimeInBlock = now - block.StartTime; snap.TimeUntilEndOfblock = block.EndTime - now; snap.TimeBlock = block; - snap.Percentagage = Math.Max(1, snap.TimeInBlock / block.TotalBlockTime); + snap.Percentagage = Math.Min(1, snap.TimeInBlock / block.TotalBlockTime); return snap; } - } } diff --git a/LisergyServer/Game/Engine/Scheduler/GameScheduler.cs b/LisergyServer/Game/Engine/Scheduler/GameScheduler.cs index f66a80e5c..f1f949cc2 100644 --- a/LisergyServer/Game/Engine/Scheduler/GameScheduler.cs +++ b/LisergyServer/Game/Engine/Scheduler/GameScheduler.cs @@ -5,7 +5,7 @@ using System.Linq; using System.Runtime.CompilerServices; -[assembly: InternalsVisibleTo("ServerTests")] +[assembly: InternalsVisibleTo("UnitTests")] namespace Game.Engine.Scheduler { /// diff --git a/LisergyServer/Game/GameLogic.cs b/LisergyServer/Game/GameLogic.cs index 1d050a308..fe494387f 100644 --- a/LisergyServer/Game/GameLogic.cs +++ b/LisergyServer/Game/GameLogic.cs @@ -2,6 +2,7 @@ using Game.Systems.Battler; using Game.Systems.Map; using Game.Systems.Movement; +using Game.Systems.Party; using Game.Systems.Player; using Game.Systems.Resources; @@ -18,6 +19,7 @@ public interface IEntityLogic public CourseLogic Movement { get; } public HarvestingLogic Harvesting { get; } public CargoLogic Cargo { get; } + public ActionPointsLogic ActionPoints { get; } } /// @@ -31,6 +33,7 @@ public class EntityLogic : IEntityLogic public CourseLogic Movement => _systems.EntityMovement.GetLogic(_entity); public HarvestingLogic Harvesting => _systems.Harvesting.GetLogic(_entity); public CargoLogic Cargo => _systems.Cargo.GetLogic(_entity); + public ActionPointsLogic ActionPoints => _systems.ActionPoints.GetLogic(_entity); private ISystems _systems; private IEntity _entity; diff --git a/LisergyServer/Game/GameSystems.cs b/LisergyServer/Game/GameSystems.cs index 8d2aead76..0e8cbaf79 100644 --- a/LisergyServer/Game/GameSystems.cs +++ b/LisergyServer/Game/GameSystems.cs @@ -34,6 +34,7 @@ public interface ISystems { HarvestingSystem Harvesting { get; } ResourceSystem Resources { get; } CargoSystem Cargo { get; } + ActionsPointSystem ActionPoints { get; } void CallEvent(IEntity entity, IBaseEvent ev); } @@ -60,6 +61,7 @@ public GameSystems(LisergyGame game) AddSystem(Harvesting = new HarvestingSystem(game)); AddSystem(Resources = new ResourceSystem(game)); AddSystem(Cargo = new CargoSystem(game)); + AddSystem(ActionPoints = new ActionsPointSystem(game)); } public MapSystem Map { get; private set; } @@ -76,6 +78,7 @@ public GameSystems(LisergyGame game) public HarvestingSystem Harvesting { get; private set; } public ResourceSystem Resources { get; private set; } public CargoSystem Cargo { get; private set; } + public ActionsPointSystem ActionPoints { get; private set; } private void AddSystem(GameSystem system) where ComponentType : unmanaged, IComponent { diff --git a/LisergyServer/Game/Packets/ClientPackets/TakeTurnPacket.cs b/LisergyServer/Game/Packets/ClientPackets/TakeTurnPacket.cs new file mode 100644 index 000000000..a9212e4db --- /dev/null +++ b/LisergyServer/Game/Packets/ClientPackets/TakeTurnPacket.cs @@ -0,0 +1,12 @@ +using Game.Engine.Network; +using Game.Systems.Movement; +using Game.World; +using System; +using System.Collections.Generic; + +namespace Game.Network.ClientPackets +{ + [Serializable] + public class TakeTurnPacket : BasePacket, IClientPacket + { } +} diff --git a/LisergyServer/Game/Systems/ActionPoints/ActionPointsComponent.cs b/LisergyServer/Game/Systems/ActionPoints/ActionPointsComponent.cs new file mode 100644 index 000000000..cf0317052 --- /dev/null +++ b/LisergyServer/Game/Systems/ActionPoints/ActionPointsComponent.cs @@ -0,0 +1,13 @@ +using Game.ECS; +using System; + +namespace Game.Systems.Party +{ + [Serializable] + public struct ActionPointsComponent : IComponent + { + public byte ActionPoints; + + public override string ToString() => $""; + } +} diff --git a/LisergyServer/Game/Systems/ActionPoints/ActionPointsLogic.cs b/LisergyServer/Game/Systems/ActionPoints/ActionPointsLogic.cs new file mode 100644 index 000000000..615f60cfe --- /dev/null +++ b/LisergyServer/Game/Systems/ActionPoints/ActionPointsLogic.cs @@ -0,0 +1,19 @@ +using Game.Engine.ECS; +using Game.Systems.Party; + +namespace Game.Systems.Resources +{ + public unsafe class ActionPointsLogic : BaseEntityLogic + { + public int GetActionPoints() + { + return Entity.Get().ActionPoints; + } + + public void SetActionPoints(byte amt) + { + var c = Entity.Components.GetPointer(); + c->ActionPoints = amt; + } + } +} \ No newline at end of file diff --git a/LisergyServer/Game/Systems/ActionPoints/ActionPointsSystem.cs b/LisergyServer/Game/Systems/ActionPoints/ActionPointsSystem.cs new file mode 100644 index 000000000..db2057e02 --- /dev/null +++ b/LisergyServer/Game/Systems/ActionPoints/ActionPointsSystem.cs @@ -0,0 +1,36 @@ +using Game.Engine.ECS; +using Game.Engine.Events.Bus; +using Game.Systems.Course; +using Game.Systems.Map; +using Game.Systems.Resources; + +namespace Game.Systems.Party +{ + public class ActionsPointSystem : LogicSystem, IEventListener + { + public ActionsPointSystem(LisergyGame game) : base(game) + { + } + + public override void RegisterListeners() + { + EntityEvents.On(OnCourseIntent); + EntityEvents.On(OnEntityMoveIn); + } + + private void OnEntityMoveIn(IEntity e, EntityMoveInEvent ev) + { + var actionPoints = ev.Entity.EntityLogic.ActionPoints.GetActionPoints(); + if (actionPoints == 0) return; + ev.Entity.EntityLogic.ActionPoints.SetActionPoints((byte) (actionPoints - 1)); + } + + private void OnCourseIntent(IEntity e, CourseIntentionEvent ev) + { + if (ev.Entity.EntityLogic.ActionPoints.GetActionPoints() == 0) + { + ev.Cancelled = true; + } + } + } +} \ No newline at end of file diff --git a/LisergyServer/Game/Systems/ActionPoints/PlayerTurnsComponent.cs b/LisergyServer/Game/Systems/ActionPoints/PlayerTurnsComponent.cs new file mode 100644 index 000000000..bf38257dd --- /dev/null +++ b/LisergyServer/Game/Systems/ActionPoints/PlayerTurnsComponent.cs @@ -0,0 +1,11 @@ +using System; +using Game.ECS; + +namespace Game.Systems.ActionPoints +{ + [Serializable] + public struct PlayerTurnsComponent : IComponent + { + public ulong Turns; + } +} \ No newline at end of file diff --git a/LisergyServer/Game/Systems/Course/CourseEvents.cs b/LisergyServer/Game/Systems/Course/CourseEvents.cs index b8f5994ef..ee7292805 100644 --- a/LisergyServer/Game/Systems/Course/CourseEvents.cs +++ b/LisergyServer/Game/Systems/Course/CourseEvents.cs @@ -1,11 +1,22 @@ -using Game.Engine.ECS; +using System.Collections.Generic; +using Game.Engine.ECS; using Game.Engine.Events; -using Game.Systems.Battler; using Game.Systems.Movement; using Game.Tile; +using Game.World; namespace Game.Systems.Course { + public class CourseIntentionEvent : IGameEvent + { + public IEntity Entity; + public CourseIntent Intent; + public List Path; + public bool Cancelled; + + public override string ToString() => $""; + } + /// /// Whenever a course finishes its last tile movement /// diff --git a/LisergyServer/Game/Systems/Course/CourseLogic.cs b/LisergyServer/Game/Systems/Course/CourseLogic.cs index 4e4c08568..96ed779df 100644 --- a/LisergyServer/Game/Systems/Course/CourseLogic.cs +++ b/LisergyServer/Game/Systems/Course/CourseLogic.cs @@ -6,6 +6,7 @@ using Game.Engine.ECS; using Game.Engine.DataTypes; using Game.Engine.Scheduler; +using Game.Systems.Party; using Game.World; namespace Game.Systems.Movement @@ -15,6 +16,21 @@ public unsafe class CourseLogic : BaseEntityLogic public bool TryStartMovement(List sentPath, CourseIntent intent) { var owner = Game.Players.GetPlayer(Entity.OwnerID); + + var courseIntent = EventPool.Get(); + courseIntent.Intent = intent; + courseIntent.Path = sentPath; + courseIntent.Entity = Entity; + courseIntent.Cancelled = false; + Entity.Components.CallEvent(courseIntent); + EventPool.Return(courseIntent); + + if (courseIntent.Cancelled) + { + Game.Log.Debug("Course Cancelled by other system"); + return false; + } + foreach (var position in sentPath) { var tile = Game.World.Map.GetTile(position.X, position.Y); diff --git a/LisergyServer/Game/Systems/Harvesting/HarvestingLogic.cs b/LisergyServer/Game/Systems/Harvesting/HarvestingLogic.cs index 1cdc6cca9..1db43db73 100644 --- a/LisergyServer/Game/Systems/Harvesting/HarvestingLogic.cs +++ b/LisergyServer/Game/Systems/Harvesting/HarvestingLogic.cs @@ -128,8 +128,6 @@ public HarvestingTaskState CalculateCurrentState() var harvesting = Entity.Components.Get(); var tile = Game.World.Map.GetTile(harvesting.Tile.X, harvesting.Tile.Y); var startTime = DateTime.FromBinary(harvesting.StartedAt); - - // var tileSpec = Game.Specs.Tiles[tile.SpecId]; if (!tileSpec.ResourceSpotSpecId.HasValue) { diff --git a/LisergyServer/Game/Systems/Party/PartyEntity.cs b/LisergyServer/Game/Systems/Party/PartyEntity.cs index 697f48417..c67570572 100644 --- a/LisergyServer/Game/Systems/Party/PartyEntity.cs +++ b/LisergyServer/Game/Systems/Party/PartyEntity.cs @@ -24,6 +24,7 @@ public PartyEntity(IGame game, GameId owner) : base(game, owner) Components.Add(); Components.Add(); Components.Add(); + Components.Add(); Components.Add(); Components.Get().MaxWeight = game.Specs.Harvesting.StartingPartyCargoWeight; Components.Get().MoveDelay = TimeSpan.FromSeconds(1); diff --git a/LisergyServer/Game/Systems/Player/PlayerEntity.cs b/LisergyServer/Game/Systems/Player/PlayerEntity.cs index 3f32d9e53..8960e642d 100644 --- a/LisergyServer/Game/Systems/Player/PlayerEntity.cs +++ b/LisergyServer/Game/Systems/Player/PlayerEntity.cs @@ -11,6 +11,7 @@ using System.Collections.Generic; using System.Linq; using System.Xml.Linq; +using Game.Systems.ActionPoints; namespace Game.Systems.Player { @@ -33,6 +34,7 @@ public PlayerEntity(PlayerProfile profile, IGame game) Game = game; Components = new ComponentSet(this); Components.Add(); + Components.Add(); Components.AddReference(new PlayerData()); Components.AddReference(new VisibilityReferences()); Profile = profile; diff --git a/LisergyServer/Game/Systems/Player/PlayerLogic.cs b/LisergyServer/Game/Systems/Player/PlayerLogic.cs index a6cb308fd..b8cc95a81 100644 --- a/LisergyServer/Game/Systems/Player/PlayerLogic.cs +++ b/LisergyServer/Game/Systems/Player/PlayerLogic.cs @@ -9,13 +9,14 @@ using GameData; using GameData.Specs; using System.Collections.Generic; +using Game.Systems.ActionPoints; namespace Game.Systems.Player { /// /// Interacts with player specific data /// - public class PlayerLogic : BaseEntityLogic + public unsafe class PlayerLogic : BaseEntityLogic { private PlayerData Data => Entity.Components.GetReference(); @@ -80,6 +81,16 @@ public void PlaceNewPlayer(TileEntity t) return; } + public void TakeTurn() + { + var p = Entity as PlayerEntity; + foreach (var party in p.Parties) + { + party.EntityLogic.ActionPoints.SetActionPoints(1); + } + p.Components.GetPointer()->Turns++; + } + /// /// Record a battle header of a battle that happened for this player /// diff --git a/LisergyServer/Game/Systems/Player/PlayerSystem.cs b/LisergyServer/Game/Systems/Player/PlayerSystem.cs index 6e6668360..e02a1e182 100644 --- a/LisergyServer/Game/Systems/Player/PlayerSystem.cs +++ b/LisergyServer/Game/Systems/Player/PlayerSystem.cs @@ -1,5 +1,7 @@ using Game.Engine.ECS; +using Game.Network.ClientPackets; using Game.Network.ServerPackets; +using Game.Systems.ActionPoints; using Game.Systems.FogOfWar; namespace Game.Systems.Player @@ -13,9 +15,15 @@ public PlayerSystem(LisergyGame game) : base(game) public override void RegisterListeners() { Game.Network.On(OnBattleResultPacket); + Game.Network.On(TakeTurn); EntityEvents.On(OnTileVisibilityChanged); } + + private static void TakeTurn(TakeTurnPacket p) + { + p.Sender.EntityLogic.Player.TakeTurn(); + } /// /// Received from battle server diff --git a/LisergyServer/LisergyServer.sln b/LisergyServer/LisergyServer.sln index 20c51b8df..6fd115234 100644 --- a/LisergyServer/LisergyServer.sln +++ b/LisergyServer/LisergyServer.sln @@ -9,7 +9,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Game", "Game\Game.csproj", EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GameData", "GameData\GameData.csproj", "{5B793397-7989-4CAE-A572-5AC909B8F91F}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ServerTests", "ServerTests\ServerTests.csproj", "{4584F2EF-E15F-479C-BEC9-3DEDDC525658}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnitTests", "UnitTests\UnitTests.csproj", "{4584F2EF-E15F-479C-BEC9-3DEDDC525658}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GameDataTest", "GameDataTest\GameDataTest.csproj", "{C243FA12-2F86-4682-8FB9-BFE65D0C3337}" EndProject @@ -30,6 +30,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GameServices", "GameService EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SDL", "RedisMagic\SDL.csproj", "{FC963FB0-0E8C-4A83-837A-948CD48EDAEC}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SmokeTests", "SmokeTests\SmokeTests.csproj", "{483A5A4E-2B2C-4A7C-B82F-26EECD4B7FC7}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -80,6 +82,10 @@ Global {FC963FB0-0E8C-4A83-837A-948CD48EDAEC}.Debug|Any CPU.Build.0 = Debug|Any CPU {FC963FB0-0E8C-4A83-837A-948CD48EDAEC}.Release|Any CPU.ActiveCfg = Release|Any CPU {FC963FB0-0E8C-4A83-837A-948CD48EDAEC}.Release|Any CPU.Build.0 = Release|Any CPU + {483A5A4E-2B2C-4A7C-B82F-26EECD4B7FC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {483A5A4E-2B2C-4A7C-B82F-26EECD4B7FC7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {483A5A4E-2B2C-4A7C-B82F-26EECD4B7FC7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {483A5A4E-2B2C-4A7C-B82F-26EECD4B7FC7}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/LisergyServer/ServerTests/Integration/SanityTest.cs b/LisergyServer/SmokeTests/SanityTest.cs similarity index 85% rename from LisergyServer/ServerTests/Integration/SanityTest.cs rename to LisergyServer/SmokeTests/SanityTest.cs index aaa63c8fc..3c1657ccc 100644 --- a/LisergyServer/ServerTests/Integration/SanityTest.cs +++ b/LisergyServer/SmokeTests/SanityTest.cs @@ -49,37 +49,7 @@ public async Task TestDisconnection() var result = await _client.WaitFor(); Assert.IsNull(result); } - - [Test] - [NonParallelizable] - public async Task TestReconnection() - { - var mapPlacementUpdates = new List(); - _client.Modules.Components.OnComponentUpdate((e, oldValue, newValue) => - { - mapPlacementUpdates.Add(e); - }); - _client.Modules.Account.SendAuthenticationPacket("abc", "def"); - var result = await _client.WaitFor(); - Assert.NotNull(result); - - _client.Network.Disconnect(); - _client.ReceivedPackets.Clear(); - _client.Network.Tick(); - mapPlacementUpdates.Clear(); - - _client.Modules.Account.SendAuthenticationPacket("abc", "def"); - result = await _client.WaitFor(); - Assert.AreEqual(true, result.Success); - - await _client.WaitFor(e => e.Type == EntityType.Party); - await _client.WaitFor(e => e.Type == EntityType.Dungeon); - await _client.WaitFor(e => e.Type == EntityType.Building); - - Assert.AreEqual(2, mapPlacementUpdates.Count); // Party, Dungeon - Assert.AreEqual(1, mapPlacementUpdates.Count(c => c is PartyEntity)); - } - + [Test] [NonParallelizable] public async Task SmokeTestFlow() diff --git a/LisergyServer/SmokeTests/SmokeTests.csproj b/LisergyServer/SmokeTests/SmokeTests.csproj new file mode 100644 index 000000000..63b5d0960 --- /dev/null +++ b/LisergyServer/SmokeTests/SmokeTests.csproj @@ -0,0 +1,25 @@ + + + + net6.0 + enable + + false + + + + + + + + + + + + + + + + + + diff --git a/LisergyServer/ServerTests/Integration/Stubs/TestGameClient.cs b/LisergyServer/SmokeTests/Stubs/TestGameClient.cs similarity index 100% rename from LisergyServer/ServerTests/Integration/Stubs/TestGameClient.cs rename to LisergyServer/SmokeTests/Stubs/TestGameClient.cs diff --git a/LisergyServer/ServerTests/Integration/TwoPlayersTest.cs b/LisergyServer/SmokeTests/TwoPlayersTest.cs similarity index 99% rename from LisergyServer/ServerTests/Integration/TwoPlayersTest.cs rename to LisergyServer/SmokeTests/TwoPlayersTest.cs index b2b6e496e..6c4749611 100644 --- a/LisergyServer/ServerTests/Integration/TwoPlayersTest.cs +++ b/LisergyServer/SmokeTests/TwoPlayersTest.cs @@ -8,6 +8,7 @@ namespace ServerTests.Integration { + /* public class TwoPlayerTest { StandaloneServer _server; @@ -84,4 +85,5 @@ public async Task SmokeTestP1Disconnects() Assert.NotNull(p2Received); } } + */ } diff --git a/LisergyServer/ServerTests/.gitignore b/LisergyServer/UnitTests/.gitignore similarity index 100% rename from LisergyServer/ServerTests/.gitignore rename to LisergyServer/UnitTests/.gitignore diff --git a/LisergyServer/ServerTests/Unit/GlobalTestSetup.cs b/LisergyServer/UnitTests/GlobalTestSetup.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/GlobalTestSetup.cs rename to LisergyServer/UnitTests/GlobalTestSetup.cs diff --git a/LisergyServer/ServerTests/Properties/launchSettings.json b/LisergyServer/UnitTests/Properties/launchSettings.json similarity index 100% rename from LisergyServer/ServerTests/Properties/launchSettings.json rename to LisergyServer/UnitTests/Properties/launchSettings.json diff --git a/LisergyServer/ServerTests/Unit/Stubs/StubBattle.cs b/LisergyServer/UnitTests/Stubs/StubBattle.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/Stubs/StubBattle.cs rename to LisergyServer/UnitTests/Stubs/StubBattle.cs diff --git a/LisergyServer/ServerTests/Unit/Stubs/StubBigMapGame.cs b/LisergyServer/UnitTests/Stubs/StubBigMapGame.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/Stubs/StubBigMapGame.cs rename to LisergyServer/UnitTests/Stubs/StubBigMapGame.cs diff --git a/LisergyServer/ServerTests/Unit/Stubs/StubGame.cs b/LisergyServer/UnitTests/Stubs/StubGame.cs similarity index 98% rename from LisergyServer/ServerTests/Unit/Stubs/StubGame.cs rename to LisergyServer/UnitTests/Stubs/StubGame.cs index 885e7c00c..85bcfcdb8 100644 --- a/LisergyServer/ServerTests/Unit/Stubs/StubGame.cs +++ b/LisergyServer/UnitTests/Stubs/StubGame.cs @@ -12,6 +12,7 @@ using System; using System.Collections.Generic; using System.Xml.Linq; +using Game.Systems.Party; namespace ServerTests { @@ -95,6 +96,7 @@ public TestServerPlayer CreatePlayer(in int x = 10, in int y = 10) var tile = World.Map.GetTile(x, y); player.EntityLogic.Player.PlaceNewPlayer(World.Map.GetTile(x, y)); Entities.DeltaCompression.SendDeltaPackets(player); + //player.Parties[0].Components.Remove(); return player; } diff --git a/LisergyServer/ServerTests/Unit/Stubs/StubPlayer.cs b/LisergyServer/UnitTests/Stubs/StubPlayer.cs similarity index 97% rename from LisergyServer/ServerTests/Unit/Stubs/StubPlayer.cs rename to LisergyServer/UnitTests/Stubs/StubPlayer.cs index 5efc8012b..76385838f 100644 --- a/LisergyServer/ServerTests/Unit/Stubs/StubPlayer.cs +++ b/LisergyServer/UnitTests/Stubs/StubPlayer.cs @@ -56,7 +56,9 @@ public void SendTestPacket(EventType ev) where EventType : BasePacket public void SendMoveRequest(PartyEntity p, TileEntity t, CourseIntent intent) { + var path = t.Chunk.Map.FindPath(p.Tile, t).Select(pa => new Location(pa.X, pa.Y)).ToList(); + p.EntityLogic.ActionPoints.SetActionPoints((byte)path.Count); var ev = new MoveRequestPacket() { Path = path, PartyIndex = p.PartyIndex, Intent = intent }; ev.Sender = this; _network.IncomingPackets.Call(ev); diff --git a/LisergyServer/UnitTests/TestActionPoints.cs b/LisergyServer/UnitTests/TestActionPoints.cs new file mode 100644 index 000000000..6f95b99f0 --- /dev/null +++ b/LisergyServer/UnitTests/TestActionPoints.cs @@ -0,0 +1,90 @@ +using Game.Engine.DataTypes; +using Game.Events.ServerEvents; +using Game.Network.ClientPackets; +using Game.Systems.Battler; +using Game.Systems.FogOfWar; +using Game.Systems.Map; +using Game.Systems.Movement; +using Game.Systems.Party; +using Game.World; +using NUnit.Framework; +using ServerTests; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace UnitTests +{ + public class TestActionPoints + { + private TestGame _game; + private List _path; + private TestServerPlayer _player; + private PartyEntity _party; + + [SetUp] + public void Setup() + { + _game = new TestGame(); + _player = _game.GetTestPlayer(); + _path = new List(); + _party = _player.GetParty(0); + } + + private void SendMoveRequest() + { + var ev = new MoveRequestPacket() { Path = _path, PartyIndex = _party.PartyIndex }; + ev.Sender = _player; + _game.HandleClientEvent(_player, ev); + } + + [Test] + public void TestCourseNoActionPoint() + { + var tile = _party.Tile; + var next = tile.GetNeighbor(Direction.SOUTH); + _path.Add(new Location(next.X, next.Y)); + + SendMoveRequest(); + + Assert.AreEqual(0, _game.GameScheduler.PendingTasks); + } + + [Test] + public void TestCourseAfterActionPoint() + { + var tile = _party.Tile; + var next = tile.GetNeighbor(Direction.SOUTH); + _path.Add(new Location(next.X, next.Y)); + + _party.EntityLogic.ActionPoints.SetActionPoints(1); + SendMoveRequest(); + + Assert.AreEqual(1, _game.GameScheduler.PendingTasks); + Assert.IsTrue(_party.Course != null); + } + + [Test] + public void TestActionPointDeducted() + { + var tile = _party.Tile; + var next = tile.GetNeighbor(Direction.SOUTH); + _path.Add(new Location(next.X, next.Y)); + + _party.EntityLogic.ActionPoints.SetActionPoints(1); + SendMoveRequest(); + + Assert.AreEqual(0, _party.EntityLogic.ActionPoints.GetActionPoints()); + } + + [Test] + public void TestTakingTurnIncreaseActionPoint() + { + Assert.AreEqual(0, _party.EntityLogic.ActionPoints.GetActionPoints()); + + _player.EntityLogic.Player.TakeTurn(); + + Assert.AreEqual(1, _party.EntityLogic.ActionPoints.GetActionPoints()); + } + } +} \ No newline at end of file diff --git a/LisergyServer/ServerTests/Unit/TestAutoBattle.cs b/LisergyServer/UnitTests/TestAutoBattle.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestAutoBattle.cs rename to LisergyServer/UnitTests/TestAutoBattle.cs diff --git a/LisergyServer/ServerTests/Unit/TestBattleActions.cs b/LisergyServer/UnitTests/TestBattleActions.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestBattleActions.cs rename to LisergyServer/UnitTests/TestBattleActions.cs diff --git a/LisergyServer/ServerTests/Unit/TestBattleGroup.cs b/LisergyServer/UnitTests/TestBattleGroup.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestBattleGroup.cs rename to LisergyServer/UnitTests/TestBattleGroup.cs diff --git a/LisergyServer/ServerTests/Unit/TestBattleListener.cs b/LisergyServer/UnitTests/TestBattleListener.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestBattleListener.cs rename to LisergyServer/UnitTests/TestBattleListener.cs diff --git a/LisergyServer/ServerTests/Unit/TestBattleMemory.cs b/LisergyServer/UnitTests/TestBattleMemory.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestBattleMemory.cs rename to LisergyServer/UnitTests/TestBattleMemory.cs diff --git a/LisergyServer/ServerTests/Unit/TestBuilding.cs b/LisergyServer/UnitTests/TestBuilding.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestBuilding.cs rename to LisergyServer/UnitTests/TestBuilding.cs diff --git a/LisergyServer/ServerTests/Unit/TestCargo.cs b/LisergyServer/UnitTests/TestCargo.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestCargo.cs rename to LisergyServer/UnitTests/TestCargo.cs diff --git a/LisergyServer/ServerTests/Unit/TestChunk.cs b/LisergyServer/UnitTests/TestChunk.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestChunk.cs rename to LisergyServer/UnitTests/TestChunk.cs diff --git a/LisergyServer/ServerTests/Unit/TestCourses.cs b/LisergyServer/UnitTests/TestCourses.cs similarity index 97% rename from LisergyServer/ServerTests/Unit/TestCourses.cs rename to LisergyServer/UnitTests/TestCourses.cs index cbd35cc0e..c2e23b826 100644 --- a/LisergyServer/ServerTests/Unit/TestCourses.cs +++ b/LisergyServer/UnitTests/TestCourses.cs @@ -29,10 +29,12 @@ public void Setup() _player = _game.GetTestPlayer(); _path = new List(); _party = _player.GetParty(0); + _party.EntityLogic.ActionPoints.SetActionPoints(255); } private void SendMoveRequest() { + _party.EntityLogic.ActionPoints.SetActionPoints((byte)_path.Count); var ev = new MoveRequestPacket() { Path = _path, PartyIndex = _party.PartyIndex }; ev.Sender = _player; _game.HandleClientEvent(_player, ev); @@ -92,6 +94,7 @@ public void TestMoveOutsidePlayerVision() _player.ReceivedPackets.Clear(); // Moving player2 to 5 7 which is slightly outside p1 vision + player2.EntityLogic.Player.TakeTurn(); _path.Add(new Location(5, 7)); _game.HandleClientEvent(player2, new MoveRequestPacket() { Path = _path, PartyIndex = player2Party.PartyIndex }); _game.GameScheduler.Tick(_game.GameScheduler.Now + player2Party.Course.Delay); diff --git a/LisergyServer/ServerTests/Unit/TestDungeon.cs b/LisergyServer/UnitTests/TestDungeon.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestDungeon.cs rename to LisergyServer/UnitTests/TestDungeon.cs diff --git a/LisergyServer/ServerTests/Unit/TestECS.cs b/LisergyServer/UnitTests/TestECS.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestECS.cs rename to LisergyServer/UnitTests/TestECS.cs diff --git a/LisergyServer/ServerTests/Unit/TestEventBus.cs b/LisergyServer/UnitTests/TestEventBus.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestEventBus.cs rename to LisergyServer/UnitTests/TestEventBus.cs diff --git a/LisergyServer/ServerTests/TestFastScheduler.cs b/LisergyServer/UnitTests/TestFastScheduler.cs similarity index 100% rename from LisergyServer/ServerTests/TestFastScheduler.cs rename to LisergyServer/UnitTests/TestFastScheduler.cs diff --git a/LisergyServer/ServerTests/Unit/TestGameIds.cs b/LisergyServer/UnitTests/TestGameIds.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestGameIds.cs rename to LisergyServer/UnitTests/TestGameIds.cs diff --git a/LisergyServer/ServerTests/Unit/TestHarvesting.cs b/LisergyServer/UnitTests/TestHarvesting.cs similarity index 98% rename from LisergyServer/ServerTests/Unit/TestHarvesting.cs rename to LisergyServer/UnitTests/TestHarvesting.cs index 94d9c3172..337102544 100644 --- a/LisergyServer/ServerTests/Unit/TestHarvesting.cs +++ b/LisergyServer/UnitTests/TestHarvesting.cs @@ -34,8 +34,10 @@ public void Setup() _party = _player.GetParty(0); _logs = _game.TestMap.GetTile(5, 5); _party.EntityLogic.Map.SetPosition(_logs.GetNeighbor(Direction.SOUTH)); + _party.EntityLogic.ActionPoints.SetActionPoints(255); _scheduler = _game.Scheduler as GameScheduler; _logs.SpecId = TestTiles.FOREST.ID; + } [Test] @@ -181,7 +183,7 @@ public void TestFinishHarvestingHalfTwice() { var tileResourceBefore = _logs.Get(); - _party.EntityLogic.Harvesting.StartHarvesting(_logs); + Assert.IsTrue(_party.EntityLogic.Harvesting.StartHarvesting(_logs)); var totalTime = _logs.HarvestPointSpec.ResourceAmount * _logs.HarvestPointSpec.HarvestTimePerUnit; // Advance half of the harvesting time diff --git a/LisergyServer/ServerTests/Unit/TestJoiningWorld.cs b/LisergyServer/UnitTests/TestJoiningWorld.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestJoiningWorld.cs rename to LisergyServer/UnitTests/TestJoiningWorld.cs diff --git a/LisergyServer/ServerTests/Unit/TestLineOfSight.cs b/LisergyServer/UnitTests/TestLineOfSight.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestLineOfSight.cs rename to LisergyServer/UnitTests/TestLineOfSight.cs diff --git a/LisergyServer/ServerTests/Unit/TestMap.cs b/LisergyServer/UnitTests/TestMap.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestMap.cs rename to LisergyServer/UnitTests/TestMap.cs diff --git a/LisergyServer/ServerTests/Unit/TestParty.cs b/LisergyServer/UnitTests/TestParty.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestParty.cs rename to LisergyServer/UnitTests/TestParty.cs diff --git a/LisergyServer/ServerTests/Unit/TestPathfinding.cs b/LisergyServer/UnitTests/TestPathfinding.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestPathfinding.cs rename to LisergyServer/UnitTests/TestPathfinding.cs diff --git a/LisergyServer/ServerTests/Unit/TestPerformance.cs b/LisergyServer/UnitTests/TestPerformance.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestPerformance.cs rename to LisergyServer/UnitTests/TestPerformance.cs diff --git a/LisergyServer/ServerTests/Unit/TestPersistence.cs b/LisergyServer/UnitTests/TestPersistence.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestPersistence.cs rename to LisergyServer/UnitTests/TestPersistence.cs diff --git a/LisergyServer/ServerTests/Unit/TestResources.cs b/LisergyServer/UnitTests/TestResources.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestResources.cs rename to LisergyServer/UnitTests/TestResources.cs diff --git a/LisergyServer/ServerTests/Unit/TestScheduler.cs b/LisergyServer/UnitTests/TestScheduler.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestScheduler.cs rename to LisergyServer/UnitTests/TestScheduler.cs diff --git a/LisergyServer/ServerTests/Unit/TestSerialization.cs b/LisergyServer/UnitTests/TestSerialization.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestSerialization.cs rename to LisergyServer/UnitTests/TestSerialization.cs diff --git a/LisergyServer/ServerTests/Unit/TestSimpleBattle.cs b/LisergyServer/UnitTests/TestSimpleBattle.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestSimpleBattle.cs rename to LisergyServer/UnitTests/TestSimpleBattle.cs diff --git a/LisergyServer/ServerTests/Unit/TestSpecs.cs b/LisergyServer/UnitTests/TestSpecs.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestSpecs.cs rename to LisergyServer/UnitTests/TestSpecs.cs diff --git a/LisergyServer/ServerTests/Unit/TestTileComponents.cs b/LisergyServer/UnitTests/TestTileComponents.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestTileComponents.cs rename to LisergyServer/UnitTests/TestTileComponents.cs diff --git a/LisergyServer/ServerTests/Unit/TestTiles.cs b/LisergyServer/UnitTests/TestTiles.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestTiles.cs rename to LisergyServer/UnitTests/TestTiles.cs diff --git a/LisergyServer/ServerTests/Unit/TestUnit.cs b/LisergyServer/UnitTests/TestUnit.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestUnit.cs rename to LisergyServer/UnitTests/TestUnit.cs diff --git a/LisergyServer/ServerTests/Unit/TestUtils.cs b/LisergyServer/UnitTests/TestUtils.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestUtils.cs rename to LisergyServer/UnitTests/TestUtils.cs diff --git a/LisergyServer/ServerTests/Unit/TestWorld.cs b/LisergyServer/UnitTests/TestWorld.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestWorld.cs rename to LisergyServer/UnitTests/TestWorld.cs diff --git a/LisergyServer/ServerTests/Unit/TestWorldEvents.cs b/LisergyServer/UnitTests/TestWorldEvents.cs similarity index 100% rename from LisergyServer/ServerTests/Unit/TestWorldEvents.cs rename to LisergyServer/UnitTests/TestWorldEvents.cs diff --git a/LisergyServer/ServerTests/ServerTests.csproj b/LisergyServer/UnitTests/UnitTests.csproj similarity index 94% rename from LisergyServer/ServerTests/ServerTests.csproj rename to LisergyServer/UnitTests/UnitTests.csproj index 5bee94785..9dc036f6f 100644 --- a/LisergyServer/ServerTests/ServerTests.csproj +++ b/LisergyServer/UnitTests/UnitTests.csproj @@ -6,6 +6,8 @@ false true + + ServerTests diff --git a/Tools/.DS_Store b/Tools/.DS_Store new file mode 100644 index 000000000..b9c6f24ea Binary files /dev/null and b/Tools/.DS_Store differ diff --git a/lfs/.DS_Store b/lfs/.DS_Store new file mode 100644 index 000000000..7fdc0a6d1 Binary files /dev/null and b/lfs/.DS_Store differ