Add mapping editor (#23427)
* Add mapping editor (#757) * Remove mapping actions, never again * Cleanup actions system * Jarvis, remove all references to CM14 * Fix InventoryUIController crashing when an InventoryGui is not found * Rename mapping1 to mapping * Clean up context calls * Add doc comments * Add delegate for hiding decals in the mapping screen * Jarvis mission failed * a * Add test * Fix not flushing save stream in mapping manager * change * Fix verbs * fixes * localise --------- Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com> Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com> Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
This commit is contained in:
69
Content.Client/Mapping/MappingManager.cs
Normal file
69
Content.Client/Mapping/MappingManager.cs
Normal file
@@ -0,0 +1,69 @@
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Content.Shared.Mapping;
|
||||
using Robust.Client.UserInterface;
|
||||
using Robust.Shared.Network;
|
||||
|
||||
namespace Content.Client.Mapping;
|
||||
|
||||
public sealed class MappingManager : IPostInjectInit
|
||||
{
|
||||
[Dependency] private readonly IFileDialogManager _file = default!;
|
||||
[Dependency] private readonly IClientNetManager _net = default!;
|
||||
|
||||
private Stream? _saveStream;
|
||||
private MappingMapDataMessage? _mapData;
|
||||
|
||||
public void PostInject()
|
||||
{
|
||||
_net.RegisterNetMessage<MappingSaveMapMessage>();
|
||||
_net.RegisterNetMessage<MappingSaveMapErrorMessage>(OnSaveError);
|
||||
_net.RegisterNetMessage<MappingMapDataMessage>(OnMapData);
|
||||
}
|
||||
|
||||
private void OnSaveError(MappingSaveMapErrorMessage message)
|
||||
{
|
||||
_saveStream?.DisposeAsync();
|
||||
_saveStream = null;
|
||||
}
|
||||
|
||||
private async void OnMapData(MappingMapDataMessage message)
|
||||
{
|
||||
if (_saveStream == null)
|
||||
{
|
||||
_mapData = message;
|
||||
return;
|
||||
}
|
||||
|
||||
await _saveStream.WriteAsync(Encoding.ASCII.GetBytes(message.Yml));
|
||||
await _saveStream.DisposeAsync();
|
||||
|
||||
_saveStream = null;
|
||||
_mapData = null;
|
||||
}
|
||||
|
||||
public async Task SaveMap()
|
||||
{
|
||||
if (_saveStream != null)
|
||||
await _saveStream.DisposeAsync();
|
||||
|
||||
var request = new MappingSaveMapMessage();
|
||||
_net.ClientSendMessage(request);
|
||||
|
||||
var path = await _file.SaveFile();
|
||||
if (path is not { fileStream: var stream })
|
||||
return;
|
||||
|
||||
if (_mapData != null)
|
||||
{
|
||||
await stream.WriteAsync(Encoding.ASCII.GetBytes(_mapData.Yml));
|
||||
_mapData = null;
|
||||
await stream.FlushAsync();
|
||||
await stream.DisposeAsync();
|
||||
return;
|
||||
}
|
||||
|
||||
_saveStream = stream;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user