public Vector2 InitiateDirectionGoal(Entity.Entity entity, GlobalSimulationParameters parameters)
        {
            Vector2 end;

            switch (entity.Movement.Direction)
            {
            case StartDirection.Left:
                //move left = goal is the left border of surface, keeping top position constant
                end = new Vector2(0, entity.Position.Y);
                break;

            case StartDirection.Top:
                //move top = goal is the top border of surface, keeping left position constant
                end = new Vector2(entity.Position.X, 0);
                break;

            case StartDirection.Right:
                //move right = goal is the right border of surface, keeping top position constant
                end = new Vector2(parameters.SurfaceWidth - entity.SelfSize, entity.Position.Y);
                break;

            case StartDirection.Bottom:
                //move bottom = goal is the bottom border of surface, keeping left position constant
                end = new Vector2(entity.Position.X, parameters.SurfaceHeight - entity.SelfSize);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            _logger.Log($"Basic goal :{end}");
            _logger.Log($"Starting to move in straight line");
            return(end);
        }
Exemple #2
0
        public MovementService(GlobalSimulationParameters simParams, Container container, Logger logger, InteractionService interactService)
        {
            _simParams       = simParams;
            _logger          = logger;
            _interactService = interactService;

            _behaviors = new List <Func <IEntityBehavior> >
            {
                container.GetInstance <AudacityBehavior>,
                container.GetInstance <MoveBehavior>,
            };
        }
        public Vector2 InitiateDirectionGoal(SocialSimulation.Entity.Entity entity, GlobalSimulationParameters parameters)
        {
            if (entity.Goals.Any())
            {
                var g   = entity.Goals.First();
                var end = new Vector2(g.GoalPosition.X, g.GoalPosition.Y);
                _logger.Log($"Defined goal :{end}");
                return(end);
            }

            return(Vector2.Zero);
        }
        public void Behave(SocialSimulation.Entity.Entity entity, GlobalSimulationParameters simulationParams, Random random)
        {
            var audacityInfluence = random.NextDouble() < entity.Audacity;

            if (audacityInfluence && entity.CurrentGoal == null)
            {
                var newDir = entity.Movement.Direction;
                while (newDir == entity.Movement.Direction)
                {
                    newDir = (StartDirection)random.Next(0, 4);
                }
                //_logger.Log($"Entity {entity.Id} changed direction from {entity.Direction} to {newDir}");
                entity.Movement.Direction = newDir;

                entity.MovementType = MovementType.Stopped;
            }
        }
        public void Behave(Entity.Entity entity, GlobalSimulationParameters simulationParams, Random random)
        {
            if (entity.State == EntityState.Moving)
            {
                Vector2 start = new Vector2(entity.Position.X, entity.Position.Y);

                IDirectionInitiator directionInitiator = null;
                if (entity.MovementType == MovementType.Stopped)
                {
                    _logger.Log("Defining basic - straight line - goal... ");

                    directionInitiator = new StraightNavigationBehavior(_logger);
                }
                else if (entity.MovementType == MovementType.TowardGoal && entity.CurrentGoal != null)
                {
                    _logger.Log("Defining goal... ");
                    directionInitiator = new GoalNavigationBehavior(_logger);
                }

                if (directionInitiator != null)
                {
                    Vector2 end = directionInitiator.InitiateDirectionGoal(entity, simulationParams);
                    if (end != Vector2.Zero)
                    {
                        float   distance  = Vector2.Distance(start, end);
                        Vector2 direction = Vector2.Normalize(end - start);

                        entity.Position = start;
                        entity.Movement.CurrentMoveData = new MoveData {
                            Dir = direction, distance = distance, start = start, end = end
                        };

                        entity.MovementType = MovementType.StraightLine;

                        if (float.IsNaN(entity.Movement.CurrentMoveData.Dir.X) || float.IsNaN(entity.Movement.CurrentMoveData.Dir.Y))
                        {
                            //do something
                        }
                    }
                }

                Move(entity);
            }
        }
        public MainViewModel(GlobalSimulationParameters simulationParams, MovementService movement, Logger logger, CollisionService collisions, InteractionService interactService, EnvironmentService environment)
        {
            SimulationParams = simulationParams;
            Environment      = environment;
            _movement        = movement;
            _logger          = logger;
            _collisions      = collisions;
            _interactService = interactService;
            SimulationParams.PropertyChanged += SimulationParamsOnPropertyChanged;

            GenerateCommand  = new RelayCommand(ExecuteGenerate);
            StartMoveCommand = new RelayCommand(ExecuteStartMove);
            StopMoveCommand  = new RelayCommand(ExecuteStopMove);

            Entities = new List <Entity.Entity>();
            Logs     = new ObservableCollection <string>();

            _logger.RegisterListener(InternalLog);

            GenerateRng();
        }
 public EnvironmentService(GlobalSimulationParameters simParams)
 {
     _simParams = simParams;
     ViewModel  = new EnvironmentViewModel();
 }
 public void Behave(Entity.Entity entitySource, Entity.Entity entityTarget, GlobalSimulationParameters simulationParams, Random random, InteractionService interactionService)
 {
 }