Skip to content

Commit

Permalink
Move landbrush management code to LandBrushManager :)
Browse files Browse the repository at this point in the history
  • Loading branch information
kaczy93 committed Oct 9, 2024
1 parent 28b354d commit cdf097f
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 58 deletions.
51 changes: 1 addition & 50 deletions CentrED/Map/MapManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,6 @@ public Tool ActiveTool
public bool AnimatedStatics = true;
public bool ShowGrid = false;
public bool DebugLogging;
public Dictionary<ushort, List<(string, string)>> tileLandBrushesNames = new();

public readonly Camera Camera = new();

Expand Down Expand Up @@ -243,7 +242,6 @@ public MapManager(GraphicsDevice gd)
StaticTiles = new List<StaticObject>[Client.Width * 8, Client.Height * 8];
VirtualLayer.Width = (ushort)(Client.Width * 8);
VirtualLayer.Height = (ushort)(Client.Height * 8);
InitLandBrushes();
};
Client.Disconnected += () =>
{
Expand All @@ -265,54 +263,7 @@ public MapManager(GraphicsDevice gd)

_activeTool = DefaultTool;
}

public void InitLandBrushes()
{
tileLandBrushesNames.Clear();
var landBrushes = ProfileManager.ActiveProfile.LandBrush;
foreach (var keyValuePair in landBrushes)
{
var name = keyValuePair.Key;
var brush = keyValuePair.Value;
var fullTiles = brush.Tiles;
foreach (var fullTile in fullTiles)
{
AddLandBrushEntry(fullTile, name, name);
}
var transitions = brush.Transitions;
foreach (var valuePair in transitions)
{
var toName = valuePair.Key;
var tiles = valuePair.Value;
foreach (var tile in tiles)
{
AddLandBrushEntry(tile.TileID, name, toName);
}
}
}
}

public void AddLandBrushEntry(ushort tileId, string from, string to)
{
if (!tileLandBrushesNames.ContainsKey(tileId))
{
tileLandBrushesNames.Add(tileId, new List<(string, string)>());
}
tileLandBrushesNames[tileId].Add((from, to));
}

public void RemoveLandBrushEntry(ushort tileId, string from, string to)
{
if (tileLandBrushesNames.ContainsKey(tileId))
{
tileLandBrushesNames[tileId].Remove((from, to));
}
if (tileLandBrushesNames[tileId].Count <= 0)
{
tileLandBrushesNames.Remove(tileId);
}
}


public void ReloadShader()
{
if(File.Exists("MapEffect.fxc"))
Expand Down
6 changes: 3 additions & 3 deletions CentrED/Tools/LandBrushTool.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ public class LandBrushTool : BaseTool
private bool _fixedZ = false;
private int _fixedHeightZ = 0, _randomZ = 0;
private string _activeLandBrushName;
private LandBrushManagerWindow _manager => UIManager.GetWindow<LandBrushManagerWindow>();

public LandBrushTool()
{
Expand All @@ -26,8 +27,7 @@ internal override void Draw()
{
base.Draw();

var manager = UIManager.GetWindow<LandBrushManagerWindow>();
manager.LandBrushCombo(ref _activeLandBrushName);
_manager.LandBrushCombo(ref _activeLandBrushName);
ImGui.Checkbox("Fixed Z", ref _fixedZ);
if (_fixedZ)
{
Expand Down Expand Up @@ -131,7 +131,7 @@ private Direction AddTransistion(LandObject lo, Direction direction)
var newTileId = currentTileId;
LandBrushTransition? targetTransition = null;

if (MapManager.tileLandBrushesNames.TryGetValue(currentTileId, out var tileLandBrushNames))
if (_manager.tileToLandBrushNames.TryGetValue(currentTileId, out var tileLandBrushNames))
{
//Current tile is defined in at least one brush
if (!TryGetBestMatchingLandBrush(tileLandBrushNames, currentTileId, direction, out var fromBrushName, out var toBrushName))
Expand Down
64 changes: 59 additions & 5 deletions CentrED/UI/Windows/LandBrushManagerWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@ namespace CentrED.UI.Windows;

public class LandBrushManagerWindow : Window
{
public LandBrushManagerWindow()
{
CEDClient.Connected += InitLandBrushes;
}

public override string Name => "LandBrush Manager";

public static readonly Vector2 FullSize = new(44, 44);
Expand All @@ -31,6 +36,8 @@ public class LandBrushManagerWindow : Window
public LandBrush? Selected => _landBrushes.GetValueOrDefault(_selectedLandBrushName);

private static readonly Vector2 ComboFramePadding = ImGui.GetStyle().FramePadding with{ Y = (float)((HalfSize.Y - ImGui.GetTextLineHeight()) * 0.5) };

public Dictionary<ushort, List<(string, string)>> tileToLandBrushNames = new();

private bool _unsavedChanges;

Expand Down Expand Up @@ -184,7 +191,7 @@ private void DrawFullTiles()
if (ImGui.SmallButton($"x##{fullTile}"))
{
Selected.Tiles.Remove(fullTile);
CEDGame.MapManager.RemoveLandBrushEntry(fullTile, _selectedLandBrushName, _selectedLandBrushName);
RemoveLandBrushEntry(fullTile, _selectedLandBrushName, _selectedLandBrushName);
_unsavedChanges = true;
}
ImGui.PopStyleColor(2);
Expand All @@ -205,7 +212,7 @@ private void DrawFullTiles()
if(!Selected.Tiles.Contains(id))
{
Selected.Tiles.Add(id);
CEDGame.MapManager.AddLandBrushEntry(id, _selectedLandBrushName, _selectedLandBrushName);
AddLandBrushEntry(id, _selectedLandBrushName, _selectedLandBrushName);
_unsavedChanges = true;
}
}
Expand Down Expand Up @@ -255,7 +262,7 @@ private void DrawTransitions()
if (ImGui.SmallButton($"x##{transition.TileID}"))
{
transitions.Remove(transition);
CEDGame.MapManager.RemoveLandBrushEntry(transition.TileID, _selectedLandBrushName, _selectedTransitionBrushName);
RemoveLandBrushEntry(transition.TileID, _selectedLandBrushName, _selectedTransitionBrushName);
_unsavedChanges = true;
}
ImGui.PopStyleColor(2);
Expand Down Expand Up @@ -299,7 +306,7 @@ private void DrawTransitions()
if(transitions.All(t => t.TileID != id))
{
transitions.Add(new LandBrushTransition(id));
CEDGame.MapManager.AddLandBrushEntry(id, _selectedLandBrushName, _selectedTransitionBrushName);
AddLandBrushEntry(id, _selectedLandBrushName, _selectedTransitionBrushName);
_unsavedChanges = true;
}
}
Expand Down Expand Up @@ -449,6 +456,27 @@ private void DrawTransitionPopups()
ImGui.EndPopup();
}
}

public void AddLandBrushEntry(ushort tileId, string from, string to)
{
if (!tileToLandBrushNames.ContainsKey(tileId))
{
tileToLandBrushNames.Add(tileId, new List<(string, string)>());
}
tileToLandBrushNames[tileId].Add((from, to));
}

public void RemoveLandBrushEntry(ushort tileId, string from, string to)
{
if (tileToLandBrushNames.ContainsKey(tileId))
{
tileToLandBrushNames[tileId].Remove((from, to));
}
if (tileToLandBrushNames[tileId].Count <= 0)
{
tileToLandBrushNames.Remove(tileId);
}
}

#region Import
private void DrawImport()
Expand Down Expand Up @@ -531,7 +559,7 @@ private void ImportLandBrush()
}
target.Add(newBrush.Name, newBrush);
}
CEDGame.MapManager.InitLandBrushes();
InitLandBrushes();
ProfileManager.Save();
_selectedLandBrushName = ProfileManager.ActiveProfile.LandBrush.Keys.FirstOrDefault("");
_selectedTransitionBrushName = Selected?.Transitions.Keys.FirstOrDefault("") ?? "";
Expand All @@ -542,6 +570,32 @@ private void ImportLandBrush()
Console.WriteLine(e);
}
}

public void InitLandBrushes()
{
tileToLandBrushNames.Clear();
var landBrushes = ProfileManager.ActiveProfile.LandBrush;
foreach (var keyValuePair in landBrushes)
{
var name = keyValuePair.Key;
var brush = keyValuePair.Value;
var fullTiles = brush.Tiles;
foreach (var fullTile in fullTiles)
{
AddLandBrushEntry(fullTile, name, name);
}
var transitions = brush.Transitions;
foreach (var valuePair in transitions)
{
var toName = valuePair.Key;
var tiles = valuePair.Value;
foreach (var tile in tiles)
{
AddLandBrushEntry(tile.TileID, name, toName);
}
}
}
}

private bool TryParseHex(string value, out ushort result)
{
Expand Down

0 comments on commit cdf097f

Please sign in to comment.