Пример #1
0
    public void Init()
    {
        float delay      = 3.0f;
        float repeatRate = 1.0f;

        planetMap = GameManager.Instance.planetMap;
        SelectStartPlanet();
        enemyPlanets[0].PlanetShips = 50;
        if (enemyPlanets.Count > 0)
        {
            if (IsInvoking("SelectTargetPlanets") == false)
            {
                InvokeRepeating("SelectTargetPlanets", delay, repeatRate);
            }
        }
    }
Пример #2
0
    public void Awake()
    {
        planetMap    = FindObjectOfType <PlanetMap>();
        enemyManager = FindObjectOfType <EnemyManager>();

        if (instance != null && instance != this)
        {
            Destroy(this.gameObject);
        }
        instance = this;

        SideColor = new Dictionary <Side, Color>();
        SideColor.Add(Side.Neitral, Color.gray);
        SideColor.Add(Side.Player, Color.blue);
        SideColor.Add(Side.Enemy, Color.red);
    }
Пример #3
0
        public void When_Rover_Moves_Towards_Obstacle_A_Backoff_Strategy_Is_Played_Instead()
        {
            //First backoff is ERF
            var startingPosition = new Position(5, 5, Direction.East);
            var startingBattery  = 10;
            var coordinates      = CreateMap(10, 10);

            coordinates.Remove(new Location(6, 5));
            coordinates.Add(new Location(6, 5), MapCellResource.Obstacle);

            var testMap = new PlanetMap(coordinates);
            ICommandTranslator commandTranslator = new CommandTranslator();
            var rover = new Rover(startingPosition, startingBattery, testMap, commandTranslator);

            rover.RunCommands("F");
            rover.BatteryCharge.ShouldBe(startingBattery - 1 + 10 - 2 - 3);
            rover.CurrentPosition.Facing.ShouldBe(Direction.South);
            rover.CurrentPosition.Coordinate.ShouldBe(new Location(5, 6));
        }
Пример #4
0
        public void When_Running_An_Input_File_We_Get_Expected_Results(string inputFile, string expectedOutputFile)
        {
            var jsonInput          = File.ReadAllText(inputFile);
            var jsonExpectedOutput = File.ReadAllText(expectedOutputFile);

            var input         = JsonConvert.DeserializeObject <RoverInput>(jsonInput);
            var initialFacing = input.initialPosition.Facing;
            var startPosition = new Position(input.initialPosition.Location.X, input.initialPosition.Location.Y, initialFacing);

            var rover = new Rover(startPosition, input.battery, PlanetMap.FromArray(input.terrain), new CommandTranslator());

            var commands = string.Join("", input.commands);

            rover.RunCommands(commands);

            var outputs = rover.GenerateReport();

            var serializerOptions = new JsonSerializerSettings();

            serializerOptions.Converters.Add(new StringEnumConverter());
            var actualOutputs = JsonConvert.SerializeObject(outputs, serializerOptions);



            JObject sourceJObject = JsonConvert.DeserializeObject <JObject>(jsonExpectedOutput);
            JObject targetJObject = JsonConvert.DeserializeObject <JObject>(actualOutputs);
            var     sb            = new StringBuilder();

            if (!JToken.DeepEquals(sourceJObject, targetJObject))
            {
                foreach (KeyValuePair <string, JToken> sourceProperty in sourceJObject)
                {
                    JProperty targetProp = targetJObject.Property(sourceProperty.Key);

                    if (!JToken.DeepEquals(sourceProperty.Value, targetProp.Value))
                    {
                        sb.AppendLine(string.Format("{0} property value is changed from {1} to {2}", sourceProperty.Key, sourceProperty.Value, targetProp.Value));
                    }
                }
            }
            sb.ToString().ShouldBeEmpty();
        }
Пример #5
0
        public void When_Rover_Plays_A_Backoff_Strategy_And_Finds_Another_Obstacle_Strategy_Is_Interrupted_And_Next_Strategy_Plays()
        {
            //First backoff is ERF
            //Second backoff is ELF
            //Third backoff is ELLF
            var startingPosition = new Position(5, 5, Direction.East);
            var startingBattery  = 10;
            var coordinates      = CreateMap(10, 10);

            coordinates.Remove(new Location(6, 5));
            coordinates.Add(new Location(6, 5), MapCellResource.Obstacle);
            coordinates.Remove(new Location(5, 6));
            coordinates.Add(new Location(5, 6), MapCellResource.Obstacle);

            var testMap = new PlanetMap(coordinates);
            ICommandTranslator commandTranslator = new CommandTranslator();
            var rover = new Rover(startingPosition, startingBattery, testMap, commandTranslator);

            rover.RunCommands("F");
            rover.BatteryCharge.ShouldBe(startingBattery - 1 + 10 - 2 - 1 + 10 - 2 - 1 + 10 - 2 - 2 - 3);
            rover.CurrentPosition.Facing.ShouldBe(Direction.West);
            rover.CurrentPosition.Coordinate.ShouldBe(new Location(4, 5));
        }
Пример #6
0
        public ActionResult <RoverReport> SimulateRun(RoverInput input)
        {
            var rover = new Rover(Position.FromDto(input.initialPosition), input.battery, PlanetMap.FromArray(input.terrain), new CommandTranslator());

            rover.RunCommands(string.Join("", input.commands));

            return(Ok(rover.GenerateReport()));
        }
Пример #7
0
        private void ClickBuildingSwap(object sender, EventArgs e)
        {
            if (labelBuildingID.Text == "Building ID")
            {
                labelBuildingID.Text         = string.Empty;
                labelBuildingName.Text       = string.Empty;
                labelBuildingLevel.Text      = string.Empty;
                labelBuildingEfficiency.Text = string.Empty;
                labelImageName = string.Empty;
            }
            //string labelImageName = string.Empty; //used in place of an imagenamelabel
            ButtonPlanetMap btnButton     = sender as ButtonPlanetMap;
            PlanetMap       tempPlanetMap = new PlanetMap();//initializes the temporary planetmap object

            tempPlanetMap.buildingID    = "";
            tempPlanetMap.buildingName  = "";
            tempPlanetMap.buildingLevel = "";
            tempPlanetMap.efficiency    = "";
            tempPlanetMap.imageName     = "";

            if (btnButton.x == 0 && btnButton.y == 0)
            {
                MessageBox.Show("This building cannot be moved");
            }
            else
            {
                tempPlanetMap.buildingID    = btnButton.buildingID;//moving building into temp storage
                tempPlanetMap.buildingName  = btnButton.buildingName;
                tempPlanetMap.buildingLevel = btnButton.buildingLevel;
                tempPlanetMap.efficiency    = btnButton.efficiency;
                tempPlanetMap.imageName     = btnButton.imageName;

                btnButton.buildingID    = ""; //clearing button storage before new info is written in
                btnButton.buildingName  = "";
                btnButton.imageName     = "";
                btnButton.buildingLevel = "";
                btnButton.efficiency    = "";
                btnButton.Image         = imageListBuildingImages.Images["blank.png"];

                //btnButton.BackgroundImage = imageListBuildingImages.Images["blank.png"];//sets the default image

                btnButton.buildingID    = labelBuildingID.Text;//moves the label info into the empty button
                btnButton.buildingName  = labelBuildingName.Text;
                btnButton.Text          = labelBuildingLevel.Text;
                btnButton.buildingLevel = labelBuildingLevel.Text;
                btnButton.efficiency    = labelBuildingEfficiency.Text;
                btnButton.imageName     = labelImageName;
                btnButton.Image         = imageListBuildingImages.Images[labelImageName];

                labelBuildingID.Text         = tempPlanetMap.buildingID;//label updating
                labelBuildingName.Text       = tempPlanetMap.buildingName;
                labelBuildingLevel.Text      = tempPlanetMap.buildingLevel;
                labelBuildingEfficiency.Text = tempPlanetMap.efficiency;
                //labelBuildingLevel.Text = tempPlanetMap.buildingLevel;
                labelImageName           = tempPlanetMap.imageName;
                buildingPictureBox.Image = imageListBuildingImages.Images[tempPlanetMap.imageName];
                labelBuildingX.Text      = Convert.ToString(btnButton.x);
                labelBuildingY.Text      = Convert.ToString(btnButton.y);
                if (labelBuildingID.Text == "")
                {
                    labelBuildingID.Text         = "Building ID";
                    labelBuildingName.Text       = "Building Name";
                    labelBuildingLevel.Text      = "Building Level";
                    labelBuildingEfficiency.Text = "Efficiency";
                    labelBuildingX.Text          = "x";
                    labelBuildingY.Text          = "y";
                }
            }
        }
Пример #8
0
 void Awake()
 {
     planetMap = FindObjectOfType <PlanetMap>();
 }
Пример #9
0
        internal void OnEntityCreate(MyEntity myEntity)
        {
            try
            {
                if (!Inited)
                {
                    lock (InitObj) Init();
                }

                var planet = myEntity as MyPlanet;
                if (planet != null)
                {
                    PlanetMap.TryAdd(planet.EntityId, planet);
                }

                var grid = myEntity as MyCubeGrid;
                if (grid != null)
                {
                    grid.AddedToScene += GridAddedToScene;
                }
                if (!PbApiInited && myEntity is IMyProgrammableBlock)
                {
                    PbActivate = true;
                }

                var placer = myEntity as IMyBlockPlacerBase;
                if (placer != null && Placer == null)
                {
                    Placer = placer;
                }

                var cube            = myEntity as MyCubeBlock;
                var sorter          = cube as MyConveyorSorter;
                var turret          = cube as IMyLargeTurretBase;
                var controllableGun = cube as IMyUserControllableGun;
                var decoy           = cube as IMyDecoy;
                var camera          = cube as MyCameraBlock;

                if (sorter != null || turret != null || controllableGun != null)
                {
                    if (!(ReplaceVanilla && VanillaIds.ContainsKey(cube.BlockDefinition.Id)) && !WeaponPlatforms.ContainsKey(cube.BlockDefinition.Id))
                    {
                        return;
                    }

                    lock (InitObj)
                    {
                        if (!SorterDetected && myEntity is MyConveyorSorter)
                        {
                            MyAPIGateway.Utilities.InvokeOnGameThread(() => CreateTerminalUi <IMyConveyorSorter>(this));
                            if (!EarlyInitOver)
                            {
                                ControlQueue.Enqueue(typeof(IMyConveyorSorter));
                            }
                            SorterDetected = true;
                        }
                        else if (!TurretDetected && turret != null)
                        {
                            MyAPIGateway.Utilities.InvokeOnGameThread(() => CreateTerminalUi <IMyLargeTurretBase>(this));
                            if (!EarlyInitOver)
                            {
                                ControlQueue.Enqueue(typeof(IMyLargeTurretBase));
                            }
                            TurretDetected = true;
                        }
                        else if (!FixedMissileReloadDetected && controllableGun is IMySmallMissileLauncherReload)
                        {
                            MyAPIGateway.Utilities.InvokeOnGameThread(() => CreateTerminalUi <IMySmallMissileLauncherReload>(this));
                            if (!EarlyInitOver)
                            {
                                ControlQueue.Enqueue(typeof(IMySmallMissileLauncherReload));
                            }

                            FixedMissileReloadDetected = true;
                        }
                        else if (!FixedMissileDetected && controllableGun is IMySmallMissileLauncher)
                        {
                            MyAPIGateway.Utilities.InvokeOnGameThread(() => CreateTerminalUi <IMySmallMissileLauncher>(this));
                            if (!EarlyInitOver)
                            {
                                ControlQueue.Enqueue(typeof(IMySmallMissileLauncher));
                            }
                            FixedMissileDetected = true;
                        }
                        else if (!FixedGunDetected && controllableGun is IMySmallGatlingGun)
                        {
                            MyAPIGateway.Utilities.InvokeOnGameThread(() => CreateTerminalUi <IMySmallGatlingGun>(this));
                            if (!EarlyInitOver)
                            {
                                ControlQueue.Enqueue(typeof(IMySmallGatlingGun));
                            }
                            FixedGunDetected = true;
                        }
                    }
                    InitComp(cube);
                }
                else if (decoy != null)
                {
                    if (!DecoyDetected)
                    {
                        MyAPIGateway.Utilities.InvokeOnGameThread(() => CreateDecoyTerminalUi <IMyDecoy>(this));
                        DecoyDetected = true;
                    }

                    cube.AddedToScene += DecoyAddedToScene;
                }
                else if (camera != null)
                {
                    if (!CameraDetected)
                    {
                        MyAPIGateway.Utilities.InvokeOnGameThread(() => CreateCameraTerminalUi <IMyCameraBlock>(this));
                        CameraDetected = true;
                    }

                    cube.AddedToScene += CameraAddedToScene;
                }
            }
            catch (Exception ex) { Log.Line($"Exception in OnEntityCreate: {ex}"); }
        }
Пример #10
0
        private void ClickBuildingSwap(object sender, EventArgs e)
        {
            if (labelBuildingID.Text == "Building ID")
            {
                labelBuildingID.Text = string.Empty;
                labelBuildingName.Text = string.Empty;
                labelBuildingLevel.Text = string.Empty;
                labelBuildingEfficiency.Text = string.Empty;
                labelImageName = string.Empty;
            }
            //string labelImageName = string.Empty; //used in place of an imagenamelabel
            ButtonPlanetMap btnButton = sender as ButtonPlanetMap;
            PlanetMap tempPlanetMap = new PlanetMap();//initializes the temporary planetmap object
            tempPlanetMap.buildingID = "";
            tempPlanetMap.buildingName = "";
            tempPlanetMap.buildingLevel = "";
            tempPlanetMap.efficiency = "";
            tempPlanetMap.imageName = "";

            if (btnButton.x == 0 && btnButton.y == 0)
            {
                MessageBox.Show("This building cannot be moved");
            }
            else
            {
                tempPlanetMap.buildingID = btnButton.buildingID;//moving building into temp storage
                tempPlanetMap.buildingName = btnButton.buildingName;
                tempPlanetMap.buildingLevel = btnButton.buildingLevel;
                tempPlanetMap.efficiency = btnButton.efficiency;
                tempPlanetMap.imageName = btnButton.imageName;

                btnButton.buildingID = ""; //clearing button storage before new info is written in
                btnButton.buildingName = "";
                btnButton.imageName = "";
                btnButton.buildingLevel = "";
                btnButton.efficiency = "";
                btnButton.Image = imageListBuildingImages.Images["blank.png"];
                
                //btnButton.BackgroundImage = imageListBuildingImages.Images["blank.png"];//sets the default image

                btnButton.buildingID = labelBuildingID.Text;//moves the label info into the empty button
                btnButton.buildingName = labelBuildingName.Text;
                btnButton.Text = labelBuildingLevel.Text;
                btnButton.buildingLevel = labelBuildingLevel.Text;
                btnButton.efficiency = labelBuildingEfficiency.Text;
                btnButton.imageName = labelImageName;
                btnButton.Image = imageListBuildingImages.Images[labelImageName];

                labelBuildingID.Text = tempPlanetMap.buildingID;//label updating
                labelBuildingName.Text = tempPlanetMap.buildingName;
                labelBuildingLevel.Text = tempPlanetMap.buildingLevel;
                labelBuildingEfficiency.Text = tempPlanetMap.efficiency;
                //labelBuildingLevel.Text = tempPlanetMap.buildingLevel;
                labelImageName = tempPlanetMap.imageName;
                buildingPictureBox.Image = imageListBuildingImages.Images[tempPlanetMap.imageName];
                labelBuildingX.Text = Convert.ToString(btnButton.x);
                labelBuildingY.Text = Convert.ToString(btnButton.y);
                if (labelBuildingID.Text == "")
                {
                    labelBuildingID.Text = "Building ID";
                    labelBuildingName.Text = "Building Name";
                    labelBuildingLevel.Text = "Building Level";
                    labelBuildingEfficiency.Text = "Efficiency";
                    labelBuildingX.Text = "x";
                    labelBuildingY.Text = "y";
                }

            }

        }