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); }
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) { }