* The tool windows will now remember what was last selected in them when they are reselecting or reloaded.
* The selected House will now be retained across the infantry, units, and structures tools.
This commit is contained in:
parent
e4991b2539
commit
dedb50be55
@ -476,6 +476,8 @@ Feature updates:
|
|||||||
* Units, buildings and waypoints with a radius will now show that radius more clearly in placement preview mode.
|
* Units, buildings and waypoints with a radius will now show that radius more clearly in placement preview mode.
|
||||||
* Red Alert data concerning rules.ini data, and map tileset data (dimensions, tile usage, land types) is now read from the original classic files.
|
* Red Alert data concerning rules.ini data, and map tileset data (dimensions, tile usage, land types) is now read from the original classic files.
|
||||||
* Changing rules will now only clear undo/redo history if bibs were actually changed.
|
* Changing rules will now only clear undo/redo history if bibs were actually changed.
|
||||||
|
* The tool windows will now remember what was last selected in them when they are reselecting or reloaded.
|
||||||
|
* The selected House will now be retained across the infantry, units, and structures tools.
|
||||||
|
|
||||||
Map logic updates:
|
Map logic updates:
|
||||||
|
|
||||||
|
@ -47,6 +47,9 @@ namespace MobiusEditor.Interface
|
|||||||
/// <summary>The game type as enum.</summary>
|
/// <summary>The game type as enum.</summary>
|
||||||
GameType GameType { get; }
|
GameType GameType { get; }
|
||||||
|
|
||||||
|
/// <summary>Currently edited house.</summary>
|
||||||
|
HouseType ActiveHouse { get; set; }
|
||||||
|
|
||||||
/// <summary>True if the plugin is initialised to handle a megamap.</summary>
|
/// <summary>True if the plugin is initialised to handle a megamap.</summary>
|
||||||
bool IsMegaMap { get; }
|
bool IsMegaMap { get; }
|
||||||
|
|
||||||
|
@ -21,8 +21,9 @@ namespace MobiusEditor.Interface
|
|||||||
public interface ITool : IDisposable
|
public interface ITool : IDisposable
|
||||||
{
|
{
|
||||||
MapLayerFlag Layers { get; set; }
|
MapLayerFlag Layers { get; set; }
|
||||||
|
IGamePlugin Plugin { get; }
|
||||||
NavigationWidget NavigationWidget { get; }
|
NavigationWidget NavigationWidget { get; }
|
||||||
|
Object CurrentObject { get; set; }
|
||||||
|
|
||||||
void Activate();
|
void Activate();
|
||||||
void Deactivate();
|
void Deactivate();
|
||||||
|
@ -1947,6 +1947,13 @@ namespace MobiusEditor
|
|||||||
if (toolDialog != null)
|
if (toolDialog != null)
|
||||||
{
|
{
|
||||||
activeToolForm = (Form)toolDialog;
|
activeToolForm = (Form)toolDialog;
|
||||||
|
ITool oldTool = toolDialog.GetTool();
|
||||||
|
Object mockObject = null;
|
||||||
|
if (oldTool != null && oldTool.Plugin == plugin)
|
||||||
|
{
|
||||||
|
// Same map edit session; restore old data
|
||||||
|
mockObject = oldTool.CurrentObject;
|
||||||
|
}
|
||||||
// Creates the actual Tool class
|
// Creates the actual Tool class
|
||||||
toolDialog.Initialize(mapPanel, active, toolStatusLabel, mouseToolTip, plugin, url);
|
toolDialog.Initialize(mapPanel, active, toolStatusLabel, mouseToolTip, plugin, url);
|
||||||
activeTool = toolDialog.GetTool();
|
activeTool = toolDialog.GetTool();
|
||||||
@ -1955,6 +1962,9 @@ namespace MobiusEditor
|
|||||||
activeToolForm.Shown += this.ActiveToolForm_Shown;
|
activeToolForm.Shown += this.ActiveToolForm_Shown;
|
||||||
activeToolForm.Show(this);
|
activeToolForm.Show(this);
|
||||||
activeTool.Activate();
|
activeTool.Activate();
|
||||||
|
// Ensures that the active house is set in the tool.
|
||||||
|
// Only set this after activation, so the mock object's PropertyChanged event is active.
|
||||||
|
activeTool.CurrentObject = mockObject ?? activeTool.CurrentObject;
|
||||||
activeToolForm.ResizeEnd += ActiveToolForm_ResizeEnd;
|
activeToolForm.ResizeEnd += ActiveToolForm_ResizeEnd;
|
||||||
}
|
}
|
||||||
if (plugin.IsMegaMap)
|
if (plugin.IsMegaMap)
|
||||||
|
@ -269,6 +269,8 @@ namespace MobiusEditor.RedAlert
|
|||||||
|
|
||||||
public GameType GameType => GameType.RedAlert;
|
public GameType GameType => GameType.RedAlert;
|
||||||
|
|
||||||
|
public HouseType ActiveHouse { get; set; }
|
||||||
|
|
||||||
public bool IsMegaMap => true;
|
public bool IsMegaMap => true;
|
||||||
|
|
||||||
public Map Map { get; }
|
public Map Map { get; }
|
||||||
|
@ -228,6 +228,8 @@ namespace MobiusEditor.TiberianDawn
|
|||||||
|
|
||||||
public virtual GameType GameType => GameType.TiberianDawn;
|
public virtual GameType GameType => GameType.TiberianDawn;
|
||||||
|
|
||||||
|
public virtual HouseType ActiveHouse { get; set; }
|
||||||
|
|
||||||
public virtual bool IsMegaMap => isMegaMap;
|
public virtual bool IsMegaMap => isMegaMap;
|
||||||
|
|
||||||
public virtual Map Map { get; protected set; }
|
public virtual Map Map { get; protected set; }
|
||||||
|
@ -37,6 +37,23 @@ namespace MobiusEditor.Tools
|
|||||||
private Map previewMap;
|
private Map previewMap;
|
||||||
protected override Map RenderMap => previewMap;
|
protected override Map RenderMap => previewMap;
|
||||||
|
|
||||||
|
public override Object CurrentObject
|
||||||
|
{
|
||||||
|
get { return mockBuilding; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value is Building bld)
|
||||||
|
{
|
||||||
|
if (plugin.ActiveHouse != null)
|
||||||
|
{
|
||||||
|
bld.House = plugin.ActiveHouse;
|
||||||
|
}
|
||||||
|
SelectedBuildingType = bld.Type;
|
||||||
|
mockBuilding.CloneDataFrom(bld);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Layers that are not painted by the PostRenderMap function on ViewTool level because they are handled
|
/// Layers that are not painted by the PostRenderMap function on ViewTool level because they are handled
|
||||||
/// at a specific point in the PostRenderMap override by the implementing tool.
|
/// at a specific point in the PostRenderMap override by the implementing tool.
|
||||||
@ -79,7 +96,7 @@ namespace MobiusEditor.Tools
|
|||||||
mapPanel.Invalidate(map, new Rectangle(navigationWidget.MouseCell, selectedBuildingType.OverlapBounds.Size));
|
mapPanel.Invalidate(map, new Rectangle(navigationWidget.MouseCell, selectedBuildingType.OverlapBounds.Size));
|
||||||
}
|
}
|
||||||
mockBuilding.Type = selectedBuildingType;
|
mockBuilding.Type = selectedBuildingType;
|
||||||
// No need to call 'RefreshPreviewPanel()'; it is triggered through MockBuilding_PropertyChanged.
|
RefreshPreviewPanel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -95,7 +112,6 @@ namespace MobiusEditor.Tools
|
|||||||
Strength = 256,
|
Strength = 256,
|
||||||
Direction = map.BuildingDirectionTypes.Where(d => d.Equals(FacingType.North)).First()
|
Direction = map.BuildingDirectionTypes.Where(d => d.Equals(FacingType.North)).First()
|
||||||
};
|
};
|
||||||
mockBuilding.PropertyChanged += MockBuilding_PropertyChanged;
|
|
||||||
this.buildingTypesBox = buildingTypesBox;
|
this.buildingTypesBox = buildingTypesBox;
|
||||||
this.buildingTypesBox.SelectedIndexChanged += BuildingTypeComboBox_SelectedIndexChanged;
|
this.buildingTypesBox.SelectedIndexChanged += BuildingTypeComboBox_SelectedIndexChanged;
|
||||||
this.buildingTypeMapPanel = buildingTypeMapPanel;
|
this.buildingTypeMapPanel = buildingTypeMapPanel;
|
||||||
@ -186,6 +202,10 @@ namespace MobiusEditor.Tools
|
|||||||
{
|
{
|
||||||
mockBuilding.Direction = map.BuildingDirectionTypes.Where(d => d.Equals(FacingType.North)).First();
|
mockBuilding.Direction = map.BuildingDirectionTypes.Where(d => d.Equals(FacingType.North)).First();
|
||||||
}
|
}
|
||||||
|
if (e.PropertyName == "House")
|
||||||
|
{
|
||||||
|
plugin.ActiveHouse = mockBuilding.House;
|
||||||
|
}
|
||||||
RefreshPreviewPanel();
|
RefreshPreviewPanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -886,6 +906,7 @@ namespace MobiusEditor.Tools
|
|||||||
{
|
{
|
||||||
base.Activate();
|
base.Activate();
|
||||||
this.Deactivate(true);
|
this.Deactivate(true);
|
||||||
|
mockBuilding.PropertyChanged += MockBuilding_PropertyChanged;
|
||||||
this.mapPanel.MouseDown += MapPanel_MouseDown;
|
this.mapPanel.MouseDown += MapPanel_MouseDown;
|
||||||
this.mapPanel.MouseUp += MapPanel_MouseUp;
|
this.mapPanel.MouseUp += MapPanel_MouseUp;
|
||||||
this.mapPanel.MouseDoubleClick += MapPanel_MouseDoubleClick;
|
this.mapPanel.MouseDoubleClick += MapPanel_MouseDoubleClick;
|
||||||
@ -909,6 +930,7 @@ namespace MobiusEditor.Tools
|
|||||||
this.ExitPlacementMode();
|
this.ExitPlacementMode();
|
||||||
base.Deactivate();
|
base.Deactivate();
|
||||||
}
|
}
|
||||||
|
mockBuilding.PropertyChanged -= MockBuilding_PropertyChanged;
|
||||||
this.mapPanel.MouseDown -= MapPanel_MouseDown;
|
this.mapPanel.MouseDown -= MapPanel_MouseDown;
|
||||||
this.mapPanel.MouseUp -= MapPanel_MouseUp;
|
this.mapPanel.MouseUp -= MapPanel_MouseUp;
|
||||||
this.mapPanel.MouseDoubleClick -= MapPanel_MouseDoubleClick;
|
this.mapPanel.MouseDoubleClick -= MapPanel_MouseDoubleClick;
|
||||||
|
@ -52,6 +52,20 @@ namespace MobiusEditor.Tools
|
|||||||
|
|
||||||
private Map previewMap;
|
private Map previewMap;
|
||||||
protected override Map RenderMap => previewMap;
|
protected override Map RenderMap => previewMap;
|
||||||
|
|
||||||
|
private string currentObj;
|
||||||
|
public override Object CurrentObject
|
||||||
|
{
|
||||||
|
get { return currentObj; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value is string trig)
|
||||||
|
{
|
||||||
|
this.triggerComboBox.SelectedItem = trig;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private bool placementMode;
|
private bool placementMode;
|
||||||
|
|
||||||
protected override Boolean InPlacementMode
|
protected override Boolean InPlacementMode
|
||||||
@ -340,7 +354,8 @@ namespace MobiusEditor.Tools
|
|||||||
triggerComboBox.SelectedItem = trigger;
|
triggerComboBox.SelectedItem = trigger;
|
||||||
if (cellTrigBlobCenters.TryGetValue(trigger, out Rectangle[] locations))
|
if (cellTrigBlobCenters.TryGetValue(trigger, out Rectangle[] locations))
|
||||||
{
|
{
|
||||||
currentCellTrig = cellTrigger.Trigger;
|
currentCellTrig = trigger;
|
||||||
|
currentObj = trigger;
|
||||||
currentCellTrigIndex = 0;
|
currentCellTrigIndex = 0;
|
||||||
// If found, make sure clicking the "jump to next use" button
|
// If found, make sure clicking the "jump to next use" button
|
||||||
// will go to the blob after the currently clicked one.
|
// will go to the blob after the currently clicked one.
|
||||||
@ -413,6 +428,7 @@ namespace MobiusEditor.Tools
|
|||||||
{
|
{
|
||||||
string selected = triggerComboBox.SelectedItem as string;
|
string selected = triggerComboBox.SelectedItem as string;
|
||||||
jumpToButton.Enabled = selected != null && cellTrigBlobCenters.TryGetValue(selected, out Rectangle[] locations) && locations != null && locations.Length > 0;
|
jumpToButton.Enabled = selected != null && cellTrigBlobCenters.TryGetValue(selected, out Rectangle[] locations) && locations != null && locations.Length > 0;
|
||||||
|
currentObj = selected;
|
||||||
if (placementMode)
|
if (placementMode)
|
||||||
{
|
{
|
||||||
// An invalidate without cells won't call PreRenderMap, and will thus
|
// An invalidate without cells won't call PreRenderMap, and will thus
|
||||||
|
@ -37,6 +37,23 @@ namespace MobiusEditor.Tools
|
|||||||
private Map previewMap;
|
private Map previewMap;
|
||||||
protected override Map RenderMap => previewMap;
|
protected override Map RenderMap => previewMap;
|
||||||
|
|
||||||
|
public override Object CurrentObject
|
||||||
|
{
|
||||||
|
get { return mockInfantry; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value is Infantry inf)
|
||||||
|
{
|
||||||
|
if (plugin.ActiveHouse != null)
|
||||||
|
{
|
||||||
|
inf.House = plugin.ActiveHouse;
|
||||||
|
}
|
||||||
|
SelectedInfantryType = inf.Type;
|
||||||
|
mockInfantry.CloneDataFrom(inf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Layers that are not painted by the PostRenderMap function on ViewTool level because they are handled
|
/// Layers that are not painted by the PostRenderMap function on ViewTool level because they are handled
|
||||||
/// at a specific point in the PostRenderMap override by the implementing tool.
|
/// at a specific point in the PostRenderMap override by the implementing tool.
|
||||||
@ -70,17 +87,13 @@ namespace MobiusEditor.Tools
|
|||||||
{
|
{
|
||||||
mapPanel.Invalidate(map, navigationWidget.MouseCell);
|
mapPanel.Invalidate(map, navigationWidget.MouseCell);
|
||||||
}
|
}
|
||||||
|
|
||||||
selectedInfantryType = value;
|
selectedInfantryType = value;
|
||||||
infantryTypesBox.SelectedValue = selectedInfantryType;
|
infantryTypesBox.SelectedValue = selectedInfantryType;
|
||||||
|
|
||||||
if (placementMode && (selectedInfantryType != null))
|
if (placementMode && (selectedInfantryType != null))
|
||||||
{
|
{
|
||||||
mapPanel.Invalidate(map, navigationWidget.MouseCell);
|
mapPanel.Invalidate(map, navigationWidget.MouseCell);
|
||||||
}
|
}
|
||||||
|
|
||||||
mockInfantry.Type = selectedInfantryType;
|
mockInfantry.Type = selectedInfantryType;
|
||||||
|
|
||||||
RefreshPreviewPanel();
|
RefreshPreviewPanel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -100,7 +113,6 @@ namespace MobiusEditor.Tools
|
|||||||
Direction = map.UnitDirectionTypes.Where(d => d.Equals(FacingType.South)).First(),
|
Direction = map.UnitDirectionTypes.Where(d => d.Equals(FacingType.South)).First(),
|
||||||
Mission = map.GetDefaultMission(infType)
|
Mission = map.GetDefaultMission(infType)
|
||||||
};
|
};
|
||||||
mockInfantry.PropertyChanged += MockInfantry_PropertyChanged;
|
|
||||||
this.infantryTypesBox = infantryTypesBox;
|
this.infantryTypesBox = infantryTypesBox;
|
||||||
this.infantryTypesBox.Types = infTypes;
|
this.infantryTypesBox.Types = infTypes;
|
||||||
this.infantryTypesBox.SelectedIndexChanged += InfantryTypeComboBox_SelectedIndexChanged;
|
this.infantryTypesBox.SelectedIndexChanged += InfantryTypeComboBox_SelectedIndexChanged;
|
||||||
@ -228,6 +240,10 @@ namespace MobiusEditor.Tools
|
|||||||
|
|
||||||
private void MockInfantry_PropertyChanged(object sender, PropertyChangedEventArgs e)
|
private void MockInfantry_PropertyChanged(object sender, PropertyChangedEventArgs e)
|
||||||
{
|
{
|
||||||
|
if (e.PropertyName == "House")
|
||||||
|
{
|
||||||
|
plugin.ActiveHouse = mockInfantry.House;
|
||||||
|
}
|
||||||
RefreshPreviewPanel();
|
RefreshPreviewPanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -826,6 +842,7 @@ namespace MobiusEditor.Tools
|
|||||||
{
|
{
|
||||||
base.Activate();
|
base.Activate();
|
||||||
this.Deactivate(true);
|
this.Deactivate(true);
|
||||||
|
mockInfantry.PropertyChanged += MockInfantry_PropertyChanged;
|
||||||
this.mapPanel.MouseDown += MapPanel_MouseDown;
|
this.mapPanel.MouseDown += MapPanel_MouseDown;
|
||||||
this.mapPanel.MouseUp += MapPanel_MouseUp;
|
this.mapPanel.MouseUp += MapPanel_MouseUp;
|
||||||
this.mapPanel.MouseDoubleClick += MapPanel_MouseDoubleClick;
|
this.mapPanel.MouseDoubleClick += MapPanel_MouseDoubleClick;
|
||||||
@ -849,6 +866,7 @@ namespace MobiusEditor.Tools
|
|||||||
this.ExitPlacementMode();
|
this.ExitPlacementMode();
|
||||||
base.Deactivate();
|
base.Deactivate();
|
||||||
}
|
}
|
||||||
|
mockInfantry.PropertyChanged -= MockInfantry_PropertyChanged;
|
||||||
this.mapPanel.MouseDown -= MapPanel_MouseDown;
|
this.mapPanel.MouseDown -= MapPanel_MouseDown;
|
||||||
this.mapPanel.MouseUp -= MapPanel_MouseUp;
|
this.mapPanel.MouseUp -= MapPanel_MouseUp;
|
||||||
this.mapPanel.MouseDoubleClick -= MapPanel_MouseDoubleClick;
|
this.mapPanel.MouseDoubleClick -= MapPanel_MouseDoubleClick;
|
||||||
|
@ -44,6 +44,18 @@ namespace MobiusEditor.Tools
|
|||||||
private Map previewMap;
|
private Map previewMap;
|
||||||
protected override Map RenderMap => previewMap;
|
protected override Map RenderMap => previewMap;
|
||||||
|
|
||||||
|
public override Object CurrentObject
|
||||||
|
{
|
||||||
|
get { return selectedOverlayType; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value is OverlayType ovt)
|
||||||
|
{
|
||||||
|
SelectedOverlayType = ovt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private bool placementMode;
|
private bool placementMode;
|
||||||
|
|
||||||
protected override Boolean InPlacementMode
|
protected override Boolean InPlacementMode
|
||||||
|
@ -39,6 +39,21 @@ namespace MobiusEditor.Tools
|
|||||||
private readonly NumericUpDown brushSizeNud;
|
private readonly NumericUpDown brushSizeNud;
|
||||||
private readonly CheckBox gemsCheckBox;
|
private readonly CheckBox gemsCheckBox;
|
||||||
|
|
||||||
|
public int currentVal;
|
||||||
|
public override Object CurrentObject
|
||||||
|
{
|
||||||
|
get { return currentVal; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value is int val)
|
||||||
|
{
|
||||||
|
currentVal = val;
|
||||||
|
this.brushSizeNud.Value = (val & 0x7FFFFFFF) | 1;
|
||||||
|
this.gemsCheckBox.Checked = ((uint)val & 0x80000000) != 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private bool placementMode;
|
private bool placementMode;
|
||||||
private bool additivePlacement;
|
private bool additivePlacement;
|
||||||
|
|
||||||
@ -58,6 +73,7 @@ namespace MobiusEditor.Tools
|
|||||||
this.brushSizeNud = brushSizeNud;
|
this.brushSizeNud = brushSizeNud;
|
||||||
this.gemsCheckBox = gemsCheckBox;
|
this.gemsCheckBox = gemsCheckBox;
|
||||||
this.brushSizeNud.ValueChanged += BrushSizeNud_ValueChanged;
|
this.brushSizeNud.ValueChanged += BrushSizeNud_ValueChanged;
|
||||||
|
this.gemsCheckBox.CheckedChanged += GemsCheckBox_CheckedChanged;
|
||||||
navigationWidget.MouseoverSize = new Size((int)brushSizeNud.Value, (int)brushSizeNud.Value);
|
navigationWidget.MouseoverSize = new Size((int)brushSizeNud.Value, (int)brushSizeNud.Value);
|
||||||
Update();
|
Update();
|
||||||
}
|
}
|
||||||
@ -70,6 +86,7 @@ namespace MobiusEditor.Tools
|
|||||||
private void BrushSizeNud_ValueChanged(object sender, EventArgs e)
|
private void BrushSizeNud_ValueChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
int actualValue = (int)brushSizeNud.Value | 1;
|
int actualValue = (int)brushSizeNud.Value | 1;
|
||||||
|
currentVal = gemsCheckBox.Checked ? (int)(0x80000000 | (uint)actualValue) : actualValue;
|
||||||
if (brushSizeNud.Value != actualValue)
|
if (brushSizeNud.Value != actualValue)
|
||||||
{
|
{
|
||||||
// Will re-trigger this, and then go to the other case.
|
// Will re-trigger this, and then go to the other case.
|
||||||
@ -82,6 +99,11 @@ namespace MobiusEditor.Tools
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void GemsCheckBox_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
int brushValue = (int)brushSizeNud.Value | 1;
|
||||||
|
currentVal = gemsCheckBox.Checked ? (int)(0x80000000 | (uint)brushValue) : brushValue;
|
||||||
|
}
|
||||||
|
|
||||||
private void ResourcesTool_KeyUpDown(object sender, KeyEventArgs e)
|
private void ResourcesTool_KeyUpDown(object sender, KeyEventArgs e)
|
||||||
{
|
{
|
||||||
|
@ -43,6 +43,19 @@ namespace MobiusEditor.Tools
|
|||||||
private Map previewMap;
|
private Map previewMap;
|
||||||
protected override Map RenderMap => previewMap;
|
protected override Map RenderMap => previewMap;
|
||||||
|
|
||||||
|
public override Object CurrentObject
|
||||||
|
{
|
||||||
|
get { return mockSmudge; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value is Smudge sm)
|
||||||
|
{
|
||||||
|
SelectedSmudgeType = sm.Type;
|
||||||
|
mockSmudge.CloneDataFrom(sm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private bool placementMode;
|
private bool placementMode;
|
||||||
|
|
||||||
protected override Boolean InPlacementMode
|
protected override Boolean InPlacementMode
|
||||||
@ -75,9 +88,8 @@ namespace MobiusEditor.Tools
|
|||||||
{
|
{
|
||||||
mapPanel.Invalidate(map, new Rectangle(navigationWidget.MouseCell, selectedSmudgeType.Size));
|
mapPanel.Invalidate(map, new Rectangle(navigationWidget.MouseCell, selectedSmudgeType.Size));
|
||||||
}
|
}
|
||||||
mockSmudge.Icon = Math.Min(selectedSmudgeType.Icons - 1, mockSmudge.Icon);
|
|
||||||
mockSmudge.Type = selectedSmudgeType;
|
mockSmudge.Type = selectedSmudgeType;
|
||||||
RefreshPreviewPanel();
|
mockSmudge.Icon = Math.Min(selectedSmudgeType.Icons - 1, mockSmudge.Icon);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -87,7 +99,6 @@ namespace MobiusEditor.Tools
|
|||||||
{
|
{
|
||||||
previewMap = map;
|
previewMap = map;
|
||||||
mockSmudge = new Smudge(smudgeTypeListBox.Types.First() as SmudgeType, 0);
|
mockSmudge = new Smudge(smudgeTypeListBox.Types.First() as SmudgeType, 0);
|
||||||
mockSmudge.PropertyChanged += MockSmudge_PropertyChanged;
|
|
||||||
this.smudgeTypeListBox = smudgeTypeListBox;
|
this.smudgeTypeListBox = smudgeTypeListBox;
|
||||||
this.smudgeTypeListBox.SelectedIndexChanged += SmudgeTypeComboBox_SelectedIndexChanged;
|
this.smudgeTypeListBox.SelectedIndexChanged += SmudgeTypeComboBox_SelectedIndexChanged;
|
||||||
this.smudgeTypeMapPanel = smudgeTypeMapPanel;
|
this.smudgeTypeMapPanel = smudgeTypeMapPanel;
|
||||||
@ -97,6 +108,7 @@ namespace MobiusEditor.Tools
|
|||||||
this.smudgeProperties = smudgeProperties;
|
this.smudgeProperties = smudgeProperties;
|
||||||
this.smudgeProperties.Smudge = mockSmudge;
|
this.smudgeProperties.Smudge = mockSmudge;
|
||||||
SelectedSmudgeType = smudgeTypeListBox.Types.First() as SmudgeType;
|
SelectedSmudgeType = smudgeTypeListBox.Types.First() as SmudgeType;
|
||||||
|
RefreshPreviewPanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MapPanel_MouseLeave(object sender, EventArgs e)
|
private void MapPanel_MouseLeave(object sender, EventArgs e)
|
||||||
@ -181,6 +193,7 @@ namespace MobiusEditor.Tools
|
|||||||
private void SmudgeTypeComboBox_SelectedIndexChanged(object sender, EventArgs e)
|
private void SmudgeTypeComboBox_SelectedIndexChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
SelectedSmudgeType = smudgeTypeListBox.SelectedValue as SmudgeType;
|
SelectedSmudgeType = smudgeTypeListBox.SelectedValue as SmudgeType;
|
||||||
|
RefreshPreviewPanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SmudgeTool_KeyDown(object sender, KeyEventArgs e)
|
private void SmudgeTool_KeyDown(object sender, KeyEventArgs e)
|
||||||
@ -710,13 +723,14 @@ namespace MobiusEditor.Tools
|
|||||||
{
|
{
|
||||||
base.Activate();
|
base.Activate();
|
||||||
this.Deactivate(true);
|
this.Deactivate(true);
|
||||||
|
this.mockSmudge.PropertyChanged += MockSmudge_PropertyChanged;
|
||||||
this.mapPanel.MouseDown += MapPanel_MouseDown;
|
this.mapPanel.MouseDown += MapPanel_MouseDown;
|
||||||
this.mapPanel.MouseMove += MapPanel_MouseMove;
|
this.mapPanel.MouseMove += MapPanel_MouseMove;
|
||||||
this.mapPanel.MouseDoubleClick += MapPanel_MouseDoubleClick;
|
this.mapPanel.MouseDoubleClick += MapPanel_MouseDoubleClick;
|
||||||
this.mapPanel.MouseLeave += MapPanel_MouseLeave;
|
this.mapPanel.MouseLeave += MapPanel_MouseLeave;
|
||||||
(this.mapPanel as Control).KeyDown += SmudgeTool_KeyDown;
|
(this.mapPanel as Control).KeyDown += SmudgeTool_KeyDown;
|
||||||
(this.mapPanel as Control).KeyUp += SmudgeTool_KeyUp;
|
(this.mapPanel as Control).KeyUp += SmudgeTool_KeyUp;
|
||||||
navigationWidget.BoundsMouseCellChanged += MouseoverWidget_MouseCellChanged;
|
this.navigationWidget.BoundsMouseCellChanged += MouseoverWidget_MouseCellChanged;
|
||||||
this.UpdateStatus();
|
this.UpdateStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -732,6 +746,7 @@ namespace MobiusEditor.Tools
|
|||||||
ExitPlacementMode();
|
ExitPlacementMode();
|
||||||
base.Deactivate();
|
base.Deactivate();
|
||||||
}
|
}
|
||||||
|
this.mockSmudge.PropertyChanged -= MockSmudge_PropertyChanged;
|
||||||
this.mapPanel.MouseDown -= MapPanel_MouseDown;
|
this.mapPanel.MouseDown -= MapPanel_MouseDown;
|
||||||
this.mapPanel.MouseMove -= MapPanel_MouseMove;
|
this.mapPanel.MouseMove -= MapPanel_MouseMove;
|
||||||
this.mapPanel.MouseDoubleClick -= MapPanel_MouseDoubleClick;
|
this.mapPanel.MouseDoubleClick -= MapPanel_MouseDoubleClick;
|
||||||
|
@ -64,6 +64,41 @@ namespace MobiusEditor.Tools
|
|||||||
private Map previewMap;
|
private Map previewMap;
|
||||||
protected override Map RenderMap => previewMap;
|
protected override Map RenderMap => previewMap;
|
||||||
|
|
||||||
|
public override Object CurrentObject
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
Template template = new Template();
|
||||||
|
template.Type = this.selectedTemplateType;
|
||||||
|
Point? sel = SelectedIcon;
|
||||||
|
if (!sel.HasValue)
|
||||||
|
{
|
||||||
|
template.Icon = -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
template.Icon = (sel.Value.Y * template.Type.ThumbnailIconWidth) + sel.Value.X;
|
||||||
|
}
|
||||||
|
return template;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value is Template tem)
|
||||||
|
{
|
||||||
|
SelectedTemplateType = tem.Type;
|
||||||
|
if (tem.Icon < 0)
|
||||||
|
{
|
||||||
|
SelectedIcon = null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Point p = new Point(tem.Icon % tem.Type.ThumbnailIconWidth, tem.Icon / tem.Type.ThumbnailIconWidth);
|
||||||
|
SelectedIcon = p;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private bool placementMode;
|
private bool placementMode;
|
||||||
|
|
||||||
protected override Boolean InPlacementMode
|
protected override Boolean InPlacementMode
|
||||||
|
@ -43,6 +43,19 @@ namespace MobiusEditor.Tools
|
|||||||
private Map previewMap;
|
private Map previewMap;
|
||||||
protected override Map RenderMap => previewMap;
|
protected override Map RenderMap => previewMap;
|
||||||
|
|
||||||
|
public override Object CurrentObject
|
||||||
|
{
|
||||||
|
get { return mockTerrain; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value is Terrain ter)
|
||||||
|
{
|
||||||
|
selectedTerrainType = ter.Type;
|
||||||
|
mockTerrain.CloneDataFrom(ter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private bool placementMode;
|
private bool placementMode;
|
||||||
|
|
||||||
protected override Boolean InPlacementMode
|
protected override Boolean InPlacementMode
|
||||||
@ -78,7 +91,6 @@ namespace MobiusEditor.Tools
|
|||||||
mapPanel.Invalidate(map, new Rectangle(navigationWidget.MouseCell, selectedTerrainType.OverlapBounds.Size));
|
mapPanel.Invalidate(map, new Rectangle(navigationWidget.MouseCell, selectedTerrainType.OverlapBounds.Size));
|
||||||
}
|
}
|
||||||
mockTerrain.Type = selectedTerrainType;
|
mockTerrain.Type = selectedTerrainType;
|
||||||
RefreshPreviewPanel();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -88,7 +100,6 @@ namespace MobiusEditor.Tools
|
|||||||
{
|
{
|
||||||
previewMap = map;
|
previewMap = map;
|
||||||
mockTerrain = new Terrain();
|
mockTerrain = new Terrain();
|
||||||
mockTerrain.PropertyChanged += MockTerrain_PropertyChanged;
|
|
||||||
this.terrainTypeListBox = terrainTypeComboBox;
|
this.terrainTypeListBox = terrainTypeComboBox;
|
||||||
this.terrainTypeListBox.SelectedIndexChanged += TerrainTypeCombo_SelectedIndexChanged;
|
this.terrainTypeListBox.SelectedIndexChanged += TerrainTypeCombo_SelectedIndexChanged;
|
||||||
this.terrainTypeMapPanel = terrainTypeMapPanel;
|
this.terrainTypeMapPanel = terrainTypeMapPanel;
|
||||||
@ -99,6 +110,7 @@ namespace MobiusEditor.Tools
|
|||||||
this.terrainProperties.Terrain = mockTerrain;
|
this.terrainProperties.Terrain = mockTerrain;
|
||||||
this.terrainProperties.Visible = plugin.Map.TerrainEventTypes.Count > 0;
|
this.terrainProperties.Visible = plugin.Map.TerrainEventTypes.Count > 0;
|
||||||
SelectedTerrainType = terrainTypeComboBox.Types.First() as TerrainType;
|
SelectedTerrainType = terrainTypeComboBox.Types.First() as TerrainType;
|
||||||
|
RefreshPreviewPanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MapPanel_MouseLeave(object sender, EventArgs e)
|
private void MapPanel_MouseLeave(object sender, EventArgs e)
|
||||||
@ -189,6 +201,7 @@ namespace MobiusEditor.Tools
|
|||||||
private void TerrainTypeCombo_SelectedIndexChanged(object sender, EventArgs e)
|
private void TerrainTypeCombo_SelectedIndexChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
SelectedTerrainType = terrainTypeListBox.SelectedValue as TerrainType;
|
SelectedTerrainType = terrainTypeListBox.SelectedValue as TerrainType;
|
||||||
|
RefreshPreviewPanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void TerrainTool_KeyDown(object sender, KeyEventArgs e)
|
private void TerrainTool_KeyDown(object sender, KeyEventArgs e)
|
||||||
@ -593,6 +606,7 @@ namespace MobiusEditor.Tools
|
|||||||
{
|
{
|
||||||
base.Activate();
|
base.Activate();
|
||||||
this.Deactivate(true);
|
this.Deactivate(true);
|
||||||
|
this.mockTerrain.PropertyChanged += MockTerrain_PropertyChanged;
|
||||||
this.mapPanel.MouseDown += MapPanel_MouseDown;
|
this.mapPanel.MouseDown += MapPanel_MouseDown;
|
||||||
this.mapPanel.MouseMove += MapPanel_MouseMove;
|
this.mapPanel.MouseMove += MapPanel_MouseMove;
|
||||||
this.mapPanel.MouseUp += MapPanel_MouseUp;
|
this.mapPanel.MouseUp += MapPanel_MouseUp;
|
||||||
@ -616,6 +630,7 @@ namespace MobiusEditor.Tools
|
|||||||
this.ExitPlacementMode();
|
this.ExitPlacementMode();
|
||||||
base.Deactivate();
|
base.Deactivate();
|
||||||
}
|
}
|
||||||
|
this.mockTerrain.PropertyChanged -= MockTerrain_PropertyChanged;
|
||||||
this.mapPanel.MouseDown -= MapPanel_MouseDown;
|
this.mapPanel.MouseDown -= MapPanel_MouseDown;
|
||||||
this.mapPanel.MouseMove -= MapPanel_MouseMove;
|
this.mapPanel.MouseMove -= MapPanel_MouseMove;
|
||||||
this.mapPanel.MouseUp -= MapPanel_MouseUp;
|
this.mapPanel.MouseUp -= MapPanel_MouseUp;
|
||||||
|
@ -43,6 +43,23 @@ namespace MobiusEditor.Tools
|
|||||||
private Map previewMap;
|
private Map previewMap;
|
||||||
protected override Map RenderMap => previewMap;
|
protected override Map RenderMap => previewMap;
|
||||||
|
|
||||||
|
public override Object CurrentObject
|
||||||
|
{
|
||||||
|
get { return mockUnit; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value is Unit un)
|
||||||
|
{
|
||||||
|
if (plugin.ActiveHouse != null)
|
||||||
|
{
|
||||||
|
un.House = plugin.ActiveHouse;
|
||||||
|
}
|
||||||
|
SelectedUnitType = un.Type;
|
||||||
|
mockUnit.CloneDataFrom(un);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private bool placementMode;
|
private bool placementMode;
|
||||||
|
|
||||||
protected override Boolean InPlacementMode
|
protected override Boolean InPlacementMode
|
||||||
@ -77,7 +94,6 @@ namespace MobiusEditor.Tools
|
|||||||
mapPanel.Invalidate(map, Rectangle.Inflate(new Rectangle(navigationWidget.MouseCell, new Size(1, 1)), 1, 1));
|
mapPanel.Invalidate(map, Rectangle.Inflate(new Rectangle(navigationWidget.MouseCell, new Size(1, 1)), 1, 1));
|
||||||
}
|
}
|
||||||
mockUnit.Type = selectedUnitType;
|
mockUnit.Type = selectedUnitType;
|
||||||
RefreshPreviewPanel();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -96,7 +112,6 @@ namespace MobiusEditor.Tools
|
|||||||
Direction = map.UnitDirectionTypes.Where(d => d.Equals(FacingType.North)).First(),
|
Direction = map.UnitDirectionTypes.Where(d => d.Equals(FacingType.North)).First(),
|
||||||
Mission = map.GetDefaultMission(unitType)
|
Mission = map.GetDefaultMission(unitType)
|
||||||
};
|
};
|
||||||
mockUnit.PropertyChanged += MockUnit_PropertyChanged;
|
|
||||||
this.unitTypesBox = unitTypesBox;
|
this.unitTypesBox = unitTypesBox;
|
||||||
this.unitTypesBox.Types = unitTypes;
|
this.unitTypesBox.Types = unitTypes;
|
||||||
this.unitTypesBox.SelectedIndexChanged += UnitTypeComboBox_SelectedIndexChanged;
|
this.unitTypesBox.SelectedIndexChanged += UnitTypeComboBox_SelectedIndexChanged;
|
||||||
@ -107,6 +122,7 @@ namespace MobiusEditor.Tools
|
|||||||
this.objectProperties = objectProperties;
|
this.objectProperties = objectProperties;
|
||||||
this.objectProperties.Object = mockUnit;
|
this.objectProperties.Object = mockUnit;
|
||||||
SelectedUnitType = mockUnit.Type;
|
SelectedUnitType = mockUnit.Type;
|
||||||
|
RefreshPreviewPanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void UpdateExpansionUnits()
|
protected override void UpdateExpansionUnits()
|
||||||
@ -219,6 +235,10 @@ namespace MobiusEditor.Tools
|
|||||||
|
|
||||||
private void MockUnit_PropertyChanged(object sender, PropertyChangedEventArgs e)
|
private void MockUnit_PropertyChanged(object sender, PropertyChangedEventArgs e)
|
||||||
{
|
{
|
||||||
|
if (e.PropertyName == "House")
|
||||||
|
{
|
||||||
|
plugin.ActiveHouse = mockUnit.House;
|
||||||
|
}
|
||||||
RefreshPreviewPanel();
|
RefreshPreviewPanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -657,6 +677,7 @@ namespace MobiusEditor.Tools
|
|||||||
{
|
{
|
||||||
base.Activate();
|
base.Activate();
|
||||||
Deactivate(true);
|
Deactivate(true);
|
||||||
|
mockUnit.PropertyChanged += MockUnit_PropertyChanged;
|
||||||
this.mapPanel.MouseDown += MapPanel_MouseDown;
|
this.mapPanel.MouseDown += MapPanel_MouseDown;
|
||||||
this.mapPanel.MouseUp += MapPanel_MouseUp;
|
this.mapPanel.MouseUp += MapPanel_MouseUp;
|
||||||
this.mapPanel.MouseDoubleClick += MapPanel_MouseDoubleClick;
|
this.mapPanel.MouseDoubleClick += MapPanel_MouseDoubleClick;
|
||||||
@ -680,6 +701,7 @@ namespace MobiusEditor.Tools
|
|||||||
ExitPlacementMode();
|
ExitPlacementMode();
|
||||||
base.Deactivate();
|
base.Deactivate();
|
||||||
}
|
}
|
||||||
|
mockUnit.PropertyChanged -= MockUnit_PropertyChanged;
|
||||||
this.mapPanel.MouseDown -= MapPanel_MouseDown;
|
this.mapPanel.MouseDown -= MapPanel_MouseDown;
|
||||||
this.mapPanel.MouseUp -= MapPanel_MouseUp;
|
this.mapPanel.MouseUp -= MapPanel_MouseUp;
|
||||||
this.mapPanel.MouseDoubleClick -= MapPanel_MouseDoubleClick;
|
this.mapPanel.MouseDoubleClick -= MapPanel_MouseDoubleClick;
|
||||||
|
@ -31,6 +31,9 @@ namespace MobiusEditor.Tools
|
|||||||
public abstract class ViewTool : ITool
|
public abstract class ViewTool : ITool
|
||||||
{
|
{
|
||||||
protected readonly IGamePlugin plugin;
|
protected readonly IGamePlugin plugin;
|
||||||
|
public IGamePlugin Plugin => plugin;
|
||||||
|
public abstract Object CurrentObject { get; set; }
|
||||||
|
|
||||||
protected readonly Map map;
|
protected readonly Map map;
|
||||||
|
|
||||||
protected readonly MapPanel mapPanel;
|
protected readonly MapPanel mapPanel;
|
||||||
|
@ -44,6 +44,18 @@ namespace MobiusEditor.Tools
|
|||||||
private Map previewMap;
|
private Map previewMap;
|
||||||
protected override Map RenderMap => previewMap;
|
protected override Map RenderMap => previewMap;
|
||||||
|
|
||||||
|
public override Object CurrentObject
|
||||||
|
{
|
||||||
|
get { return selectedWallType; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value is OverlayType ovt)
|
||||||
|
{
|
||||||
|
SelectedWallType = ovt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private bool placementMode;
|
private bool placementMode;
|
||||||
|
|
||||||
protected override Boolean InPlacementMode
|
protected override Boolean InPlacementMode
|
||||||
@ -65,7 +77,7 @@ namespace MobiusEditor.Tools
|
|||||||
}
|
}
|
||||||
selectedWallType = value;
|
selectedWallType = value;
|
||||||
wallTypeComboBox.SelectedValue = selectedWallType;
|
wallTypeComboBox.SelectedValue = selectedWallType;
|
||||||
RefreshMapPanel();
|
base.RefreshPreviewPanel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -310,7 +322,7 @@ namespace MobiusEditor.Tools
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RefreshMapPanel()
|
protected override void RefreshPreviewPanel()
|
||||||
{
|
{
|
||||||
wallTypeMapPanel.MapImage = SelectedWallType?.Thumbnail;
|
wallTypeMapPanel.MapImage = SelectedWallType?.Thumbnail;
|
||||||
}
|
}
|
||||||
|
@ -41,6 +41,20 @@ namespace MobiusEditor.Tools
|
|||||||
private Map previewMap;
|
private Map previewMap;
|
||||||
protected override Map RenderMap => previewMap;
|
protected override Map RenderMap => previewMap;
|
||||||
|
|
||||||
|
private int lastSelectedIndex;
|
||||||
|
public override Object CurrentObject
|
||||||
|
{
|
||||||
|
get { return lastSelectedIndex; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value is int index)
|
||||||
|
{
|
||||||
|
lastSelectedIndex = index;
|
||||||
|
waypointCombo.SelectedIndex = index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private bool placementMode;
|
private bool placementMode;
|
||||||
|
|
||||||
protected override Boolean InPlacementMode
|
protected override Boolean InPlacementMode
|
||||||
@ -166,6 +180,7 @@ namespace MobiusEditor.Tools
|
|||||||
waypointCombo.DataSource = null;
|
waypointCombo.DataSource = null;
|
||||||
waypointCombo.Items.Clear();
|
waypointCombo.Items.Clear();
|
||||||
waypointCombo.DataSource = wp.ToArray();
|
waypointCombo.DataSource = wp.ToArray();
|
||||||
|
lastSelectedIndex = selected;
|
||||||
waypointCombo.SelectedIndex = selected;
|
waypointCombo.SelectedIndex = selected;
|
||||||
if (oldCell.HasValue)
|
if (oldCell.HasValue)
|
||||||
{
|
{
|
||||||
@ -387,6 +402,7 @@ namespace MobiusEditor.Tools
|
|||||||
|
|
||||||
private void WaypointCombo_SelectedIndexChanged(Object sender, EventArgs e)
|
private void WaypointCombo_SelectedIndexChanged(Object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
lastSelectedIndex = waypointCombo.SelectedIndex;
|
||||||
Waypoint selected = waypointCombo.SelectedItem as Waypoint;
|
Waypoint selected = waypointCombo.SelectedItem as Waypoint;
|
||||||
jumpToButton.Enabled = selected != null && selected.Cell.HasValue;
|
jumpToButton.Enabled = selected != null && selected.Cell.HasValue;
|
||||||
if (selected != null && selected.Cell.HasValue)
|
if (selected != null && selected.Cell.HasValue)
|
||||||
@ -554,6 +570,7 @@ namespace MobiusEditor.Tools
|
|||||||
waypointCombo.Items.Clear();
|
waypointCombo.Items.Clear();
|
||||||
waypointCombo.DataSource = map.Waypoints.ToArray();
|
waypointCombo.DataSource = map.Waypoints.ToArray();
|
||||||
waypointCombo.SelectedIndex = selected;
|
waypointCombo.SelectedIndex = selected;
|
||||||
|
lastSelectedIndex = selected;
|
||||||
this.waypointCombo.SelectedIndexChanged += this.WaypointCombo_SelectedIndexChanged;
|
this.waypointCombo.SelectedIndexChanged += this.WaypointCombo_SelectedIndexChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user