예제 #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;
                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());
            }