private EntryZone PickRandomEntryZone(AgentCategory category) { var numberOfZonesForCategory = _entryZoneLookUp[category].Count; var randomIndex = Random.Range(0, numberOfZonesForCategory); return(_entryZoneLookUp[category][randomIndex]); }
public Agent FindClosestNeighbourOfCategory(AgentCategory category, Agent agent) { if (!EnableSocialInteraction) { return(null); } Agent closestNeighbour = null; var smallestDistanceSquared = float.PositiveInfinity; foreach (var a in GetPersons(category)) { if (a == agent) { continue; } var diffVector = agent.transform.position - a.transform.position; var distanceSquared = Vector3.Dot(diffVector, diffVector); if (distanceSquared < smallestDistanceSquared) { closestNeighbour = a; smallestDistanceSquared = distanceSquared; } } return(closestNeighbour); }
private void SpawnAgent(AgentCategory category) { var randomEntryZone = PickRandomEntryZone(category); _simulation.SpawnAgentAtPosition(randomEntryZone.transform.position, _agentPrefab, randomEntryZone.GetAgentCategory()); _numberOfAgentsScheduledForSpawning[category]--; }
public void SpawnAgentAtPosition(Vector3 position, GameObject agentPrefab, AgentCategory category) { var newAgentGO = Instantiate(agentPrefab, position, Quaternion.identity, this.transform); var newAgent = newAgentGO.GetComponent <Agent>(); newAgent.AgentCategory = category; AddAgentToPotentialInterlocutors(newAgent); }
/// <summary> /// Updates the agentCategory. /// </summary> /// <param name="agentCategoryIdDetails">The agentCategory identifier details.</param> /// <param name="agentCategoryDetails">The agentCategory details.</param> /// <returns></returns> public async Task <CSSResponse> UpdateAgentCategory(AgentCategoryIdDetails agentCategoryIdDetails, UpdateAgentCategory agentCategoryDetails) { var agentCategory = await _repository.AgentCategories.GetAgentCategory(agentCategoryIdDetails); if (agentCategory == null) { return(new CSSResponse(HttpStatusCode.NotFound)); } var agentCategories = await _repository.AgentCategories.GetAgentCategoriesByName(new AgentCategoryNameDetails { Name = agentCategoryDetails.Name }); if (agentCategories?.Count > 0 && agentCategories.IndexOf(agentCategoryIdDetails.AgentCategoryId) == -1) { return(new CSSResponse($"Agent Category with name '{agentCategoryDetails.Name}' already exists.", HttpStatusCode.Conflict)); } var agentCategoryDetailsPreUpdate = new AgentCategory { Name = agentCategory.Name, DataTypeId = agentCategory.DataTypeId, DataTypeMinValue = agentCategory.DataTypeMinValue, DataTypeMaxValue = agentCategory.DataTypeMaxValue, ModifiedBy = agentCategory.ModifiedBy, IsDeleted = agentCategory.IsDeleted, ModifiedDate = agentCategory.ModifiedDate }; var agentCategoryRequest = _mapper.Map(agentCategoryDetails, agentCategory); _repository.AgentCategories.UpdateAgentCategory(agentCategoryRequest); await _repository.SaveAsync(); if (!agentCategoryDetails.IsUpdateRevert) { await _bus.SendCommand <UpdateAgentCategoryCommand>( MassTransitConstants.AgentCategoryUpdateCommandRouteKey, new { agentCategoryRequest.Id, NameOldValue = agentCategoryDetailsPreUpdate.Name, AgentCategoryTypeOldValue = agentCategoryDetailsPreUpdate.DataTypeId, DataTypeMinValueOldValue = agentCategoryDetailsPreUpdate.DataTypeMinValue, DataTypeMaxValueOldValue = agentCategoryDetailsPreUpdate.DataTypeMaxValue, ModifiedByOldValue = agentCategoryDetailsPreUpdate.ModifiedBy, ModifiedDateOldValue = agentCategoryDetailsPreUpdate.ModifiedDate, IsDeletedOldValue = agentCategoryDetailsPreUpdate.IsDeleted, NameNewValue = agentCategoryRequest.Name, AgentCategoryTypeNewValue = agentCategoryRequest.DataTypeId, DataTypeMinValueNewValue = agentCategoryRequest.DataTypeMinValue, DataTypeMaxValueNewValue = agentCategoryRequest.DataTypeMaxValue, ModifiedByNewValue = agentCategoryRequest.ModifiedBy, ModifiedDateNewValue = agentCategoryRequest.ModifiedDate, IsDeletedNewValue = agentCategoryRequest.IsDeleted }); } return(new CSSResponse(HttpStatusCode.NoContent)); }
private List <Agent> GetPersons(AgentCategory category) { if (_agents.ContainsKey(category)) { return(_agents[category]); } return(new List <Agent>()); }
public void SpawnAgentAtPosition(Vector3 position, Agent agentPrefab, AgentCategory category) { var newAgentGO = Instantiate(agentPrefab, position, Quaternion.identity, this.transform); newAgentGO.name = category.name + " - Agent"; var newAgent = newAgentGO.GetComponent <Agent>(); newAgent.Init(category, this); AddAgent(newAgent); if (OnAgentSpawned != null) { OnAgentSpawned(newAgent); } }
/// <summary> /// Deletes the agentCategory. /// </summary> /// <param name="agentCategoryIdDetails">The agentCategory identifier details.</param> /// <returns></returns> public async Task <CSSResponse> DeleteAgentCategory(AgentCategoryIdDetails agentCategoryIdDetails) { var agentCategory = await _repository.AgentCategories.GetAgentCategory(agentCategoryIdDetails); if (agentCategory == null) { return(new CSSResponse(HttpStatusCode.NotFound)); } var agentCategoryDetailsPreUpdate = new AgentCategory { Name = agentCategory.Name, DataTypeId = agentCategory.DataTypeId, DataTypeMinValue = agentCategory.DataTypeMinValue, DataTypeMaxValue = agentCategory.DataTypeMaxValue, ModifiedBy = agentCategory.ModifiedBy, IsDeleted = agentCategory.IsDeleted, ModifiedDate = agentCategory.ModifiedDate }; agentCategory.IsDeleted = true; _repository.AgentCategories.UpdateAgentCategory(agentCategory); await _repository.SaveAsync(); await _bus.SendCommand <DeleteAgentCategoryCommand>( MassTransitConstants.AgentCategoryDeleteCommandRouteKey, new { agentCategory.Id, agentCategory.Name, agentCategory.DataTypeId, agentCategory.DataTypeMinValue, agentCategory.DataTypeMaxValue, ModifiedByOldValue = agentCategoryDetailsPreUpdate.ModifiedBy, IsDeletedOldValue = agentCategoryDetailsPreUpdate.IsDeleted, ModifiedDateOldValue = agentCategoryDetailsPreUpdate.ModifiedDate, IsDeletedNewValue = agentCategory.IsDeleted }); return(new CSSResponse(HttpStatusCode.NoContent)); }
private bool HasReachedMaxAgents(AgentCategory category) { return(_numberOfActiveAgents[category] >= _maxNumberOfAgentsPerCategory[category]); }
public void Init(AgentCategory category, Simulation simulation) { AgentCategory = category; _simulation = simulation; }