Esempio n. 1
0
        private void NewWave_Clicked(object sender, EventArgs e)
        {
            EnemyWave wave = new EnemyWave();

            wave.Enemy = LevelManager.GetEnemies()[0].Name;
            wave.Count = 10;
            wave.DifficultyMultiplier = 1.0F;
            LevelDesc.Waves.Add(wave);


            PopulateTreeWithWaves(LevelDesc);
        }
Esempio n. 2
0
        private void PopulateTreeWithEnemies()
        {
            string   previousValue = "";
            bool     foundPrevious = false;
            TreeIter selected;

            if (tree.Selection.GetSelected(out selected))
            {
                previousValue = (string)ListModel.GetValue(selected, 0);
            }

            List <EnemyDescription> items = LevelManager.GetEnemies();

            ListModel.Clear();

            if (null != items)
            {
                for (int i = 0; i < items.Count; i++)
                {
                    ListModel.AppendValues(items[i].Name);

                    TreeIter itr = ListModel.AppendValues(items[i].Name);
                    if (previousValue == items[i].Name)
                    {
                        foundPrevious = true;
                        selected      = itr;
                    }
                }
            }


            if (!foundPrevious)
            {
                // If not, here's the default
                ListModel.GetIterFirst(out selected);
            }

            tree.Selection.SelectIter(selected);
        }
Esempio n. 3
0
        public void SetLevel(LevelDescription desc)
        {
            GtkHelpers.FlushAllDeferredEvents();

            Destroyed += LevelAnalysisLayout_Destroyed;

            if (null != Layout)
            {
                Layout.Hide();
                Layout.Destroy();
                Layout             = null;
                SaveSolutionColumn = null;
                LoadSolutionColumn = null;
            }

            LevelDesc = desc;
            LoadAndValidateLevelDesc();

            Solution = LevelManager.ReadLevelSolution(desc.Name);
            if (null == Solution)
            {
                Solution = new LevelSolution();
                Solution.AssumedHandMissileFrequency    = HandMissileFreqency;
                Solution.AssumedHandMissileAvgDamagePct = HandMissileDamantPctAverage;
            }

            TurretSelections = new Dictionary <int, int>();
            RecalculateAllStats();

            Layout = new VBox(false, 0);
            AddWithViewport(Layout);

            HBox field = GtkHelpers.ReadOnlyTextField("Level Name", desc.Name);

            Layout.PackStart(field, false, false, 0);
            field.Show();

            field = GtkHelpers.ReadOnlyTextField("Lives", desc.Lives.ToString());
            Layout.PackStart(field, false, false, 0);
            field.Show();

            field = GtkHelpers.ReadOnlyTextField("Starting Coins", desc.StartingCoins.ToString());
            Layout.PackStart(field, false, false, 0);
            field.Show();


            field = GtkHelpers.TextEntryField("Hand Missile Frequency (sec)", HandMissileFreqency.ToString(), AssumedFireRatePerSecChanged_Changed, true, GtkHelpers.ValueType.Float);
            Layout.PackStart(field, false, false, 0);
            field.Show();


            field = GtkHelpers.TextEntryField("Hand Missile Average Accuracy Handicap", HandMissileDamantPctAverage.ToString(), AssumedHandMissileAccuracyHandicap_Changed, true, GtkHelpers.ValueType.Float);
            Layout.PackStart(field, false, false, 0);
            field.Show();


            WavesTree = new TreeView();
            Layout.PackStart(WavesTree, false, false, 0);
            WavesTree.Show();
            WavesTree.ButtonReleaseEvent += WavesTree_ButtonReleaseEvent;

            List <EnemyDescription> enemies  = LevelManager.GetEnemies();
            ComboBoxText            comboBox = new ComboBoxText();

            foreach (EnemyDescription enemy in enemies)
            {
                comboBox.AppendText(enemy.Name);
            }
            comboBox.Active = 0;


            TreeViewColumn enemyCoumn          = new TreeViewColumn();
            TreeViewColumn countColumn         = new TreeViewColumn();
            TreeViewColumn difficultyColumn    = new TreeViewColumn();
            TreeViewColumn singleEnemyColumn   = new TreeViewColumn();
            TreeViewColumn maxHPPSColumn       = new TreeViewColumn();
            TreeViewColumn maxDPSColumn        = new TreeViewColumn();
            TreeViewColumn simColumn           = new TreeViewColumn();
            TreeViewColumn turretCostVsMaxCoin = new TreeViewColumn();
            TreeViewColumn issuesColumn        = new TreeViewColumn();


            CellRendererText textCellRenderer = new CellRendererText();

            textCellRenderer.Editable = false;

            enemyCoumn.PackStart(textCellRenderer, true);
            enemyCoumn.Title = "Enemy";
            enemyCoumn.AddAttribute(textCellRenderer, "text", 1);
            WavesTree.AppendColumn(enemyCoumn);

            countColumn.PackStart(textCellRenderer, true);
            countColumn.Title = "Count";
            countColumn.AddAttribute(textCellRenderer, "text", 2);
            WavesTree.AppendColumn(countColumn);

            difficultyColumn.PackStart(textCellRenderer, true);
            difficultyColumn.Title = "Difficulty Multiplier";
            difficultyColumn.AddAttribute(textCellRenderer, "text", 3);
            WavesTree.AppendColumn(difficultyColumn);

            //
            // Add column:  Max damage that can be dished to a single enemy given turret coverage + enemy speed
            //

            singleEnemyColumn.PackStart(textCellRenderer, true);
            singleEnemyColumn.Title = "Single Enemy Damage";
            singleEnemyColumn.AddAttribute(textCellRenderer, "text", 4);
            WavesTree.AppendColumn(singleEnemyColumn);

            //
            // Add column: Max hit points of the wave
            //

            maxHPPSColumn.PackStart(textCellRenderer, true);
            maxHPPSColumn.Title = "Max Hitpoints/s";
            maxHPPSColumn.AddAttribute(textCellRenderer, "text", 5);
            WavesTree.AppendColumn(maxHPPSColumn);

            //
            // Add column: Max damage of all the turrets combined firing at full capacity
            //

            maxDPSColumn.PackStart(textCellRenderer, true);
            maxDPSColumn.Title = "Max DPS overall";
            maxDPSColumn.AddAttribute(textCellRenderer, "text", 6);
            WavesTree.AppendColumn(maxDPSColumn);


            //
            // Add column: Simulated damage / kills
            //

            simColumn.PackStart(textCellRenderer, true);
            simColumn.Title = "Sim damage/kills";
            simColumn.AddAttribute(textCellRenderer, "text", 7);
            WavesTree.AppendColumn(simColumn);


            //
            // Add column: Max coin earned by start of wave
            //


            turretCostVsMaxCoin.PackStart(textCellRenderer, true);
            turretCostVsMaxCoin.Title = "Coin Need/Avail";
            turretCostVsMaxCoin.AddAttribute(textCellRenderer, "text", 8);
            WavesTree.AppendColumn(turretCostVsMaxCoin);

            //
            // Solution save/load
            //


            SaveSolutionColumn = new TreeViewColumn();
            LoadSolutionColumn = new TreeViewColumn();;

            SaveSolutionColumn.PackStart(textCellRenderer, true);
            SaveSolutionColumn.Title = "Save Solution";
            SaveSolutionColumn.AddAttribute(textCellRenderer, "text", 9);
            WavesTree.AppendColumn(SaveSolutionColumn);


            LoadSolutionColumn.PackStart(textCellRenderer, true);
            LoadSolutionColumn.Title = "Load Solution";
            LoadSolutionColumn.AddAttribute(textCellRenderer, "text", 10);
            WavesTree.AppendColumn(LoadSolutionColumn);


            //
            // Add column: Issues
            //


            issuesColumn.PackStart(textCellRenderer, true);
            issuesColumn.Title = "Issues";
            issuesColumn.AddAttribute(textCellRenderer, "markup", 11);
            WavesTree.AppendColumn(issuesColumn);

            WavesModel               = new ListStore(typeof(int), typeof(string), typeof(int), typeof(float), typeof(float), typeof(float), typeof(float), typeof(string), typeof(string), typeof(string), typeof(string), typeof(string));
            WavesTree.Model          = WavesModel;
            WavesTree.Selection.Mode = SelectionMode.Single;


            PopulateTreeWithWaves(desc);


            Table map = GetFieldTable(desc);

            Layout.PackStart(map, false, true, 0);
            map.Show();


            //
            // Allowed turrets
            //

            field = new HBox(true, 10);
            Layout.PackStart(field, true, false, 0);
            field.Show();

            AllowedTurretTree = new TreeView();

            TreeViewColumn availCol   = new TreeViewColumn();
            TreeViewColumn allowedCol = new TreeViewColumn();


            allowedCol.PackStart(textCellRenderer, true);
            allowedCol.Title = "Allowed Turrets";
            allowedCol.AddAttribute(textCellRenderer, "text", 1);
            AllowedTurretTree.AppendColumn(allowedCol);

            AllowedTurretModel               = new ListStore(typeof(int), typeof(string));
            AllowedTurretTree.Model          = AllowedTurretModel;
            AllowedTurretTree.Selection.Mode = SelectionMode.Multiple;

            field.PackEnd(AllowedTurretTree, true, true, 0);
            AllowedTurretTree.Show();

            PopulateTurretTrees(desc);


            Show();
            ShowAll();
        }
Esempio n. 4
0
        public void SetLevel(LevelDescription desc)
        {
            GtkHelpers.FlushAllDeferredEvents();

            Destroyed += LevelEditLayout_Destroyed;

            if (null != Layout)
            {
                Layout.Hide();
                Layout.Destroy();
                Layout = null;
            }

            LevelDesc = desc;

            Layout = new VBox(false, 0);
            AddWithViewport(Layout);

            HBox field = GtkHelpers.TextEntryField("Level Name", desc.Name, Name_Changed, true);

            Layout.PackStart(field, false, false, 0);
            field.Show();

            field = GtkHelpers.TextEntryField("Lives", desc.Lives.ToString(), Lives_Changed, true, GtkHelpers.ValueType.Int);
            Layout.PackStart(field, false, false, 0);
            field.Show();

            field = GtkHelpers.ComboBox("Width", LayoutOptions, (desc.FieldWidth / 5 - 1), Width_Changed, true);
            Layout.PackStart(field, false, false, 0);
            field.Show();

            field = GtkHelpers.ComboBox("Depth", LayoutOptions, (desc.FieldDepth / 5 - 1), Depth_Changed, true);
            Layout.PackStart(field, false, false, 0);
            field.Show();

            field = GtkHelpers.TextEntryField("Starting Coins", desc.StartingCoins.ToString(), StartingCoins_Changed, true, GtkHelpers.ValueType.Int);
            Layout.PackStart(field, false, false, 0);
            field.Show();

            field = GtkHelpers.TextEntryField("Description Heading", desc.DescriptionHeading, DescriptionHeading_Changed);
            Layout.PackStart(field, false, false, 0);
            field.Show();

            field = GtkHelpers.TextEntryField("Description Body", desc.DescriptionBody, DescriptionBody_Changed);
            Layout.PackStart(field, false, false, 0);
            field.Show();


            WavesTree = new TreeView();
            Layout.PackStart(WavesTree, false, false, 0);
            WavesTree.Show();

            List <EnemyDescription> enemies  = LevelManager.GetEnemies();
            ComboBoxText            comboBox = new ComboBoxText();

            foreach (EnemyDescription enemy in enemies)
            {
                comboBox.AppendText(enemy.Name);
            }
            comboBox.Active = 0;


            TreeViewColumn enemyCoumn            = new TreeViewColumn();
            TreeViewColumn countColumn           = new TreeViewColumn();
            TreeViewColumn difficultyColumn      = new TreeViewColumn();
            TreeViewColumn descriptionBodyColumn = new TreeViewColumn();

            CellRendererCombo comboCellRenderer = new CellRendererCombo();

            comboCellRenderer.Editable   = true;
            comboCellRenderer.Edited    += ComboCellRenderer_Edited;
            comboCellRenderer.TextColumn = 0;
            comboCellRenderer.HasEntry   = false;

            CellRendererText countCellRenderer = new CellRendererText();

            countCellRenderer.Editable = true;
            countCellRenderer.Edited  += CountCell_Edited;


            CellRendererText difficultyCellRenderer = new CellRendererText();

            difficultyCellRenderer.Editable = true;
            difficultyCellRenderer.Edited  += DifficultyCell_Edited;

            CellRendererText descriptionbodyRenderer = new CellRendererText();

            descriptionbodyRenderer.Editable = true;
            descriptionbodyRenderer.Edited  += DescriptionbodyRenderer_Edited;

            enemyCoumn.PackStart(comboCellRenderer, true);
            enemyCoumn.Title = "Enemy";
            enemyCoumn.AddAttribute(comboCellRenderer, "text", 1);
            WavesTree.AppendColumn(enemyCoumn);

            countColumn.PackStart(countCellRenderer, true);
            countColumn.Title = "Count";
            countColumn.AddAttribute(countCellRenderer, "text", 2);
            WavesTree.AppendColumn(countColumn);

            difficultyColumn.PackStart(difficultyCellRenderer, true);
            difficultyColumn.Title = "Difficulty Multiplier";
            difficultyColumn.AddAttribute(difficultyCellRenderer, "text", 3);
            WavesTree.AppendColumn(difficultyColumn);

            descriptionBodyColumn.PackStart(descriptionbodyRenderer, true);
            descriptionBodyColumn.Title = "Description Body";
            descriptionBodyColumn.AddAttribute(difficultyCellRenderer, "text", 4);
            WavesTree.AppendColumn(descriptionBodyColumn);

            //
            // Add column:  Max damage that can be dished to a single enemy given turret coverage + enemy speed
            //

            //
            // Add column: Max hit points of the wave
            //

            //
            // Add column: Max hit points of all the turrets combined firing at full capacity
            //

            //
            // Add column: Given all the factors, theoretical headroom of DPS
            //

            WavesModel               = new ListStore(typeof(int), typeof(string), typeof(int), typeof(float), typeof(string));
            WavesTree.Model          = WavesModel;
            WavesTree.Selection.Mode = SelectionMode.Single;

            PopulateTreeWithWaves(desc);

            field = new HBox(false, 5);
            Layout.PackStart(field, false, false, 0);
            field.Show();

            Button b = new Button("+");

            b.Clicked += NewWave_Clicked;
            b.Show();
            field.PackStart(b, false, false, 0);

            b          = new Button("-");
            b.Clicked += RemoveWave_Clicked;
            b.Show();
            field.PackStart(b, false, false, 0);


            Table map = GetFieldTable(desc);

            Layout.PackStart(map, false, true, 0);
            map.Show();

            ErrorEntry            = new Entry();
            ErrorEntry.IsEditable = false;
            ErrorEntry.Text       = "No issues";
            Layout.PackStart(ErrorEntry, false, false, 10);
            ErrorEntry.Show();

            ValidateDescriptionAndReportIssues();

            //
            // Allowed turrets
            //

            field = new HBox(true, 10);
            Layout.PackStart(field, true, false, 0);
            field.Show();

            AvailTurretTree   = new TreeView();
            AllowedTurretTree = new TreeView();

            TreeViewColumn availCol   = new TreeViewColumn();
            TreeViewColumn allowedCol = new TreeViewColumn();

            CellRendererText availCellrenderer = new CellRendererText();

            availCellrenderer.Editable = false;

            CellRendererText allowedCellRenderer = new CellRendererText();

            allowedCellRenderer.Editable = false;

            availCol.PackStart(availCellrenderer, true);
            availCol.Title = "Not allowed turrets";
            availCol.AddAttribute(availCellrenderer, "text", 1);
            AvailTurretTree.AppendColumn(availCol);


            allowedCol.PackStart(allowedCellRenderer, true);
            allowedCol.Title = "Allowed Turrets";
            allowedCol.AddAttribute(allowedCellRenderer, "text", 1);
            AllowedTurretTree.AppendColumn(allowedCol);

            AvailTurretModel               = new ListStore(typeof(int), typeof(string));
            AvailTurretTree.Model          = AvailTurretModel;
            AvailTurretTree.Selection.Mode = SelectionMode.Multiple;

            AllowedTurretModel               = new ListStore(typeof(int), typeof(string));
            AllowedTurretTree.Model          = AllowedTurretModel;
            AllowedTurretTree.Selection.Mode = SelectionMode.Multiple;

            field.PackStart(AvailTurretTree, true, true, 0);
            AvailTurretTree.Show();

            VBox turretButtons = new VBox(true, 0);

            field.PackStart(turretButtons, true, true, 0);
            turretButtons.Show();

            b = new Button(">>");
            turretButtons.PackStart(b, false, false, 0);
            b.Clicked += AddAllTurrets_Clicked;
            b.Show();

            b = new Button(">");
            turretButtons.PackStart(b, false, false, 0);
            b.Clicked += AddSelectedTurrets_Clicked;
            b.Show();

            b = new Button("<");
            turretButtons.PackStart(b, false, false, 0);
            b.Clicked += RemoveSelectedTurrets_Clicked;
            b.Show();

            b = new Button("<<");
            turretButtons.PackStart(b, false, false, 0);
            b.Clicked += RemoveAllTurrets_Clicked;
            b.Show();

            field.PackEnd(AllowedTurretTree, true, true, 0);
            AllowedTurretTree.Show();

            PopulateTurretTrees(desc);


            Show();
            ShowAll();
        }
Esempio n. 5
0
        public void SetEnemy(string selectedStr)
        {
            GtkHelpers.FlushAllDeferredEvents();

            Destroyed += EnemyEditLayout_Destroyed;

            if (null != Layout)
            {
                Layout.Hide();
                Layout.Destroy();
                Layout = null;
            }

            Enemies = LevelManager.GetEnemies();
            Enemy   = null;
            for (int i = 0; i < Enemies.Count; i++)
            {
                if (Enemies[i].Name == selectedStr)
                {
                    Enemy = Enemies[i];
                }
            }

            if (Enemy == null)
            {
                throw new Exception("Could not find Enemy " + selectedStr);
            }

            Layout = new VBox(false, 0);
            AddWithViewport(Layout);

            HBox field = GtkHelpers.TextEntryField("Enemy Name", Enemy.Name, Name_Changed, true);

            Layout.PackStart(field, false, false, 0);
            field.Show();

            field = GtkHelpers.TextEntryField("Asset", Enemy.Asset, Asset_Changed, true);
            Layout.PackStart(field, false, false, 0);
            field.Show();


            field = GtkHelpers.TextEntryField("Hit Points", Enemy.HitPoints.ToString(), HitPoints_Changed, true, GtkHelpers.ValueType.Int);
            Layout.PackStart(field, false, false, 0);
            field.Show();


            field = GtkHelpers.TextEntryField("Movement Speed", Enemy.MovementSpeed.ToString(), MovementSpeed_Changed, true, GtkHelpers.ValueType.Float);
            Layout.PackStart(field, false, false, 0);
            field.Show();


            field = GtkHelpers.TextEntryField("Spawn Rate", Enemy.SpawnRate.ToString(), SpawnRate_Changed, true, GtkHelpers.ValueType.Float);
            Layout.PackStart(field, false, false, 0);
            field.Show();

            field = GtkHelpers.TextEntryField("Coins", Enemy.Coins.ToString(), Coins_Changed, true, GtkHelpers.ValueType.Float);
            Layout.PackStart(field, false, false, 0);
            field.Show();

            Show();
            ShowAll();
        }