From 4df5a73ec0992db40a0d9894e9636934ee480c7f Mon Sep 17 00:00:00 2001 From: Leonid Pershin Date: Mon, 3 Aug 2026 17:48:29 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9A=D0=BE=D0=BC=D0=BD=D0=B0=D1=82=D1=8B:=20?= =?UTF-8?q?=D0=94=D0=BE=D0=B9=D0=BA=D0=B0=20=D0=BD=D0=B0=202=20=D1=81?= =?UTF-8?q?=D0=BB=D0=BE=D1=82=D0=B0,=20=D1=86=D0=B5=D0=BD=D1=82=D1=80?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D1=81=D0=BE=D0=BD=D0=B0=D0=B6=D0=B5=D0=B9,=20=D0=B1?= =?UTF-8?q?=D0=B5=D0=B7=20idle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Дойка (доильня) теперь на 2 персонажа - Персонажи центрируются в ячейке (center-anchor вместо foot-anchor — состояния разного размера больше не смещаются) - Логово/Дойка используют milk-состояние с action-анимациями (не idle) - orc -> shortstack среди ходоков (у orc нет milk-состояния) Co-Authored-By: Claude Opus 4.8 --- src/RoomMap.cs | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) 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);