private void RemoveBot()
        {
            // Viewer
            if (_viewer != null)
            {
                _viewer.Close();
                _viewer = null;
            }

            // Brain Viewer
            panelCustom.Content = null;
            _brainViewer = null;

            //Progress Bars
            _progressBars = null;
            pnlProgressBars.Visibility = Visibility.Collapsed;

            // Bot
            if (_bot != null)
            {
                _map.RemoveItem(_bot);

                _bot.Dispose();
                _bot = null;
            }
        }
        private void SetBot(DefenseBot bot)
        {
            // Remove
            RemoveBot();

            // Set bot
            _map.AddItem(bot);
            _bot = bot;

            // Brain Viewer
            BrainRGBRecognizer brainRecog = _bot.Parts.FirstOrDefault(o => o is BrainRGBRecognizer) as BrainRGBRecognizer;
            if (brainRecog != null)
            {
                _brainViewer = new BrainRGBRecognizerViewer()
                {
                    Recognizer = brainRecog,
                };
                panelCustom.Content = _brainViewer;
            }

            // Progress bars
            _progressBars = new ShipProgressBarManager(pnlProgressBars);
            _progressBars.Bot = _bot;
            _progressBars.Foreground = this.Foreground;
            pnlProgressBars.Visibility = Visibility.Visible;
        }
        private void SetBot_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                #region DNA

                List<ShipPartDNA> parts = new List<ShipPartDNA>();

                parts.Add(new ShipPartDNA() { PartType = EnergyTank.PARTTYPE, Orientation = Quaternion.Identity, Position = new Point3D(0.44329742616787, -2.22044604925031E-16, -0.750606111984116), Scale = new Vector3D(.65, .65, .65) });

                parts.Add(new ShipPartDNA() { PartType = AmmoBox.PARTTYPE, Orientation = Quaternion.Identity, Position = new Point3D(-0.44329742616787, -2.22044604925031E-16, -0.839035218662306), Scale = new Vector3D(1, 1, 1) });

                parts.Add(new ShipPartDNA() { PartType = ProjectileGun.PARTTYPE, Orientation = Quaternion.Identity, Position = new Point3D(-0.139350859269598, -2.22044604925031E-16, 0.0736057604093046), Scale = new Vector3D(1, 1, 1) });

                parts.Add(new ShipPartDNA() { PartType = CameraColorRGB.PARTTYPE, Orientation = Quaternion.Identity, Position = new Point3D(0.443930484830668, -2.22044604925031E-16, -0.0296267373083678), Scale = new Vector3D(1, 1, 1) });

                parts.Add(new ShipPartDNA() { PartType = Brain.PARTTYPE, Orientation = Quaternion.Identity, Position = new Point3D(1.17108888679796, 2.22044604925031E-16, -0.787190712968899), Scale = new Vector3D(1, 1, 1) });

                parts.Add(new BrainRGBRecognizerDNA() { PartType = BrainRGBRecognizer.PARTTYPE, Orientation = new Quaternion(3.91881768803066E-16, -0.264772715428398, 1.07599743798686E-16, 0.964310846752577), Position = new Point3D(0.977003177386146, 0, -0.204027736848604), Scale = new Vector3D(1, 1, 1), Extra = GetBrainRGBRecognizerExtra() });

                parts.Add(new ShipPartDNA() { PartType = CargoBay.PARTTYPE, Orientation = Quaternion.Identity, Position = new Point3D(0.812435730367477, 0, -1.83945537515666), Scale = new Vector3D(1, 1, 1) });

                //parts.Add(new ShipPartDNA() { PartType = ConverterMatterToAmmo.PARTTYPE, Orientation = Quaternion.Identity, Position = new Point3D(-0.724059461163413, 0, -1.57962039018549), Scale = new Vector3D(1, 1, 1) });
                parts.Add(new ShipPartDNA() { PartType = ConverterMatterToEnergy.PARTTYPE, Orientation = Quaternion.Identity, Position = new Point3D(-0.127736487867665, 0, -1.58633876430099), Scale = new Vector3D(1, 1, 1) });

                parts.Add(new ShipPartDNA() { PartType = PlasmaTank.PARTTYPE, Orientation = new Quaternion(0, -0.706641960456376, 0, 0.707571296564784), Position = new Point3D(-0.406755692018177, 0, -2.20579025132833), Scale = new Vector3D(1, 1, 1) });

                ShipDNA dna = ShipDNA.Create(parts);
                dna.ShipLineage = Guid.NewGuid().ToString();

                #endregion

                ShipCoreArgs core = new ShipCoreArgs()
                {
                    Map = _map,
                    Material_Ship = _material_Bot,
                    World = _world,
                };

                ShipExtraArgs extra = new ShipExtraArgs()
                {
                    Options = _editorOptions,
                    ItemOptions = _itemOptions,
                    Material_Projectile = _material_Projectile,
                    CameraPool = _cameraPool,
                    IsPhysicsStatic = true,
                };

                BotConstruction_Result seed = BotConstructor.ConstructBot(dna, core, extra);
                DefenseBot bot = new DefenseBot(seed);
                bot.PhysicsBody.Position = new Point3D(0, 0, -12);

                bot.ShouldLearnFromLifeEvents = false;

                if (bot.Energy != null)
                {
                    bot.Energy.QuantityCurrent = bot.Energy.QuantityMax;
                }
                if (bot.Ammo != null)
                {
                    bot.Ammo.QuantityCurrent = bot.Ammo.QuantityMax;
                }
                if (bot.Plasma != null)
                {
                    bot.Plasma.QuantityCurrent = bot.Plasma.QuantityMax;
                }

                bot.ShouldLearnFromLifeEvents = true;

                SetBot(bot);

                #region save to file

                //dna = bot.GetNewDNA();

                ////C:\Users\<username>\AppData\Roaming\Asteroid Miner\MissileCommand0D\
                //string foldername = UtilityCore.GetOptionsFolder();
                //foldername = System.IO.Path.Combine(foldername, FOLDER);
                //System.IO.Directory.CreateDirectory(foldername);

                //string filename = DateTime.Now.ToString("yyyyMMdd HHmmssfff") + " - bot";
                //filename = System.IO.Path.Combine(foldername, filename);

                //UtilityCore.SerializeToFile(filename, dna);

                #endregion
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), this.Title, MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }