private void DoWork(Player me, World world)
        {
            var myVehicles    = VehicleRegistry.MyVehicles(me);
            var tanks         = myVehicles.Where(v => v.Type == VehicleType.Tank).ToList();
            var centerOfTanks = tanks.GetCenterPoint();

            var arrvs         = myVehicles.Where(v => v.Type == VehicleType.Arrv).ToList();
            var centerOfArrvs = arrvs.GetCenterPoint();

            var ifvs         = myVehicles.Where(v => v.Type == VehicleType.Ifv).ToList();
            var centerOfIfvs = ifvs.GetCenterPoint();

            var leftGroupType = GetLeftGroupType(centerOfTanks.X, centerOfArrvs.X, centerOfIfvs.X);
            var leftGroup     = leftGroupType == VehicleType.Tank
                                ? tanks
                                : leftGroupType == VehicleType.Arrv
                                        ? arrvs
                                        : ifvs;

            CommandManager.EnqueueCommand(new SelectAllCommand(Id, world, leftGroupType));
            var command = new MoveCommand(Id, leftGroup.Select(v => v.Id).ToList(), MagicConstants.InitialGapSize, 0);

            CommandManager.EnqueueCommand(command);
            commands.Add(command);
        }
Ejemplo n.º 2
0
        public void ExampleShouldWork()
        {
            using (StringWriter sw = new StringWriter())
            {
                TextWriter stdout = Console.Out;
                Console.SetOut(sw);
                LicensePlate li1 = new LicensePlate("FI", "ABC-123");
                LicensePlate li2 = new LicensePlate("FI", "UXE-465");
                LicensePlate li3 = new LicensePlate("D", "B WQ-431");
                LicensePlate li4 = new LicensePlate("D", "B WQ-432");
                LicensePlate li5 = new LicensePlate("D", "B WQ-433");

                VehicleRegistry register = new VehicleRegistry();

                register.Add(li1, "Arto");
                register.Add(li2, "Arto");
                register.Add(li3, "Jürgen");
                register.Add(li4, "Jürgen");
                register.Add(li5, "Jürgen");

                Console.WriteLine("Plates:");
                register.PrintLicensePlates();

                Console.WriteLine("Owners:");
                register.PrintOwners();

                Console.SetOut(stdout);
                string example = "Plates:\nFI ABC-123\nFI UXE-465\nD B WQ-431\nD B WQ-432\nD B WQ-433\nOwners:\nArto\nJürgen\n";
                Assert.AreEqual(example, sw.ToString().Replace("\r\n", "\n"), "The example should work!");
            }
        }
Ejemplo n.º 3
0
        private Point2D NextTarget(VehiclesGroup myArmy, World world, Player me, Game game)
        {
            var enemyVehicles = VehicleRegistry.EnemyVehicles(me);

            if (world.TickIndex - lastClusteringTick <= CacheTtl)
            {
                return(cachedTarget);
            }
            var closestUncapturedFacility = VehicleRegistry.GetUncapturedFacilities(world, me, Id)
                                            .OrderBy(f => myArmy.Center.GetDistanceTo(f.ToPoint(game)))
                                            .FirstOrDefault();

            if (closestUncapturedFacility != null)
            {
                VehicleRegistry.SetCaptureTarget(closestUncapturedFacility.Id, Id);
                cachedTarget = closestUncapturedFacility.ToPoint(game);
                return(cachedTarget);
            }

            var nextEnemyGroup = NextEnemyGroup(myArmy.Center, enemyVehicles, world.TickIndex)?.ToList();

            if (nextEnemyGroup != null)
            {
                cachedTargetGroup  = nextEnemyGroup.Select(v => v.Id).ToList();
                cachedTarget       = nextEnemyGroup.GetCenterPoint();
                lastClusteringTick = world.TickIndex;
                return(cachedTarget);
            }

            return(new Point2D(world.Height, world.Width));
        }
        public override void Commit(Move move, VehicleRegistry registry)
        {
            var vehicles = registry.GetVehiclesByIds(vehicleIds);

            if (!vehicles.Any())
            {
                isStarted = true;
                return;
            }

            var x1 = vehicles.Select(v => v.X).Min() - 1;
            var y1 = vehicles.Select(v => v.Y).Min() - 1;
            var x2 = vehicles.Select(v => v.X).Max() + 1;
            var y2 = vehicles.Select(v => v.Y).Max() + 1;

            move.Action = ActionType;
            move.Left   = x1;
            move.Top    = y1;
            move.Right  = x2;
            move.Bottom = y2;
            if (type.HasValue)
            {
                move.VehicleType = type.Value;
            }

            isStarted = true;

#if DEBUG
            RewindClient.Instance.Rectangle(x1, y1, x2, y2, Color.Crimson);
            RewindClient.Instance.End();
#endif
        }
Ejemplo n.º 5
0
        public override void Commit(Move move, VehicleRegistry registry)
        {
            move.Action = ActionType;
            move.Group  = groupId;

            isStarted = true;
        }
        private List <long> NextTargetGroup(VehiclesGroup myArmy, World world, Player me)
        {
            var enemyVehicles = VehicleRegistry.EnemyVehicles(me);

            if (!enemyVehicles.Any())
            {
                return(Enumerable
                       .Empty <long>()
                       .ToList());
            }
            if (world.TickIndex - lastClusteringTick > CacheTtl)
            {
                var nextEnemyGroup = NextEnemyGroup(myArmy.Center, enemyVehicles, world.TickIndex)?.ToList();
                cachedTargetGroup = nextEnemyGroup?
                                    .Select(v => v.Id)
                                    .ToList()
                                    ?? new List <long>
                {
                    enemyVehicles
                    .OrderBy(v => v.GetDistanceTo(myArmy.Center))
                    .First()
                    .Id
                };
                lastClusteringTick = world.TickIndex;
                return(cachedTargetGroup);
            }
            return(cachedTargetGroup);
        }
 public NewVehiclesFormation(int id,
                             IEnumerable <long> vehicleIds,
                             CommandManager commandManager,
                             VehicleRegistry vehicleRegistry)
     : base(id, vehicleIds, commandManager, vehicleRegistry)
 {
 }
        private void DoWork(Player me)
        {
            var myVehicles    = VehicleRegistry.MyVehicles(me);
            var tanks         = myVehicles.Where(v => v.Type == VehicleType.Tank).ToList();
            var centerOfTanks = tanks.GetCenterPoint();

            var arrvs         = myVehicles.Where(v => v.Type == VehicleType.Arrv).ToList();
            var centerOfArrvs = arrvs.GetCenterPoint();

            var ifvs         = myVehicles.Where(v => v.Type == VehicleType.Ifv).ToList();
            var centerOfIfvs = ifvs.GetCenterPoint();

            var xTanskArrvs = Math.Abs(centerOfTanks.X - centerOfArrvs.X) < MagicConstants.Eps;
            var xArrvsIfvs  = Math.Abs(centerOfArrvs.X - centerOfIfvs.X) < MagicConstants.Eps;

            var allUnits = new List <Vehicle>();

            allUnits.AddRange(tanks);
            allUnits.AddRange(arrvs);
            allUnits.AddRange(ifvs);

            var x1 = allUnits.Select(v => v.X).Min();
            var y1 = allUnits.Select(v => v.Y).Min();
            var x2 = allUnits.Select(v => v.X).Max();
            var y2 = allUnits.Select(v => v.Y).Max();

            if (xTanskArrvs && xArrvsIfvs)
            {
                VerticalFormation(x1, y1, x2, y2, allUnits, centerOfTanks, centerOfArrvs, centerOfIfvs);
            }
            else
            {
                HorizontalFormation(x1, y1, x2, y2, allUnits, centerOfTanks, centerOfArrvs, centerOfIfvs);
            }
        }
Ejemplo n.º 9
0
 public ShrinkGroundVehicleFormation(int id,
                                     IEnumerable <long> vehicleIds,
                                     CommandManager commandManager,
                                     VehicleRegistry vehicleRegistry)
     : base(id, vehicleIds, commandManager, vehicleRegistry)
 {
 }
Ejemplo n.º 10
0
 public TwoOnOneLineVehicleFormation(int id,
                                     IEnumerable <long> vehicleIds,
                                     CommandManager commandManager,
                                     VehicleRegistry vehicleRegistry)
     : base(id, vehicleIds, commandManager, vehicleRegistry)
 {
 }
Ejemplo n.º 11
0
        public void AddShouldReturnFalse()
        {
            VehicleRegistry register = new VehicleRegistry();
            LicensePlate    li5      = new LicensePlate("D", "B WQ-433");

            register.Add(li5, "Jürgen");
            Assert.AreEqual(false, register.Add(new LicensePlate("D", "B WQ-433"), "Arto"), "Adding owner to existing plate should return false!");
        }
Ejemplo n.º 12
0
        public override void Commit(Move move, VehicleRegistry registry)
        {
            move.Action      = ActionType;
            move.FacilityId  = facilityId;
            move.VehicleType = vehicleType;

            isStarted = true;
        }
Ejemplo n.º 13
0
        /**
         * Interference between tests necessitates creation of different
         * vehicle instances for each test
         **/
        public GarageTests()
        {
            var gName    = "GarageNo6";
            var capacity = 42u;

            ghandler  = GarageHandler.Instance;
            vregistry = VehicleRegistry.Instance;
            garage    = ghandler.CreateGarage(gName, capacity);
        }
Ejemplo n.º 14
0
        public void GetShouldReturnNotOwner()
        {
            VehicleRegistry register = new VehicleRegistry();
            LicensePlate    li5      = new LicensePlate("D", "B WQ-433");
            LicensePlate    li2      = new LicensePlate("FI", "UXE-465");

            register.Add(li2, "Arto");
            Assert.AreNotEqual("Arto", register.Get(li5), "If plate is not added, it return an error");
        }
Ejemplo n.º 15
0
        public void RemoveShouldReturnTrue()
        {
            VehicleRegistry register = new VehicleRegistry();
            LicensePlate    li5      = new LicensePlate("D", "B WQ-433");
            LicensePlate    li2      = new LicensePlate("FI", "UXE-465");

            register.Add(li2, "Arto");
            Assert.AreEqual(true, register.Remove(li2), "Remove should return true if the plate is removed");
        }
Ejemplo n.º 16
0
 public RotateAirVehicleFormation(int id,
                                  IEnumerable <long> vehicleIds,
                                  CommandManager commandManager,
                                  VehicleRegistry vehicleRegistry,
                                  bool r2 = false)
     : base(id, vehicleIds, commandManager, vehicleRegistry)
 {
     this.r2 = r2;
 }
Ejemplo n.º 17
0
 public override bool IsFinished(int worldTick, VehicleRegistry registry)
 {
     if (isFinished != null)
     {
         return(isFinished(worldTick));
     }
     vehicleIds = registry.FilterDeadVehicles(vehicleIds);
     return(vehicleIds.All(registry.IsVehicleIdle));
 }
 private void Bind(VehiclesGroup myArmy)
 {
     myArmy
     .SelectVehicles()
     .Assign(Id)
     .Scale(0.1);
     VehicleRegistry.RegisterNewFormation(Id, VehicleIds);
     binded = true;
 }
Ejemplo n.º 19
0
        public void RemoveShouldReturnFalse()
        {
            VehicleRegistry register = new VehicleRegistry();
            LicensePlate    li5      = new LicensePlate("D", "B WQ-433");
            LicensePlate    li2      = new LicensePlate("FI", "UXE-465");

            register.Add(li2, "Arto");
            Assert.AreEqual(false, register.Remove(li5), "Remove should return false if a plate is not removed");
        }
        public override VehicleFormationResult PerformAction(World world, Player me, Game game)
        {
            var myVehicles = VehicleRegistry.MyVehicles(me);

            var tanks         = myVehicles.Where(v => v.Type == VehicleType.Tank).ToList();
            var centerOfTanks = tanks.GetCenterPoint();

            var arrvs         = myVehicles.Where(v => v.Type == VehicleType.Arrv).ToList();
            var centerOfArrvs = arrvs.GetCenterPoint();

            var ifvs         = myVehicles.Where(v => v.Type == VehicleType.Ifv).ToList();
            var centerOfIfvs = ifvs.GetCenterPoint();

            var xTanksArrvs = Math.Abs(centerOfTanks.X - centerOfArrvs.X) < MagicConstants.Eps;
            var xArrvsIfvs  = Math.Abs(centerOfArrvs.X - centerOfIfvs.X) < MagicConstants.Eps;
            var xTanksIfvs  = Math.Abs(centerOfTanks.X - centerOfIfvs.X) < MagicConstants.Eps;
            var yTanksArrvs = Math.Abs(centerOfTanks.Y - centerOfArrvs.Y) < MagicConstants.Eps;
            var yArrvsIfvs  = Math.Abs(centerOfArrvs.Y - centerOfIfvs.Y) < MagicConstants.Eps;
            var yTanksIfvs  = Math.Abs(centerOfTanks.Y - centerOfIfvs.Y) < MagicConstants.Eps;

            var xTanksArrvsGap = yTanksArrvs && Math.Abs(centerOfTanks.X - centerOfArrvs.X) > MagicConstants.InitialGapSize + MagicConstants.Eps;
            var xArrvsIfvsGap  = yArrvsIfvs && Math.Abs(centerOfArrvs.X - centerOfIfvs.X) > MagicConstants.InitialGapSize + MagicConstants.Eps;
            var xTanksIfvsGap  = yTanksIfvs && Math.Abs(centerOfTanks.X - centerOfIfvs.X) > MagicConstants.InitialGapSize + MagicConstants.Eps;
            var yTanksArrvsGap = xTanksArrvs && Math.Abs(centerOfTanks.Y - centerOfArrvs.Y) > MagicConstants.InitialGapSize + MagicConstants.Eps;
            var yArrvsIfvsGap  = xArrvsIfvs && Math.Abs(centerOfArrvs.Y - centerOfIfvs.Y) > MagicConstants.InitialGapSize + MagicConstants.Eps;
            var yTanksIfvsGap  = xTanksIfvs && Math.Abs(centerOfTanks.Y - centerOfIfvs.Y) > MagicConstants.InitialGapSize + MagicConstants.Eps;

            if (xTanksArrvs && xArrvsIfvs || yTanksArrvs && yArrvsIfvs)
            {
                return(new VehicleFormationResult(new FinishGroundVehicleFormation(Id, VehicleIds, CommandManager, VehicleRegistry)));
            }

            if (xTanksArrvs && !yTanksArrvsGap && !yTanksIfvs && !yArrvsIfvs ||
                xArrvsIfvs && !yArrvsIfvsGap && !yTanksArrvs && !yTanksIfvs ||
                xTanksIfvs && !yTanksIfvsGap && !yArrvsIfvs && !yTanksArrvs ||
                yTanksArrvs && !xTanksArrvsGap && !xTanksIfvs && !xArrvsIfvs ||
                yArrvsIfvs && !xArrvsIfvsGap && !xTanksArrvs && !xTanksIfvs ||
                yTanksIfvs && !xTanksIfvsGap && !xTanksArrvs && !xArrvsIfvs)
            {
                return(new VehicleFormationResult(new TwoOnOneLineVehicleFormation(Id, VehicleIds, CommandManager, VehicleRegistry)));
            }

            if (xTanksArrvs && !yTanksArrvsGap && (yTanksIfvs && !xTanksIfvsGap || yArrvsIfvs && !xArrvsIfvsGap) ||
                xArrvsIfvs && !yArrvsIfvsGap && (yTanksArrvs && !xTanksArrvsGap || yTanksIfvs && !xTanksIfvsGap) ||
                xTanksIfvs && !yTanksIfvsGap && (yTanksArrvs && !xTanksArrvsGap || yArrvsIfvs && !xArrvsIfvsGap))
            {
                return(new VehicleFormationResult(new CornerVehicleFormation(Id, VehicleIds, CommandManager, VehicleRegistry)));
            }

            if (xTanksArrvsGap || xTanksIfvsGap || xArrvsIfvsGap ||
                yTanksArrvsGap || yTanksIfvsGap || yArrvsIfvsGap)
            {
                return(new VehicleFormationResult(new GappedVehicleFormation(Id, VehicleIds, CommandManager, VehicleRegistry)));
            }
            return(new VehicleFormationResult(new DiagonalVehicleFormation(Id, VehicleIds, CommandManager, VehicleRegistry)));
        }
 protected VehicleFormationBase(int id,
                                IEnumerable <long> vehicleIds,
                                CommandManager commandManager,
                                VehicleRegistry vehicleRegistry)
 {
     Id              = id;
     VehicleIds      = vehicleRegistry.FilterDeadVehicles(vehicleIds).ToList();
     CommandManager  = commandManager;
     VehicleRegistry = vehicleRegistry;
 }
Ejemplo n.º 22
0
        public void GetShouldReturnOwner()
        {
            VehicleRegistry register = new VehicleRegistry();
            LicensePlate    li5      = new LicensePlate("D", "B WQ-433");
            LicensePlate    li2      = new LicensePlate("FI", "UXE-465");

            register.Add(li2, "Arto");
            register.Add(li5, "Jürgen");
            Assert.AreEqual("Jürgen", register.Get(li5), "Get should return the license plate owner!");
        }
        private void DoWork(Player me)
        {
            var myVehicles    = VehicleRegistry.MyVehicles(me);
            var tanks         = myVehicles.Where(v => v.Type == VehicleType.Tank).ToList();
            var centerOfTanks = tanks.GetCenterPoint();

            var arrvs         = myVehicles.Where(v => v.Type == VehicleType.Arrv).ToList();
            var centerOfArrvs = arrvs.GetCenterPoint();

            var ifvs         = myVehicles.Where(v => v.Type == VehicleType.Ifv).ToList();
            var centerOfIfvs = ifvs.GetCenterPoint();

            var xTanksArrvs = Math.Abs(centerOfTanks.X - centerOfArrvs.X) < MagicConstants.Eps;
            var xArrvsIfvs  = Math.Abs(centerOfArrvs.X - centerOfIfvs.X) < MagicConstants.Eps;
            var xTanksIfvs  = Math.Abs(centerOfTanks.X - centerOfIfvs.X) < MagicConstants.Eps;
            var yTanksArrvs = Math.Abs(centerOfTanks.Y - centerOfArrvs.Y) < MagicConstants.Eps;
            var yArrvsIfvs  = Math.Abs(centerOfArrvs.Y - centerOfIfvs.Y) < MagicConstants.Eps;
            var yTanksIfvs  = Math.Abs(centerOfTanks.Y - centerOfIfvs.Y) < MagicConstants.Eps;

            var xTanksArrvsGap = yTanksArrvs && Math.Abs(centerOfTanks.X - centerOfArrvs.X) > MagicConstants.InitialGapSize + MagicConstants.Eps;
            var xArrvsIfvsGap  = yArrvsIfvs && Math.Abs(centerOfArrvs.X - centerOfIfvs.X) > MagicConstants.InitialGapSize + MagicConstants.Eps;
            var xTanksIfvsGap  = yTanksIfvs && Math.Abs(centerOfTanks.X - centerOfIfvs.X) > MagicConstants.InitialGapSize + MagicConstants.Eps;
            var yTanksArrvsGap = xTanksArrvs && Math.Abs(centerOfTanks.Y - centerOfArrvs.Y) > MagicConstants.InitialGapSize + MagicConstants.Eps;
            var yArrvsIfvsGap  = xArrvsIfvs && Math.Abs(centerOfArrvs.Y - centerOfIfvs.Y) > MagicConstants.InitialGapSize + MagicConstants.Eps;
            var yTanksIfvsGap  = xTanksIfvs && Math.Abs(centerOfTanks.Y - centerOfIfvs.Y) > MagicConstants.InitialGapSize + MagicConstants.Eps;

            var arrvsGroup = new VehiclesGroup(Id, arrvs.Select(v => v.Id).ToList(), VehicleRegistry, CommandManager);
            var ifvsGroup  = new VehiclesGroup(Id, ifvs.Select(v => v.Id).ToList(), VehicleRegistry, CommandManager);

            if (xTanksArrvsGap)
            {
                MoveCloserX(arrvsGroup, centerOfTanks.X);
            }
            else if (xArrvsIfvsGap)
            {
                MoveCloserX(arrvsGroup, centerOfIfvs.X);
            }
            else if (xTanksIfvsGap)
            {
                MoveCloserX(ifvsGroup, centerOfTanks.X);
            }
            else if (yTanksArrvsGap)
            {
                MoveCloserY(arrvsGroup, centerOfTanks.Y);
            }
            else if (yArrvsIfvsGap)
            {
                MoveCloserY(arrvsGroup, centerOfIfvs.Y);
            }
            else
            {
                MoveCloserY(ifvsGroup, centerOfTanks.Y);
            }
            command = CommandManager.PeekLastCommand(Id) as MoveCommand;
        }
Ejemplo n.º 24
0
        public override void Commit(Move move, VehicleRegistry registry)
        {
            move.Action = ActionType;
            move.X      = 1;
            move.Y      = 0;

            isStarted = true;
            foreach (var vehicleId in vehicleIds)
            {
                registry.ForceUnidleVehicle(vehicleId);
            }
        }
Ejemplo n.º 25
0
        public override void Commit(Move move, VehicleRegistry registry)
        {
            move.Action    = ActionType;
            move.VehicleId = vehicleId;
            move.X         = x;
            move.Y         = y;

            isStarted = true;
#if DEBUG
            RewindClient.Instance.Circle(x, y, 50, Color.LawnGreen);
#endif
        }
Ejemplo n.º 26
0
        public override void Commit(Move move, VehicleRegistry registry)
        {
            move.Action = ActionType;
            move.Left   = x1;
            move.Top    = y1;
            move.Right  = x2;
            move.Bottom = y2;
            if (type.HasValue)
            {
                move.VehicleType = type.Value;
            }

            isStarted = true;
        }
Ejemplo n.º 27
0
        public override VehicleFormationResult PerformAction(World world, Player me, Game game)
        {
            var myArmy = new VehiclesGroup(Id, VehicleIds, VehicleRegistry, CommandManager);

            commands.RemoveAll(c => c.IsStarted() && c.IsFinished(world.TickIndex, VehicleRegistry));

            if (commands.Any())
            {
                return(new VehicleFormationResult(this));
            }

            if (FormationHelper.IsNukeAlert(world.GetOpponentPlayer()) && world.TickIndex - nukePreventionTick > game.BaseTacticalNuclearStrikeCooldown / 2)
            {
                commands.Clear();
                CommandManager.ClearCommandsQueue(Id);
                this.PreventNuke(myArmy, world, game, commands);
                nukePreventionTick = world.TickIndex;
                return(new VehicleFormationResult(this));
            }

            var myVehicles = VehicleRegistry.GetVehiclesByIds(VehicleIds).ToList();

            if (cachedTargetGroup != null &&
                this.TryNuke(myArmy, myVehicles, VehicleRegistry.GetVehiclesByIds(cachedTargetGroup), me, game, world, commands))
            {
                return(new VehicleFormationResult(new ShrinkGroundVehicleFormation(Id, VehicleIds, CommandManager, VehicleRegistry)));
            }

            if (commands.Any(c => !c.IsFinished(world.TickIndex, VehicleRegistry)))
            {
                return(new VehicleFormationResult(this));
            }

            var nextTarget = NextTarget(myArmy, world, me, game);
            var direction  = myArmy.Center.To(nextTarget);

            myArmy
            .Select(Id)
            .MoveByVector(direction.Length() > 20
                                                ? direction.Mul(0.1)
                                                : direction,
                          game.TankSpeed * game.ForestTerrainSpeedFactor);
#if DEBUG
            RewindClient.Instance.Line(myArmy.Center.X, myArmy.Center.Y, nextTarget.X, nextTarget.Y, Color.Fuchsia);
#endif
            commands.Add(CommandManager.PeekLastCommand(Id));
            return(new VehicleFormationResult(this));
        }
Ejemplo n.º 28
0
        private void Bind(VehiclesGroup myArmy)
        {
            if (r2)
            {
                myArmy
                .SelectVehicles()
                .Assign(Id);
            }
            else
            {
                myArmy
                .SelectVehicles(VehicleType.Fighter)
                .AddToSelectionVehicles(VehicleType.Helicopter)
                .Assign(MagicConstants.AirFormationGroupId);
            }

            VehicleRegistry.RegisterNewFormation(Id, VehicleIds);
            binded = true;
        }
Ejemplo n.º 29
0
        static void Main(string[] args)
        {
            GarageHandler      gh        = GarageHandler.Instance;
            VehicleRegistry    vregistry = VehicleRegistry.Instance;
            IGarage <IVehicle> garage    = gh.CreateGarage("Garage01", 42);

            Console.WriteLine($"{garage.ToString()}");
            var car1 = vregistry.CreateVehicle <Car>("ABC123", "Green");
            var car2 = vregistry.CreateVehicle <Car>("DEF123", "White");
            var car3 = vregistry.CreateVehicle <Car>("ABC456", "Red", FuelType.FuelCell);
            var car4 = vregistry.CreateVehicle <Car>("DEF456", "Yellow");
            var car5 = vregistry.CreateVehicle <Car>("XYZ999", "Black", FuelType.Ethanol);

            gh.ParkVehicle(garage, car1);
            gh.ParkVehicle(garage, car2);
            gh.ParkVehicle(garage, car1);
            gh.ParkVehicle(garage, car5);

            Console.WriteLine("---After duplicate instance added---");

            Console.WriteLine($"{garage.ToString()}");

            garage.EmptyGarage();
            Console.WriteLine("---After emptying the garage---");
            Console.WriteLine($"{garage.ToString()}");

            gh.ParkVehicle(garage, car1);
            gh.ParkVehicle(garage, car2);
            gh.ParkVehicle(garage, car3);
            gh.ParkVehicle(garage, car4);
            gh.ParkVehicle(garage, car5);

            Console.WriteLine("---After adding 5 cars---");
            Console.WriteLine($"{garage.ToString()}");

            // Remove one of the parked cars
            var removed = gh.RemoveVehicle(garage, car2);

            Console.WriteLine($"Removed: {removed}");

            Console.WriteLine("---After removing car2---");
            Console.WriteLine($"{garage.ToString()}");
        }
Ejemplo n.º 30
0
        public override void Commit(Move move, VehicleRegistry registry)
        {
            move.Action = ActionType;
            move.Left   = x1;
            move.Top    = y1;
            move.Right  = x2;
            move.Bottom = y2;
            if (type.HasValue)
            {
                move.VehicleType = type.Value;
            }

            isStarted = true;

#if DEBUG
            RewindClient.Instance.Rectangle(x1, y1, x2, y2, Color.Crimson);
            RewindClient.Instance.End();
#endif
        }