Пример #1
0
 /// <summary>
 /// Decides how to handle the input based on the
 /// editing mode that is selected
 /// </summary>
 public void UpdateInput(Dictionary <int, Individual> supers, ControlGroups groups)
 {
     if (StaticEditModeParameters.IsBrushMode())
     {
         if (supers.Count > 0)
         {
             this.Update(new Vector2((float)supers[0].X, (float)supers[0].Y), groups);
         }
         else
         {
             this.Update(Vector2.Zero, groups);
         }
     }
     else if (StaticEditModeParameters.IsEraseMode())
     {
         if (supers.Count > 0)
         {
             EraseIndividual(supers[0].Position, groups);
         }
     }
     else if (StaticEditModeParameters.IsWorldMode())
     {
         this.Update(Vector2.Zero, groups);
     }
 }
Пример #2
0
        private void Update(Vector2 position, ControlGroups groups)
        {
            foreach (EmitterBase emitter in Emitters)
            {
                if (emitter is IGuideable)
                {
                    ((IGuideable)Emitters[0]).UpdatePosition(position);
                }

                if (emitter is IMeteredAgents)
                {
                    ((IMeteredAgents)emitter).CheckForSafeDistance(position);
                }

                if (emitter.IsActive)
                {
                    if (emitter is BrushEmitter)
                    {
                        if (StaticBrushParameters.IsUndo)
                        {
                            populationSimulator.UndoIndividual();
                        }
                        else
                        {
                            EmitIndividual(emitter.GetIndividual(), "User", groups);
                        }
                    }
                    else
                    {
                        EmitIndividual(emitter.GetIndividual(), "World", groups);
                    }
                }
            }
        }
Пример #3
0
 /// <summary>
 /// Decides how to handle the input based on the
 /// editing mode that is selected
 /// </summary>
 public void UpdateInput(Dictionary<int, Individual> supers, ControlGroups groups)
 {
     if (StaticEditModeParameters.IsBrushMode())
     {
         if (supers.Count > 0)
         {
             this.Update(new Vector2((float)supers[0].X, (float)supers[0].Y), groups);
         }
         else
         {
             this.Update(Vector2.Zero, groups);
         }
     }
     else if (StaticEditModeParameters.IsEraseMode())
     {
         if (supers.Count > 0)
         {
             EraseIndividual(supers[0].Position, groups);
         }
     }
     else if (StaticEditModeParameters.IsWorldMode())
     {
         this.Update(Vector2.Zero, groups);
     }
 }
Пример #4
0
 public SwarmScreenBase(IEmitterComponent emitterComponent, IAnalysisComponent analysisComponent, PopulationSimulator populationSimulator)
 {
     ButtonSection = new ButtonSection(false, this, "");
     swarmInXOrder = new List<Individual>();
     supers = new Dictionary<int, Individual>();
     groups = new ControlGroups();
     this.emitterComponent = emitterComponent;
     this.populationSimulator = populationSimulator;
     this.analysisComponent = analysisComponent;
 }
Пример #5
0
 public SwarmScreenBase(IEmitterComponent emitterComponent, IAnalysisComponent analysisComponent, PopulationSimulator populationSimulator)
 {
     ButtonSection            = new ButtonSection(false, this, "");
     swarmInXOrder            = new List <Individual>();
     supers                   = new Dictionary <int, Individual>();
     groups                   = new ControlGroups();
     this.emitterComponent    = emitterComponent;
     this.populationSimulator = populationSimulator;
     this.analysisComponent   = analysisComponent;
 }
Пример #6
0
        private void EraseIndividual(Vector2 position, ControlGroups groups)
        {
            double diameter = StaticEraseParameters.Diameter;

            List <Individual> matches = populationSimulator.Population.SelectMany(s => s
                                                                                  .Where(i => (int)i.X >= (int)position.X - diameter &&
                                                                                         (int)i.X <= (int)position.X + diameter &&
                                                                                         (int)i.Y >= (int)position.Y - diameter &&
                                                                                         (int)i.Y <= (int)position.Y + diameter)).ToList();

            if (matches.Any())
            {
                populationSimulator.EraseIndividual(matches.First());
                groups.Remove(matches.First().ID);
            }
        }
Пример #7
0
        public void BatchEmit(Population population, bool mutate, ControlGroups groups)
        {
            if (mutate)
            {
                for (int i = 0; i < population.Count; i++)
                {
                    for (int j = 0; j < population[i].Count; j++)
                    {
                        population[i][j].Genome.inducePointMutations(rand.NextDouble(), 1);
                    }
                }
                population.ReassignSpecies();
                population.ReassignAllColors();
            }

            foreach (var spec in population)
            {
                foreach (var indvd in spec)
                {
                    EmitIndividual(indvd, "World", groups);
                }
            }
        }
Пример #8
0
        public void BatchEmit(Population population, bool mutate, ControlGroups groups)
        {
            if (mutate)
            {
                for (int i = 0; i < population.Count; i++)
                {
                    for (int j = 0; j < population[i].Count; j++)
                    {
                        population[i][j].Genome.inducePointMutations(rand.NextDouble(), 1);
                    }
                }
                population.ReassignSpecies();
                population.ReassignAllColors();
            }

            foreach (var spec in population)
            {
                foreach (var indvd in spec)
                {
                    EmitIndividual(indvd, "World", groups);
                }
            }
        }
Пример #9
0
 public static ControlGroup GetGroup(string name)
 {
     return(ControlGroups.FirstOrDefault(g => string.Equals(g.GroupName, name, StringComparison.OrdinalIgnoreCase)));
 }
Пример #10
0
 private void EmitIndividual(Individual indvd, string group, ControlGroups groups)
 {
     indvd.ID = GetNextIndividualID();
     populationSimulator.EmitIndividual(indvd);
     groups.Add(indvd.ID, group);
 }
Пример #11
0
        private void Update(Vector2 position, ControlGroups groups)
        {
            foreach (EmitterBase emitter in Emitters)
            {
                if (emitter is IGuideable)
                {
                    ((IGuideable)Emitters[0]).UpdatePosition(position);
                }

                if (emitter is IMeteredAgents)
                {
                    ((IMeteredAgents)emitter).CheckForSafeDistance(position);
                }

                if (emitter.IsActive)
                {
                    if (emitter is BrushEmitter)
                    {
                        if (StaticBrushParameters.IsUndo)
                        {
                            populationSimulator.UndoIndividual();
                        }
                        else
                        {
                            EmitIndividual(emitter.GetIndividual(), "User", groups);
                        }
                    }
                    else
                    {
                        EmitIndividual(emitter.GetIndividual(), "World", groups);
                    }
                }
            }
        }
Пример #12
0
        private void EraseIndividual(Vector2 position, ControlGroups groups)
        {
            double diameter = StaticEraseParameters.Diameter;

            List<Individual> matches = populationSimulator.Population.SelectMany(s => s
                                   .Where(i => (int)i.X >= (int)position.X - diameter &&
                                               (int)i.X <= (int)position.X + diameter &&
                                               (int)i.Y >= (int)position.Y - diameter &&
                                               (int)i.Y <= (int)position.Y + diameter)).ToList();

            if (matches.Any())
            {
                populationSimulator.EraseIndividual(matches.First());
                groups.Remove(matches.First().ID);
            }
        }
Пример #13
0
 private void EmitIndividual(Individual indvd, string group, ControlGroups groups)
 {
     indvd.ID = GetNextIndividualID();
     populationSimulator.EmitIndividual(indvd);
     groups.Add(indvd.ID, group);
 }