Комнаты: Дойка на 2 слота, центрирование персонажей, без idle

- Дойка (доильня) теперь на 2 персонажа
- Персонажи центрируются в ячейке (center-anchor вместо foot-anchor — состояния
  разного размера больше не смещаются)
- Логово/Дойка используют milk-состояние с action-анимациями (не idle)
- orc -> shortstack среди ходоков (у orc нет milk-состояния)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Leonid Pershin
2026-08-03 17:48:29 +03:00
co-authored by Claude Opus 4.8
parent 70b65fde0c
commit 4df5a73ec0
+15 -7
View File
@@ -131,9 +131,9 @@ public partial class RoomMap : Node2D
_rooms = new List<Room>
{
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>();
string a = PickAction(anims, group);