Exemple #1
0
        public Vessel BeginRefueling()
        {
            vessel = FlightGlobals.ActiveVessel;
            Telemagic.logTM($"current vessel is {vessel.vesselName}");
            vesselFuelTotals       = new FuelTotals(vessel);
            FuelTotals.transferred = 0;
            timeRemaining          = refuelingDuration;

            if (!Telemagic.isOnFuelApron(vessel))
            {
                sourceVessel = vessel.targetObject?.GetVessel();
                if (sourceVessel != null)
                {
                    sourceVesselFuelTotals = new FuelTotals(sourceVessel);
                    Telemagic.logTM($"will refuel from {sourceVessel.vesselName}");
                }
            }

            // for each resource, compute how much can be transferred.
            foreach (var resource in vesselFuelTotals)
            {
                var resourceName = resource.Key;
                // how much reserve capacity in the client vessel?
                var capacity       = resource.Value.maxAmount - resource.Value.amount;
                var transferAmount = capacity;  // assuming unlimited source
                // if there is a source Target, it will have finite resources.
                if (sourceVessel != null)
                {
                    var sourceFuelState = sourceVesselFuelTotals?.getResource(resourceName);
                    if (sourceFuelState != null)
                    {
                        if (sourceFuelState.amount < capacity)
                        {
                            transferAmount = sourceFuelState.amount;
                        }
                    }
                    else
                    {
                        transferAmount = 0;
                    }
                }
                resource.Value.targetTransferAmount = transferAmount;
                Telemagic.logTM($"will transfer {resource.Value.targetTransferAmount} of {resourceName}");
            }

            return(vessel);
        }