예제 #1
0
    private IEnumerator TakeItemRoutine(int itemIndex)
    {
        var request = new MarketRequests.PlayerTakeLootRequest(PlayerShip.LocalPlayer, Container, itemIndex);

        SpaceTraderConfig.Market.PlayerTakeLoot(request);

        do
        {
            yield return null;
        }
        while (!request.Done);

        if (request.Error != null)
        {
            GUIController.Current.BroadcastMessage("OnPlayerError", request.Error);
        }
    }
예제 #2
0
 public void PlayerTakeLoot(PlayerTakeLootRequest request)
 {
     SpaceTraderConfig.Instance.StartCoroutine(TakeLoot(request));
 }
예제 #3
0
    private IEnumerator TakeLoot(PlayerTakeLootRequest request)
    {
        var items = request.Loot.Ship.Cargo;
        var activator = request.Player.Ship;
        
        var freeSpace = activator.Cargo.FreeCapacity;

        const string notEnoughSpace = "Not enough free cargo space";

        if (request.ItemIndex < 0)
        {
            var itemCount = items.ItemCount;

            if (freeSpace >= itemCount)
            {
                for (int slot = 0; slot < items.Size; ++slot)
                {
                    if (items.IsIndexFree(slot))
                    {
                        continue;
                    }

                    var item = items[slot];
                    activator.Cargo.Add(item);
                    items.RemoveAt(slot);
                }
                
                request.Done = true;
            }
            else
            {
                request.Error = notEnoughSpace;
            }
        }
        else
        {
            if (freeSpace > 0)
            {
                if (!items.IsIndexFree(request.ItemIndex) && items.IsValidIndex(request.ItemIndex))
                {
                    var itemType = items[request.ItemIndex];

                    activator.Cargo.Add(itemType);
                    items.RemoveAt(request.ItemIndex);

                    request.Done = true;
                }
                else
                {
                    request.Error = "Item not found";
                }
            }
            else
            {
                request.Error = notEnoughSpace;
            }
        }

        if (items.FreeCapacity == items.Size)
        {
            Destroy(request.Loot.gameObject);
        }

        yield break;
    }