private EntryZone PickRandomEntryZone(AgentCategory category)
    {
        var numberOfZonesForCategory = _entryZoneLookUp[category].Count;
        var randomIndex = Random.Range(0, numberOfZonesForCategory);

        return(_entryZoneLookUp[category][randomIndex]);
    }
Beispiel #2
0
    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]--;
    }
Beispiel #4
0
    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);
    }
Beispiel #5
0
        /// <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));
        }
Beispiel #6
0
    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);
        }
    }
Beispiel #8
0
        /// <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]);
 }
Beispiel #10
0
 public void Init(AgentCategory category, Simulation simulation)
 {
     AgentCategory = category;
     _simulation   = simulation;
 }