Ejemplo n.º 1
0
        public Arena(ArenaProperties props)
        {
            _state = new PopulationState();
            _state.StartPopulation = props.Population;

            _arenaRectTransform = props.ArenaObject.transform as RectTransform;
            if (_arenaRectTransform == null)
            {
                throw new Exception("_arenaRectTransform is null");
            }
            _moveController = new MoveController(_arenaRectTransform);


            _arenaRectTransform.sizeDelta = new Vector2(props.WorldWidth, props.WorldHeight);

            var rand = new Random();

            for (int i = 0; i < props.Population; i++)
            {
                var personProps = new PersonProperties();
                if (rand.NextDouble() > props.PercentAtIsolation)
                {
                    personProps.Speed = (float)(props.PersonSpeed + rand.NextDouble() * props.PersonSpeed);
                }
                else
                {
                    personProps.Speed = 0;
                }

                personProps.PersonPrefab = props.PersonObject;
                var person = ArenaUtils.CreatePerson(personProps, _arenaRectTransform);
                _persons.Add(person);
            }
        }
Ejemplo n.º 2
0
        private async Task OnGenerationFinished(PopulationState state)
        {
            var simulationState = new SimulatorState
            {
                Iteration = state.Generation,
                HighScore = state.HighScore,
                HighRatedIndividualsIds = state.HighRatedIndividuals.Select(ind => ind.Id).ToArray()
            };

            if (IterationCompleted != null)
            {
                await IterationCompleted.Invoke(simulationState);
            }
        }