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