public void FixedUpdate() { // Update systems List <DistributionUtil <ShipSystem> .DistributionInput> distribInput = ListPool <DistributionUtil <ShipSystem> .DistributionInput> .Get(); List <DistributionUtil <ShipSystem> .DistributionResult> distribOutput = ListPool <DistributionUtil <ShipSystem> .DistributionResult> .Get(); // Build distrib input foreach (var system in this.systems) { distribInput.Add(new DistributionUtil <ShipSystem> .DistributionInput() { obj = system, requestedAmount = system.GetEnergyRequired() }); } // Run distrib algorithm DistributionUtil <ShipSystem> .ReqDistribute(distribInput, distribOutput, this.energy); // Consume foreach (var res in distribOutput) { // Debug.Log("Ship system " + res.obj + " is consuming " + res.amount + " of " + res.obj.GetEnergyRequired()); res.obj.ConsumeEnergy(res.amount); } ListPool <DistributionUtil <ShipSystem> .DistributionInput> .Return(distribInput); ListPool <DistributionUtil <ShipSystem> .DistributionResult> .Return(distribOutput); // Simulate drag this.velocity.value -= this.drag * Time.fixedDeltaTime; }
private void DistributeHeal(List <Heal> heal, float efficiency, float healAmt) { // Update systems List <DistributionUtil <Crewman> .DistributionInput> distribInput = ListPool <DistributionUtil <Crewman> .DistributionInput> .Get(); List <DistributionUtil <Crewman> .DistributionResult> distribOutput = ListPool <DistributionUtil <Crewman> .DistributionResult> .Get(); // Build distrib input foreach (var crewman in this.crewmanInRange) { distribInput.Add(new DistributionUtil <Crewman> .DistributionInput() { obj = crewman, requestedAmount = crewman.model.health.maxHealth.Get() - crewman.model.health.health.Get() }); } // Run distrib algorithm DistributionUtil <Crewman> .ReqDistribute(distribInput, distribOutput, healAmt); // Consume foreach (var res in distribOutput) { heal.Add(new Heal() { man = res.obj, amt = res.amount }); } ListPool <DistributionUtil <Crewman> .DistributionInput> .Return(distribInput); ListPool <DistributionUtil <Crewman> .DistributionResult> .Return(distribOutput); }