示例#1
0
    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;
    }
示例#2
0
    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);
    }