CnC_Remastered_Collection/CnCTDRAMapEditor/Controls/PlayerSettings.cs

87 lines
3.7 KiB
C#
Raw Normal View History

//
// Copyright 2020 Electronic Arts Inc.
//
// The Command & Conquer Map Editor and corresponding source code is free
// software: you can redistribute it and/or modify it under the terms of
// the GNU General Public License as published by the Free Software Foundation,
// either version 3 of the License, or (at your option) any later version.
// The Command & Conquer Map Editor and corresponding source code is distributed
// in the hope that it will be useful, but with permitted additional restrictions
// under Section 7 of the GPL. See the GNU General Public License in LICENSE.TXT
// distributed with this program. You should have received a copy of the
// GNU General Public License along with permitted additional restrictions
// with this program. If not, see https://github.com/electronicarts/CnC_Remastered_Collection
using MobiusEditor.Interface;
using MobiusEditor.Model;
using MobiusEditor.Utility;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Windows.Forms;
namespace MobiusEditor.Controls
{
public partial class PlayerSettings : UserControl
{
private readonly PropertyTracker<House> houseSettingsTracker;
private readonly dynamic house;
public PlayerSettings(IGamePlugin plugin, PropertyTracker<House> houseSettingsTracker)
{
this.houseSettingsTracker = houseSettingsTracker;
house = houseSettingsTracker;
InitializeComponent();
edgeComboBox.Items.Clear();
edgeComboBox.Items.AddRange(new string[] { "North", "South", "West", "East" });
creditsNud.DataBindings.Add("Value", houseSettingsTracker, "Credits");
maxBuildingsNud.DataBindings.Add("Value", houseSettingsTracker, "MaxBuilding");
maxUnitsNud.DataBindings.Add("Value", houseSettingsTracker, "MaxUnit");
edgeComboBox.DataBindings.Add("SelectedItem", houseSettingsTracker, "Edge");
switch (plugin.GameType)
{
case GameType.TiberianDawn:
maxInfantryNud.Visible = maxInfantryLbl.Visible = false;
maxVesselsNud.Visible = maxVesselsLbl.Visible = false;
techLevelNud.Visible = techLevelLbl.Visible = false;
iqNud.Visible = iqLbl.Visible = false;
playerControlCheckBox.Visible = playerControlLbl.Visible = false;
break;
case GameType.RedAlert:
maxInfantryNud.DataBindings.Add("Value", houseSettingsTracker, "MaxInfantry");
maxVesselsNud.DataBindings.Add("Value", houseSettingsTracker, "MaxVessel");
techLevelNud.DataBindings.Add("Value", houseSettingsTracker, "TechLevel");
iqNud.DataBindings.Add("Value", houseSettingsTracker, "IQ");
playerControlCheckBox.DataBindings.Add("Checked", houseSettingsTracker, "PlayerControl");
break;
}
playersListBox.Items.Clear();
playersListBox.Items.AddRange(plugin.Map.Houses.Select(h => h.Type.Name).ToArray());
var selectedIndices = new List<int>();
foreach (var id in house.Allies)
{
playersListBox.SetSelected(id, true);
}
playersListBox.SelectedIndexChanged += playersListBox_SelectedIndexChanged;
}
private void playersListBox_SelectedIndexChanged(object sender, EventArgs e)
{
var allies = 0;
foreach (int selectedIndex in playersListBox.SelectedIndices)
{
allies |= 1 << selectedIndex;
}
house.Allies = new AlliesMask(allies);
}
}
}