Esempio n. 1
0
        private void BusStopOffOn(Player plyr, Point busStop)
        {
            Company cmpny = companies.FirstOrDefault(cpy => cpy.BusStop == busStop);
            if (cmpny == null)
            {
                if (log.IsInfoEnabled)
                    log.Info(string.Format("Player {0} enters bus stop {1} which is NOT a company", plyr.Name, busStop));
                return;
            }

            if (log.IsInfoEnabled)
            {
                log.Info(string.Format("Player {0} enters bus stop {1} with {2}", plyr.Name, cmpny.Name, plyr.Passenger == null ? "{none}" : plyr.Passenger.Name));
                if (cmpny.Passengers.Count > 0)
                    log.Info(string.Format("       In lobby: {0}", string.Join(",", cmpny.Passengers.Select(cpy => cpy.Name).ToArray())));
                if (plyr.PickUp.Count > 0)
                    log.Info(string.Format("       Pick-up: {0}", string.Join(",", plyr.PickUp.Select(psngr => psngr.Name).ToArray())));
            }

            // drop off if we have one and can do so
            PlayerAIBase.STATUS status = PlayerAIBase.STATUS.PASSENGER_NO_ACTION;
            Passenger psngrAbandoned = null;
            if (plyr.Passenger != null)
            {
                // Any enemies here?
                bool noDrop = cmpny.Passengers.Any(psngr => psngr.Lobby == cmpny && plyr.Passenger.Enemies.Contains(psngr));
                string msg;
                if (noDrop)
                {
                    status = PlayerAIBase.STATUS.PASSENGER_REFUSED;
                    msg = string.Format("Player {0} could not drop off passenger {1} at {2}", plyr.Name, plyr.Passenger.Name, cmpny.Name);
                    framework.StatusMessage(msg);
                }
                else if (plyr.Passenger.Destination == cmpny)
                {
                    msg = string.Format("Player {0} dropped off passenger {1} at {2}", plyr.Name, plyr.Passenger.Name, cmpny.Name);
                    framework.StatusMessage(msg);
                    plyr.Delivered(plyr.Passenger);
                    plyr.Passenger.Arrived(cmpny);
                    cmpny.Passengers.Add(plyr.Passenger);
                    plyr.Passenger = null;
                    status = PlayerAIBase.STATUS.PASSENGER_DELIVERED;
                }
                else
                {
                    msg = string.Format("Player {0} abandoned passenger {1} at {2}", plyr.Name, plyr.Passenger.Name, cmpny.Name);
                    framework.StatusMessage(msg);
                    psngrAbandoned = plyr.Passenger;
                    plyr.Passenger.Abandoned(cmpny);
                    cmpny.Passengers.Add(plyr.Passenger);
                    plyr.Passenger = null;
                    status = PlayerAIBase.STATUS.PASSENGER_ABANDONED;
                }
                if (log.IsInfoEnabled)
                    log.Info(msg);
            }

            // pick up if we have none (check because drop off may have been disallowed).
            // Can't be one we completed and can't be the one we dropped above.
            if (plyr.Passenger == null)
            {
                Passenger passenger = plyr.PickUp.FirstOrDefault(psngr => (psngr.Lobby == cmpny) && (psngr.Car == null) && (! plyr.PassengersDelivered.Contains(psngr)) && (psngr != psngrAbandoned));
                if (passenger != null)
                {
                    string msg = string.Format("Player {0} picked up passenger {1} at {2}", plyr.Name, passenger.Name, cmpny.Name);
                    if (log.IsInfoEnabled)
                        log.Info(msg);
                    framework.StatusMessage(msg);
                    passenger.EnterCar(plyr.Limo);
                    plyr.Passenger = passenger;
                    plyr.PickUp.Remove(passenger);
                    cmpny.Passengers.Remove(passenger);
                    status = status == PlayerAIBase.STATUS.PASSENGER_NO_ACTION ? PlayerAIBase.STATUS.PASSENGER_PICKED_UP : PlayerAIBase.STATUS.PASSENGER_DELIVERED_AND_PICKED_UP;
                }
            }

            if (log.IsInfoEnabled)
            {
                log.Info(string.Format("Player {0} exits bus stop {1} with {2}", plyr.Name, cmpny.Name, plyr.Passenger == null ? "{none}" : plyr.Passenger.Name));
                if (cmpny.Passengers.Count > 0)
                    log.Info(string.Format("       In lobby: {0}", string.Join(",", cmpny.Passengers.Select(cpy => cpy.Name).ToArray())));
                if (plyr.PickUp.Count > 0)
                    log.Info(string.Format("       Pick-up: {0}", string.Join(",", plyr.PickUp.Select(psngr => psngr.Name).ToArray())));
            }

            // Tell all players (and reset when next general status update will occur)
            framework.ticksSinceLastUpdate = 0;
            foreach (Player plyrOn in Players)
                plyrOn.GameStatus(null, plyr, status, Players, Passengers);
            if (!framework.FullSpeed)
            {
                framework.mainWindow.UpdatePlayers();
                framework.mainWindow.UpdateDebug();
            }
        }