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; Stimulus stimulus = null; long param = 0; if (args.Length > 0) { foreach (var obj in args) { if (obj is Stimulus) { stimulus = obj as Stimulus; } if (obj is double || obj is long || obj is int) { param += Convert.ToInt64(obj); } } } if (stimulus == null || args.Length <= 0) { for (var i = 0; i < Life.PrevioursReactions.Count; i++) { if (Life.World.Random.NextDouble() < ((double)(i + 1) / (double)Life.PrevioursReactions.Count) * 0.5 + 0.5) { stimulus = Life.PrevioursReactions[Life.PrevioursReactions.Count - i - 1].Stimulus; } } } if (stimulus == null) { return; } int count = (int)(1 - 0.3 / (Life.World.Random.NextDouble() - 1.05)); List <Behaviour> behaviors = new List <Behaviour>(); for (var i = 0; i < count; i++) { var behav = Life.BehaviourList.GetRandom(); if (behaviors.Contains(behav)) { continue; } behaviors.Add(behav); } Life.BuildReaction(stimulus, behaviors.ToArray()); }