public void CanSwapItemToItem()
        {
            // Arrange
            const string testName = "CanSwapItemToItem";

            SetupScenario(testName,
                          out var lifecycleManager,
                          out var nodeConfigs);

            CreatePlayer(testName,
                         nodeConfigs[0],
                         lifecycleManager,
                         out var player);

            CreateItem(TutorialScanner.Archetype.Name,
                       nodeConfigs[0],
                       lifecycleManager,
                       out var item1,
                       out var item1ContainerIndex,
                       out var item1Container);

            CreateItem(TutorialScanner.Archetype.Name,
                       nodeConfigs[0],
                       lifecycleManager,
                       out var item2,
                       out var item2ContainerIndex,
                       out var item2Container);

            AssignToPlayer(player.Entity.Id, item2.Entity.Id, lifecycleManager, out var playerTuple);

            // Assert Not Swapped and correctly assigned
            Assert.AreEqual(item1Container.Item,
                            item1.Entity.Id);
            Assert.AreNotEqual(item2Container.Item,
                               item2.Entity.Id);

            // Act
            var swapCommand = new SwapInventoryItemCommand
            {
                PlayerId        = player.Entity.Id,
                SubsystemId     = nodeConfigs[0].EntityId,
                InventoryItemId = item2.Entity.Id,
                ContainerId     = item1ContainerIndex,
                SubsystemItemId = item1.Entity.Id,
            };

            lifecycleManager.ECSRoot.ECS.EnqueueCommand(swapCommand);

            lifecycleManager.ECSRoot.ECS.Tick();

            // Assert Swapped
            Assert.AreEqual(item1Container.Item, item2.Entity.Id);
            Assert.AreEqual(playerTuple.Component2.Items[0].Item.Value, item1.Entity.Id);
        }
        public void CanSwapItemToEmptyInventory()
        {
            // Arrange
            const string testName = "CanSwapItemToEmptyInventory";

            SetupScenario(testName,
                          out var lifecycleManager,
                          out var nodeConfigs);

            CreatePlayer(testName,
                         nodeConfigs[0],
                         lifecycleManager,
                         out var player);

            CreateItem(TutorialScanner.Archetype.Name,
                       nodeConfigs[0],
                       lifecycleManager,
                       out var item1,
                       out var item1ContainerIndex,
                       out var item1Container);

            GetSubsystemItemStorage(nodeConfigs[0],
                                    lifecycleManager,
                                    out var subsystemItemStorage);

            Assert.AreEqual(subsystemItemStorage.Component2.Items[0].Item.Value,
                            item1.Entity.Id);
            Assert.IsNull(subsystemItemStorage.Component2.Items[2].Item);
            Assert.IsNull(subsystemItemStorage.Component2.Items[3].Item);

            // Act
            var swapCommand = new SwapInventoryItemCommand
            {
                PlayerId        = player.Entity.Id,
                SubsystemId     = nodeConfigs[0].EntityId,
                InventoryItemId = null,
                ContainerId     = item1ContainerIndex,
                SubsystemItemId = item1.Entity.Id,
            };

            lifecycleManager.ECSRoot.ECS.EnqueueCommand(swapCommand);

            lifecycleManager.ECSRoot.ECS.Tick();

            GetPlayerTuple(player.Entity.Id, lifecycleManager, out var playerTuple);

            // Assert Swapped
            Assert.IsNull(item1Container.Item);
            Assert.AreEqual(playerTuple.Component2.Items[0].Item.Value, item1.Entity.Id);
        }
Пример #3
0
        public static void SwapInventoryItem(int subsystemItemid, int subsystemContainerId, int inventoryItemId)
        {
            Log($"Request SwapInventoryItem fromItem: {inventoryItemId} to: {subsystemItemid}");
            var command = new SwapInventoryItemCommand
            {
                PlayerId        = Director.Player.Id,
                SubsystemId     = Director.Player.CurrentLocationEntity.Id,
                SubsystemItemId = subsystemItemid,
                ContainerId     = subsystemContainerId,
                InventoryItemId = inventoryItemId
            };

            IssueCommand(command);
        }
        public void CantSwapOnAnotherSystem()
        {
            // Arrange
            const string testName = "CantSwapOnAnotherSystem";

            SetupScenario(testName,
                          out var lifecycleManager,
                          out var nodeConfigs);

            CreatePlayer(testName,
                         nodeConfigs[0],
                         lifecycleManager,
                         out var player);

            CreateItem(TutorialScanner.Archetype.Name,
                       nodeConfigs[1],
                       lifecycleManager,
                       out var item1,
                       out var item1ContainerIndex,
                       out var item1Container);

            CreateItem(TutorialScanner.Archetype.Name,
                       nodeConfigs[0],
                       lifecycleManager,
                       out var item2,
                       out var item2ContainerIndex,
                       out var item2Container);

            AssignToPlayer(player.Entity.Id, item2.Entity.Id, lifecycleManager, out var playerTuple);

            GetSubsystemItemStorage(nodeConfigs[0],
                                    lifecycleManager,
                                    out var subsystem1ItemStorage);

            GetSubsystemItemStorage(nodeConfigs[1],
                                    lifecycleManager,
                                    out var subsystem2ItemStorage);

            // Assert setup has 1 item in other system
            Assert.IsNull(subsystem1ItemStorage.Component2.Items[0].Item);
            Assert.IsNull(subsystem1ItemStorage.Component2.Items[1].Item);
            Assert.IsNull(subsystem1ItemStorage.Component2.Items[2].Item);
            Assert.IsNull(subsystem1ItemStorage.Component2.Items[3].Item);

            Assert.AreEqual(subsystem2ItemStorage.Component2.Items[0].Item, item1.Entity.Id);
            Assert.IsNull(subsystem2ItemStorage.Component2.Items[1].Item);
            Assert.IsNull(subsystem2ItemStorage.Component2.Items[2].Item);
            Assert.IsNull(subsystem2ItemStorage.Component2.Items[3].Item);

            // Act
            var swapCommand = new SwapInventoryItemCommand
            {
                PlayerId        = player.Entity.Id,
                SubsystemId     = nodeConfigs[0].EntityId,
                InventoryItemId = item2.Entity.Id,
                ContainerId     = item2ContainerIndex,
                SubsystemItemId = item1.Entity.Id,
            };

            lifecycleManager.ECSRoot.ECS.EnqueueCommand(swapCommand);

            lifecycleManager.ECSRoot.ECS.Tick();

            // Assert still has 1 item in other system
            Assert.IsNull(subsystem1ItemStorage.Component2.Items[0].Item);
            Assert.IsNull(subsystem1ItemStorage.Component2.Items[1].Item);
            Assert.IsNull(subsystem1ItemStorage.Component2.Items[2].Item);
            Assert.IsNull(subsystem1ItemStorage.Component2.Items[3].Item);

            Assert.AreEqual(subsystem2ItemStorage.Component2.Items[0].Item, item1.Entity.Id);
            Assert.IsNull(subsystem2ItemStorage.Component2.Items[1].Item);
            Assert.IsNull(subsystem2ItemStorage.Component2.Items[2].Item);
            Assert.IsNull(subsystem2ItemStorage.Component2.Items[3].Item);
        }
        public void CantSwapUnreleasableWithReleasableItem()
        {
            // Arrange
            const string testName = "CantSwapUnreleasableWithReleasableItem";

            var nodeConfigs = new[]
            {
                new NodeConfig(
                    0,
                    0,
                    AntivirusWorkstation.Archetype),

                new NodeConfig(
                    0,
                    1,
                    SubsystemNode.Archetype),
            };

            SetupScenario(testName, out var lifecycleManager, nodeConfigs);

            CreatePlayer(testName,
                         nodeConfigs[0],
                         lifecycleManager,
                         out var player);

            CreateItem(TutorialScanner.Archetype.Name,
                       nodeConfigs[0],
                       lifecycleManager,
                       out var item2,
                       out var item2ContainerIndex,
                       out var item2Container);

            AssignToPlayer(player.Entity.Id, item2.Entity.Id, lifecycleManager, out var playerTuple);

            GetSubsystemItemStorage(nodeConfigs[0],
                                    lifecycleManager,
                                    out var subsystem1ItemStorage);

            var item1ContainerIndex = 0;
            var item1Id             = subsystem1ItemStorage.Component2.Items[item1ContainerIndex].Item;

            // Assert items are in correct locatioons
            Assert.NotNull(subsystem1ItemStorage.Component2.Items[0].Item);
            Assert.Null(subsystem1ItemStorage.Component2.Items[1].Item);
            Assert.AreEqual(subsystem1ItemStorage.Component2.Items[0].Item.Value, item1Id);

            // Act
            var swapCommand = new SwapInventoryItemCommand
            {
                PlayerId        = player.Entity.Id,
                SubsystemId     = nodeConfigs[0].EntityId,
                InventoryItemId = item2.Entity.Id,
                ContainerId     = item2ContainerIndex,
                SubsystemItemId = item1Id.Value,
            };

            lifecycleManager.ECSRoot.ECS.EnqueueCommand(swapCommand);

            lifecycleManager.ECSRoot.ECS.Tick();

            // Assert items are still in original locations
            Assert.AreEqual(subsystem1ItemStorage.Component2.Items[0].Item.Value, item1Id);
            Assert.AreEqual(playerTuple.Component2.Items[0].Item.Value, item2.Entity.Id);
        }