* 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>
70 lines
1.8 KiB
C#
70 lines
1.8 KiB
C#
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;
|
|
}
|
|
}
|