internal static void MoveRefuellerToDestination(RefuellerPictureBox refueller)
        {
            var refuellerView = refueller.Tag as RefuellerView;

            if (refueller.IsFilling)
            {
                var fillingFuelTank = refuellerView.FuelTank;

                ModelingProcessor.RefillFuelTank(refueller, fillingFuelTank);

                return;
            }

            var        destPoint = refueller.GetDestinationPoint();
            PictureBox destSpot  = refueller.DestinationSpot;

            var refuellerSpeed = _refuellerSpeed;

            #region MotionLogic

            destPoint = MoveRefueller(refueller, destPoint, refuellerSpeed);

            #endregion /MotionLogic


            if (refueller.DestinationSpot == null)
            {
                destSpot = refueller.CreateDestinationSpot(destPoint);
                _modelingForm.PlaygroundPanel.Controls.Add(destSpot);
            }

            if (refueller.Bounds.IntersectsWith(destSpot.Bounds))
            {
                refueller.RemoveDestinationPoint(_modelingForm);

                var fuelTank       = ((RefuellerView)refueller.Tag).FuelTank;
                var pointOfFilling = fuelTank.PointOfRefilling;

                if (destPoint.Equals(pointOfFilling))
                {
                    ModelingProcessor.StartRefilling(refueller, fuelTank);
                    //test
                    //carView.IsFilled = true;
                }


                if (refueller.Bottom < -(2 * ElementSizeDefiner.RefuellerHeight))
                {
                    _modelingForm.PlaygroundPanel.Controls.Remove(refueller);
                    refueller.Dispose();
                }
            }
        }
        public ModelingForm(Topology.Topology topology, TrafficFlow trafficFlow)
        {
            InitializeComponent();
            RemoveUnusedControls();
            DefineProperties();
            LocateFormElements();
            SetUpModelingTimeManager(timerModeling);

            ElementSizeDefiner.TopologyCellSize = 50;

            ClickEventProvider.SetUpClickEventProvider(this);
            pictureBoxPauseAndPlay.MouseClick += ClickEventProvider.PictureBoxPauseAndPlay_Click;

            _mappedTopology = TopologyMapper.MapTopology(this, topology, trafficFlow);

            ModelingProcessor.SetUpModelingProcessor(this, _mappedTopology);

            // not implemented
            labelTotalTime.Hide();
            labelTotalTimeValue.Hide();
            // /not implemented
        }
Пример #3
0
        internal static void MoveCarToDestination(MoveablePictureBox car)
        {
            CarView       carView       = null;
            CollectorView collectorView = null;

            if (car is CarPictureBox)
            {
                carView = car.Tag as CarView;
            }

            if (car is CollectorPictureBox)
            {
                collectorView = car.Tag as CollectorView;
            }

            if (car.IsFilling)
            {
                if (car is CarPictureBox carPictureBox)
                {
                    var chosenFuelDispenser = (FuelDispenserView)carView.ChosenFuelDispenser.Tag;

                    ModelingProcessor.FillCar(carPictureBox, chosenFuelDispenser);

                    return;
                }

                if (car is CollectorPictureBox collector)
                {
                    var cashCounter = collectorView.CashCounter.Tag as CashCounterView;

                    ModelingProcessor.CollectCash(collector, cashCounter);

                    return;
                }
            }

            var        destPoint = car.GetDestinationPoint();
            PictureBox destSpot  = car.DestinationSpot;

            var carSpeed = car.IsGoesFilling ? _carSpeedFilling : _carSpeedNoFilling;

            #region MotionLogic

            destPoint = MoveCar(car, destPoint, carSpeed);

            #endregion /MotionLogic


            if (car.DestinationSpot == null)
            {
                destSpot = car.CreateDestinationSpot(destPoint);
                _modelingForm.PlaygroundPanel.Controls.Add(destSpot);
            }

            if (car.Bounds.IntersectsWith(destSpot.Bounds))
            {
                car.RemoveDestinationPoint(_modelingForm);

                car.IsBypassingObject = false;
                //_isGoHorizontal = false;
                //_isGoVertical = false;

                if (destPoint.Equals(DestinationPointsDefiner.EnterPoint3))
                {
                    car.IsOnStation = true;
                }

                if (car.IsGoesHorizontal && destPoint.Equals(car.FromLeftBypassingPoint))
                {
                    car.IsGoesHorizontal = false;
                    //var x = 1;
                }

                if (car is CarPictureBox carPictureBox)
                {
                    foreach (var fuelDispensersDestPoint in DestinationPointsDefiner.FuelDispensersDestPoints.Values)
                    {
                        if (destPoint.Equals(fuelDispensersDestPoint))
                        {
                            ModelingProcessor.StartFilling(carPictureBox, carView.ChosenFuelDispenser);
                            //test
                            //carView.IsFilled = true;
                        }
                    }
                }

                if (car is CollectorPictureBox collector)
                {
                    if (destPoint.Equals(DestinationPointsDefiner.CashCounter))
                    {
                        ModelingProcessor.StartCollectingCash(collector, collectorView.CashCounter.Tag as CashCounterView);
                        return;
                    }
                }

                if (destPoint.Equals(DestinationPointsDefiner.ExitPoint1))
                {
                    car.IsOnStation = false;
                }

                if (destPoint.Equals(DestinationPointsDefiner.LeavePointNoFilling) || destPoint.Equals(DestinationPointsDefiner.LeavePointFilled))
                {
                    _modelingForm.PlaygroundPanel.Controls.Remove(car);
                    car.Dispose();
                }
            }
        }