Files
RobustToolbox/Robust.Shared/Network/Messages/MsgPlacement.cs
ike709 8917b29255 Convert Tile.TypeId to an int (#4307)
Co-authored-by: ike709 <ike709@github.com>
Co-authored-by: DrSmugleaf <drsmugleaf@gmail.com>
2023-08-26 22:16:14 +10:00

108 lines
4.1 KiB
C#

using System;
using System.Numerics;
using Lidgren.Network;
using Robust.Shared.Enums;
using Robust.Shared.GameObjects;
using Robust.Shared.Map;
using Robust.Shared.Maths;
using Robust.Shared.Serialization;
#nullable disable
namespace Robust.Shared.Network.Messages
{
public sealed class MsgPlacement : NetMessage
{
public override MsgGroups MsgGroup => MsgGroups.Command;
public PlacementManagerMessage PlaceType { get; set; }
public string Align { get; set; }
/// <summary>
/// Should we replace existing entities if possible
/// </summary>
public bool Replacement { get; set; }
public bool IsTile { get; set; }
public int TileType { get; set; }
public string EntityTemplateName { get; set; }
public EntityCoordinates EntityCoordinates { get; set; }
public Direction DirRcv { get; set; }
public EntityUid EntityUid { get; set; }
public int Range { get; set; }
public string ObjType { get; set; }
public string AlignOption { get; set; }
public Vector2 RectSize { get; set; }
public override void ReadFromBuffer(NetIncomingMessage buffer, IRobustSerializer serializer)
{
PlaceType = (PlacementManagerMessage) buffer.ReadByte();
switch (PlaceType)
{
case PlacementManagerMessage.RequestPlacement:
Align = buffer.ReadString();
IsTile = buffer.ReadBoolean();
Replacement = buffer.ReadBoolean();
if (IsTile) TileType = buffer.ReadInt32();
else EntityTemplateName = buffer.ReadString();
EntityCoordinates = buffer.ReadEntityCoordinates();
DirRcv = (Direction)buffer.ReadByte();
break;
case PlacementManagerMessage.StartPlacement:
Range = buffer.ReadInt32();
IsTile = buffer.ReadBoolean();
ObjType = buffer.ReadString();
AlignOption = buffer.ReadString();
break;
case PlacementManagerMessage.CancelPlacement:
case PlacementManagerMessage.PlacementFailed:
throw new NotImplementedException();
case PlacementManagerMessage.RequestEntRemove:
EntityUid = new EntityUid(buffer.ReadInt32());
break;
case PlacementManagerMessage.RequestRectRemove:
EntityCoordinates = buffer.ReadEntityCoordinates();
RectSize = buffer.ReadVector2();
break;
}
}
public override void WriteToBuffer(NetOutgoingMessage buffer, IRobustSerializer serializer)
{
buffer.Write((byte)PlaceType);
switch (PlaceType)
{
case PlacementManagerMessage.RequestPlacement:
buffer.Write(Align);
buffer.Write(IsTile);
buffer.Write(Replacement);
if(IsTile) buffer.Write(TileType);
else buffer.Write(EntityTemplateName);
buffer.Write(EntityCoordinates);
buffer.Write((byte)DirRcv);
break;
case PlacementManagerMessage.StartPlacement:
buffer.Write(Range);
buffer.Write(IsTile);
buffer.Write(ObjType);
buffer.Write(AlignOption);
break;
case PlacementManagerMessage.CancelPlacement:
case PlacementManagerMessage.PlacementFailed:
throw new NotImplementedException();
case PlacementManagerMessage.RequestEntRemove:
buffer.Write((int)EntityUid);
break;
case PlacementManagerMessage.RequestRectRemove:
buffer.Write(EntityCoordinates);
buffer.Write(RectSize);
break;
}
}
}
}