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(); }