示例#1
0
            public override void Act(params object[] args)
            {
                if (this.Life.Energy < this.EnergyCost.Value)
                {
                    this.Life.Stimulate(this.Life.EnergyLowStimulus);
                    return;
                }
                this.Life.Energy -= this.EnergyCost;
                SubstanceCapsule res = null;

                if (args.Length > 0 && args[0] is Substance)
                {
                    res = this.Life.Resources[args[0] as Substance];
                }
                else if (args.Length > 0 && args[0] is SubstanceCapsule)
                {
                    res = args[0] as SubstanceCapsule;
                }
                else
                {
                    if (this.Life.SubstanceCapsuleList.Count <= 0)
                    {
                        return;
                    }
                    res = this.Life.SubstanceCapsuleList.GetRandom();
                }
                double energy = this.Life.World.Random.NextDouble() * (res.TransferLimit.Value / res.Substance.FromEnergy);

                res.TransferFromEnergy(energy);
            }
示例#2
0
            public override void Act(params object[] args)
            {
                if (this.Life.Energy < this.EnergyCost.Value)
                {
                    this.Life.Stimulate(this.Life.EnergyLowStimulus);
                    return;
                }
                this.Life.Energy -= this.EnergyCost;
                SubstanceCapsule res  = null;
                double           rate = 0;

                foreach (var obj in args)
                {
                    if (obj is SubstanceCapsule)
                    {
                        res = obj as SubstanceCapsule;
                    }
                    if (obj is double || obj is long || obj is int)
                    {
                        rate += Convert.ToDouble(obj);
                    }
                }
                if (rate == 0)
                {
                    rate = 1;
                }
                rate = (rate * Life.World.Random.NextDouble()) % 1.0;
                //gain resource
                if (res != null)
                {
                    var energy = rate * Life.Health.Value;
                    res.TransferFromEnergy(energy);
                }
                //gain energy
                else
                {
                    var energy = rate * Life.Health.Value;
                    Life.Energy += energy;
                }
            }