using Friflo.Engine.ECS;
using Microsoft.Xna.Framework;
using MrGameEng.Net;
namespace LittleSim.Web;
// ВНИМАНИЕ: бинарное зеркало сетевого контракта десктопа (src/LittleSim/Net/NetSchema.cs).
// Веб-клиент не может ссылаться на LittleSim/MrGameEng.Graphics (они собраны против
// MonoGame DesktopGL, а тут KNI), поэтому реплицируемые компоненты продублированы
// со СТРОГО тем же лейаутом и порядком регистрации. Меняешь схему там — меняй здесь.
// Уйдёт после пер-платформенной сборки графических библиотек (см. docs/web-client.md).
/// Зеркало MrGameEng.Graphics.Transform2D: Position(8) + Rotation(4) + Scale(8).
public struct NetTransform : IComponent
{
/// Позиция в мировых координатах.
public Vector2 Position;
/// Поворот в радианах.
public float Rotation;
/// Масштаб (у жителей — размер квада в пикселях).
public Vector2 Scale;
}
/// Зеркало LittleSim.Sim.PawnNeeds: Energy(4).
public struct NetPawnNeeds : IComponent
{
/// Запас сил жителя в [0, 1] — затемняет спрайт.
public float Energy;
}
/// Схема репликации веб-клиента — порядок тот же, что в NetSchema десктопа.
public static class WebNetSchema
{
/// Порт сервера по умолчанию (NetSchema.DefaultPort).
public const int DefaultPort = 9050;
/// Transform2D → NetTransform, PawnNeeds → NetPawnNeeds.
public static ReplicationSchema Create() =>
new ReplicationSchema().Register().Register();
}