コード例 #1
0
ファイル: TradeShip.cs プロジェクト: suspendmode/seaunity
    /// <summary>
    /// Sell all of the ship's cargo at the specified town.
    /// </summary>

    int SellCargo(Town town)
    {
        int profit = 0;

        for (int i = cargo.Count; i > 0;)
        {
            CargoEntry ent = cargo[--i];

            if (ent.owner != town)
            {
                Town.ResourceEntry res = town.resources[ent.id];

                if (res.production < 0)
                {
                    int available = ent.amount;
                    int demand    = -Mathf.RoundToInt(res.warehouse);

                    // Remove this cargo entry from the ship's hold
                    cargo.RemoveAt(i);

                    // Move the ship's contents into the warehouse
                    res.warehouse += available;

                    // Now it's time to calculate how much the town will pay for these goods
                    int amount = Mathf.Max(0, demand + (res.production * 3) / 2);
                    amount = Mathf.Min(available, amount);

                    // High demand
                    if (amount > 0)
                    {
                        profit    += amount * 7;
                        demand    -= amount;
                        available -= amount;
                    }

                    // Medium demand
                    if (available > 0 && demand > 0)
                    {
                        amount     = Mathf.Min(available, demand);
                        profit    += amount * 5;
                        demand    -= amount;
                        available -= amount;
                    }

                    // Low demand
                    if (available > 0)
                    {
                        profit += available * 2;
                    }
                }
            }
        }
        return(profit);
    }
コード例 #2
0
ファイル: TradeShip.cs プロジェクト: suspendmode/seaunity
    /// <summary>
    /// Load the town's exported cargo onto the ship.
    /// </summary>

    void LoadCargo(Town town)
    {
        int available = cargoAllowance;
        int stock     = 0;

        // Add up the town's exported stockpiles
        foreach (TradeRoute.Item item in tradeRoute.items)
        {
            if (item.town == town)
            {
                Town.ResourceEntry res = town.resources[item.id];
                int amount             = Mathf.RoundToInt(res.warehouse);
                stock += amount;
            }
        }

        // If we can carry something, let's load it onto the ship
        if (stock > 0 && available > 0)
        {
            // We want to evenly load all available goods
            float factor = Mathf.Min((float)available / stock, 1f);

            foreach (TradeRoute.Item item in tradeRoute.items)
            {
                if (item.town == town)
                {
                    Town.ResourceEntry res = town.resources[item.id];
                    int amount             = Mathf.Min(available, Mathf.RoundToInt(res.warehouse * factor));

                    if (amount > 0)
                    {
                        CargoEntry ce = new CargoEntry();
                        ce.id          = item.id;
                        ce.amount      = amount;
                        ce.owner       = town;
                        res.warehouse -= amount;
                        available     -= amount;
                        cargo.Add(ce);

                        // If we reach the limit, we want to end the loading process
                        if (available == 0)
                        {
                            break;
                        }
                    }
                }
            }
        }
    }
コード例 #3
0
ファイル: CargoManager.cs プロジェクト: kpiatkowski/ExcavOS
            private void ProcessBlock(IMyTerminalBlock block)
            {
                for (int i = 0; i < block.InventoryCount; i++)
                {
                    items.Clear();
                    IMyInventory inventory = block.GetInventory(0);

                    CurrentCapacity += (double)inventory.CurrentVolume;
                    TotalCapacity   += (double)inventory.MaxVolume;
                    block.GetInventory(i).GetItems(items);
                    foreach (MyInventoryItem item in items)
                    {
                        if (item.Type.TypeId == "MyObjectBuilder_Ore")
                        {
                            hasAnyOre = true;
                        }
                        else
                        {
                            hasSomethingExceptOre = true;
                        }
                        //string itemName = item.Type.SubtypeId;
                        string itemName = item.Type.ToString();
                        double amount   = (double)item.Amount;
                        if (cargo.ContainsKey(itemName))
                        {
                            CargoEntry ce = cargo[itemName];
                            ce.amount += amount;
                            CargoEntry ce2 = cargo[itemName];
                        }
                        else
                        {
                            CargoEntry ce = new CargoEntry
                            {
                                amount = amount,
                                typeid = item.Type.TypeId
                            };
                            cargo.Add(itemName, ce);
                        }
                    }
                }
            }
コード例 #4
0
ファイル: TradeShip.cs プロジェクト: senarup7/seaunity
    /// <summary>
    /// Load the town's exported cargo onto the ship.
    /// </summary>
    void LoadCargo(Town town)
    {
        int available = cargoAllowance;
        int stock = 0;

        // Add up the town's exported stockpiles
        foreach (TradeRoute.Item item in tradeRoute.items)
        {
            if (item.town == town)
            {
                Town.ResourceEntry res = town.resources[item.id];
                int amount = Mathf.RoundToInt(res.warehouse);
                stock += amount;
            }
        }

        // If we can carry something, let's load it onto the ship
        if (stock > 0 && available > 0)
        {
            // We want to evenly load all available goods
            float factor = Mathf.Min((float)available / stock, 1f);

            foreach (TradeRoute.Item item in tradeRoute.items)
            {
                if (item.town == town)
                {
                    Town.ResourceEntry res = town.resources[item.id];
                    int amount = Mathf.Min(available, Mathf.RoundToInt(res.warehouse * factor));

                    if (amount > 0)
                    {
                        CargoEntry ce = new CargoEntry();
                        ce.id = item.id;
                        ce.amount = amount;
                        ce.owner = town;
                        res.warehouse -= amount;
                        available -= amount;
                        cargo.Add(ce);

                        // If we reach the limit, we want to end the loading process
                        if (available == 0) break;
                    }
                }
            }
        }
    }