Example #1
0
    private bool HasTurnAboveWaitingEntities(WaitTicket _entityTicket, WaitTicket[] _waitingTickets, EntityType _type)
    {
        bool hasTurn = true;
        int  waitComparison;
        int  gaveWaitComparison;
        int  waitGaveComparison;
        int  gaveComparison;

        for (int i = 0; i < _waitingTickets.Length; i++)
        {
            waitComparison     = DateTime.Compare(_entityTicket.waitStartTime, _waitingTickets[i].waitStartTime);
            gaveWaitComparison = DateTime.Compare(_entityTicket.gaveCrossTime, _waitingTickets[i].waitStartTime);
            waitGaveComparison = DateTime.Compare(_entityTicket.waitStartTime, _waitingTickets[i].gaveCrossTime);
            gaveComparison     = DateTime.Compare(_entityTicket.gaveCrossTime, _waitingTickets[i].gaveCrossTime);
            if ((_entityTicket.gaveCross && gaveWaitComparison >= 0) || (!_entityTicket.gaveCross && waitComparison >= 0))
            {
                hasTurn = false;
                break;
            }

            if (_entityTicket.gaveCross)
            {
                if (_waitingTickets[i].gaveCross && IsCompareGreater(gaveComparison, _type))
                {
                    hasTurn = false;
                    break;
                }
                else if (IsCompareGreater(gaveWaitComparison, _type))
                {
                    hasTurn = false;
                    break;
                }
            }
            else
            {
                if (_waitingTickets[i].gaveCross && IsCompareGreater(waitGaveComparison, _type))
                {
                    hasTurn = false;
                    break;
                }
                else if (IsCompareGreater(waitComparison, _type))
                {
                    hasTurn = false;
                    break;
                }
            }
        }
        return(hasTurn);
    }
Example #2
0
    /// <summary>
    /// Gets the actual waiting ticket for the entity.
    /// </summary>
    /// <param name="_entity">Enity to look for ticket.</param>
    /// <returns></returns>
    private WaitTicket GetWaitingTicket(EntityController _entity)
    {
        WaitTicket tiquetToReturn = WaitTicket.invalidTicket;

        if (_entity.GetEntityType.Equals(EntityType.Vehicle))
        {
            if (waitingCars.ContainsKey(_entity))
            {
                tiquetToReturn = waitingCars[_entity];
            }
        }
        else
        {
            if (waitingPedestrians.ContainsKey(_entity))
            {
                tiquetToReturn = waitingPedestrians[_entity];
            }
        }
        return(tiquetToReturn);
    }
Example #3
0
 /// <summary>
 /// Called when a entity enter the crosswalk hotzone.
 /// </summary>
 /// <param name="_entity">Entity that entered.</param>
 public void OnEnter(EntityController _entity)
 {
     if (_entity.GetEntityType.Equals(EntityType.Pedestrian))
     {
         if (!HasAlreadyATicket(_entity))
         {
             WaitTicket newTicket = new WaitTicket();
             newTicket.waitStartTime = System.DateTime.UtcNow;
             waitingPedestrians.Add(_entity, newTicket);
         }
     }
     else if (_entity.GetEntityType.Equals(EntityType.Vehicle))
     {
         if (!HasAlreadyATicket(_entity))
         {
             WaitTicket newTicket = new WaitTicket();
             newTicket.waitStartTime = System.DateTime.UtcNow;
             waitingCars.Add(_entity, newTicket);
         }
     }
 }
Example #4
0
    public void OnEntityGivingCross(EntityController _entity)
    {
        WaitTicket ticket = GetWaitingTicket(_entity);

        if (!ticket.Equals(WaitTicket.invalidTicket))
        {
            ticket.gaveCrossTime = ticket.waitStartTime.AddSeconds(WaitTicket.maxWaitTimeInSeconds);
            ticket.gaveCross     = true;
            DebugController.LogErrorMessage($"crosswalk recibed gave cross from: { _entity.gameObject.name }");
        }
        else
        {
            DebugController.LogErrorMessage(string.Format("{0} gave cross but there is no ticket under the entity", _entity.gameObject.name));
        }
        EntityType other = (_entity.GetEntityType.Equals(EntityType.Vehicle)) ? EntityType.Pedestrian : EntityType.Vehicle;

        ChangeTurn(other);
        if (other.Equals(EntityType.Pedestrian) && TurnInCooldown.Type.Equals(EntityType.Pedestrian))
        {
            TurnInCooldown.ClearCooldown();
        }
        // float time = 3.0f;
    }