public void Interact(Entity.Entity entitySource, Entity.Entity entityTarget, Random random)
        {
            lock (_interLock)
            {
                //do not interact if both already interacting
                if (entitySource.State == EntityState.Talking && entityTarget.State == EntityState.Talking)
                {
                    return;
                }

                //do not interact if social latency is not elapsed
                if (entitySource.Social.CurrentSocialLatency < entitySource.Social.SocialLatencyThreshold || entityTarget.Social.CurrentSocialLatency < entityTarget.Social.SocialLatencyThreshold)
                {
                    return;
                }

                float interactProbability  = entitySource.Social.NeedForSociability * entityTarget.Social.Charisma;
                float interactionIntensity = (float)(interactProbability - random.NextDouble());
                bool  willInteract         = interactionIntensity > 0;
                _logger.Log($"Entity {entitySource.Id} & Entity {entityTarget.Id} will interact = {willInteract}");
                if (willInteract)
                {
                    _logger.Log($"Entity {entitySource.Id} & Entity {entityTarget.Id} interact intensity = {interactionIntensity}");
                    entitySource.State = entityTarget.State = EntityState.Talking;

                    entitySource.RegisterCurrentMovement();
                    entityTarget.RegisterCurrentMovement();
                    entitySource.MovementType = entityTarget.MovementType = MovementType.Stopped;
                    Interaction i = new Interaction(entitySource, entityTarget, interactionIntensity);
                    _interactions.Add(i.InteractionId, i);
                    i.InteractionEnded += EndInteraction;
                    _logger.Log($"Entity {entitySource.Id} & Entity {entityTarget.Id} are interacting");
                }
            }
        }