diff --git a/src/RoomMap.cs b/src/RoomMap.cs index 647a14c..078b3b7 100644 --- a/src/RoomMap.cs +++ b/src/RoomMap.cs @@ -131,9 +131,9 @@ public partial class RoomMap : Node2D _rooms = new List { - new Room { Type = "Спальня", Col = 1, Row = 0, Span = 3, Cap = 2, States = new[] { "stand", "combat" } }, - new Room { Type = "Логово", Col = 0, Row = 2, Span = 1, Cap = 2, States = new[] { "birth", "down", "milk" } }, - new Room { Type = "Дойка", Col = 4, Row = 3, Span = 1, Cap = 1, States = new[] { "milk", "milk2" } }, + new Room { Type = "Спальня", Col = 1, Row = 0, Span = 3, Cap = 2, States = new[] { "stand", "combat" } }, + new Room { Type = "Логово", Col = 0, Row = 2, Span = 1, Cap = 2, States = new[] { "milk", "birth", "down" } }, + new Room { Type = "Дойка", Col = 4, Row = 3, Span = 1, Cap = 2, States = new[] { "milk", "milk2" } }, }; // рамки поверх всех ячеек — читаемость сетки @@ -197,7 +197,7 @@ public partial class RoomMap : Node2D { ("res://characters/elf1/elf1_combat_native.tscn", 0), ("res://characters/knight/knight_combat_native.tscn", 1), - ("res://characters/orc/orc_combat_native.tscn", 2), + ("res://characters/shortstack/shortstack_combat_native.tscn", 2), ("res://characters/sister/sister_combat_native.tscn", 3), ("res://characters/satyress/satyress_combat_native.tscn", 4), }; @@ -386,17 +386,25 @@ public partial class RoomMap : Node2D if (room.Occ.Count > 0) LayoutRoom(room); } - // расставить по слотам и включить анимацию: 1 в комнате — одиночную, 2+ — групповую + private static readonly Vector2 CenterAnchor = new Vector2(640f, 360f); // центр кадра 1280x720 + + // расставить по слотам (центрируя в комнате) и включить анимацию: 1 — одиночную, 2+ — групповую private void LayoutRoom(Room room) { int n = room.Occ.Count; bool group = n >= 2; + float center = room.Col * Cell + room.Span * Cell * 0.5f; + float band = room.Span * Cell * 0.5f; + float cellY = room.Row * Cell + Cell * 0.5f; for (int i = 0; i < n; i++) { var q = room.Occ[i]; - float sx = room.Col * Cell + (i + 1f) / (n + 1f) * (room.Span * Cell); + float sx = n == 1 ? center : center - band / 2f + band * (i / (float)(n - 1)); q.X = sx; - q.Node.Position = new Vector2(sx, FloorY(room.Row)); + // центр-анкор: центр персонажа (любого состояния) — в центр ячейки + if (q.Node.GetChildCount() > 0 && q.Node.GetChild(0) is Node2D sc) + sc.Position = -CenterAnchor * CharScale; + q.Node.Position = new Vector2(sx, cellY); q.Node.Scale = new Vector2(1f, 1f); var anims = q.Ap != null ? q.Ap.GetAnimationList() : System.Array.Empty(); string a = PickAction(anims, group);