/// <summary> /// Method used to perform activity if it can occur as soon as resources are available. /// </summary> public override void DoActivity() { double labourlimit = this.LabourLimitProportion; double pricelimit = this.LimitProportion(typeof(FinanceType)); double limit = Math.Min(labourlimit, pricelimit); Status = ActivityStatus.NotNeeded; if (price != null) { if (limit == 1 || this.OnPartialResourcesAvailableAction == OnPartialResourcesAvailableActionTypes.UseResourcesAvailable) { double units2buy = units * limit; if (price.UseWholePackets) { units2buy = Math.Truncate(units2buy); } // adjust resources bought based on labour/finance shortfall // buy resources if (units2buy > 0) { resourceToBuy.Add(units2buy * price.PacketSize, this, "Purchase " + (resourceToBuy as Model).Name); Status = ActivityStatus.Success; } } } }
/// <summary> /// Method used to perform activity if it can occur as soon as resources are available. /// </summary> public override void DoActivity() { Status = ActivityStatus.NotNeeded; // take local equivalent of market from resource double provided = 0; if ((resourceToBuy as CLEMResourceTypeBase).MarketStoreExists) { // find resource entry in market if present and reduce ResourceRequest rr = ResourceRequestList.Where(a => a.Resource == (resourceToBuy as CLEMResourceTypeBase).EquivalentMarketStore).FirstOrDefault(); provided = rr.Provided / this.FarmMultiplier; } else { provided = unitsCanAfford * price.PacketSize; } if (provided > 0) { resourceToBuy.Add(provided, this, "", "Purchase"); Status = ActivityStatus.Success; } // make financial transactions if (bankAccount != null) { ResourceRequest payment = new ResourceRequest() { AllowTransmutation = false, MarketTransactionMultiplier = this.FarmMultiplier, Required = provided / price.PacketSize * price.PricePerPacket, ResourceType = typeof(Finance), ResourceTypeName = bankAccount.Name, Category = "Purchase", RelatesToResource = (resourceToBuy as CLEMModel).NameWithParent, ActivityModel = this }; bankAccount.Remove(payment); } }