ArmyViewsTests stellt alle zehn Glutpakt-Truppen und die Heldin in einer Partie auf, Bilder von Aufstellung und Kampf mit alten Modellen und Meshy-Figuren; Maßtabelle und Befund zu Größen und Lesbarkeit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
98 lines
4.5 KiB
C#
98 lines
4.5 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Linq;
|
|
using Luneraria.Core;
|
|
using Luneraria.View;
|
|
using NUnit.Framework;
|
|
using UnityEngine;
|
|
using UnityEngine.TestTools;
|
|
|
|
namespace Luneraria.UI.Tests
|
|
{
|
|
/// <summary>
|
|
/// U5.5 overall check of a whole Glutpakt army in the real game: the human seat buys all ten
|
|
/// Glutpakt troops (the upgrades as their base troop, then upgraded) and hires the hero
|
|
/// Funkenlanze in round 3; the camera shows the formation close and at lane distance, the fight
|
|
/// close, at lane distance and from above the map. Like HudViewsTests, commands go straight to
|
|
/// the match followed by the preview rebuild. A capture tool, not part of the suite:
|
|
/// -testFilter "Luneraria.UI.Tests.ArmyViewsTests"; LUNE_EVIDENCE names the folder below
|
|
/// docs/port/screenshots (default u5.5-heer).
|
|
/// </summary>
|
|
[Explicit("Bildwerkzeug: nur gezielt per -testFilter")]
|
|
public sealed class ArmyViewsTests
|
|
{
|
|
static readonly string[] Bunds = { "wurzelbund", "glutpakt", "glutpakt", "wurzelbund", "wurzelbund", "glutpakt" };
|
|
static readonly string[] Troops = { "g01", "g02", "g03", "g04", "g05", "g06", "g07", "g08", "g09", "g10" };
|
|
|
|
string _folder;
|
|
|
|
IEnumerator Shot(HudSession s, string label)
|
|
{
|
|
yield return s.Shot(_folder + label + ".png");
|
|
}
|
|
|
|
static void Send(HudSession s, Command command)
|
|
{
|
|
CommandResult result = s.Match.Submit(HudSession.Human, command);
|
|
Assert.IsTrue(result.Ok, command.Type + ": " + result.Message);
|
|
s.Game.RebuildPreview();
|
|
s.Sync();
|
|
}
|
|
|
|
static Vec2 Centre(System.Collections.Generic.IEnumerable<LuneUnit> units)
|
|
{
|
|
var list = units.ToList();
|
|
Assert.IsNotEmpty(list, "own figures on the field");
|
|
double x = list.Average(u => u.Position.X), y = list.Average(u => u.Position.Y);
|
|
return new Vec2(x, y);
|
|
}
|
|
|
|
[UnityTest, Timeout(900000)]
|
|
public IEnumerator Glutpakt()
|
|
{
|
|
string evidence = Environment.GetEnvironmentVariable("LUNE_EVIDENCE");
|
|
_folder = "docs/port/screenshots/" + (string.IsNullOrEmpty(evidence) ? "u5.5-heer" : evidence) + "/";
|
|
var s = new HudSession();
|
|
yield return s.Open(1920, 1080, seed: 4, bunds: Bunds);
|
|
s.Match.RoundNumber = 3;
|
|
s.Me.Draft.Gold = 100000;
|
|
foreach (string troop in Troops)
|
|
{
|
|
string baseId = ContentData.Units.Keys.FirstOrDefault(id => DataCatalog.UpgradeOf(id) == troop);
|
|
Send(s, Command.Buy(baseId ?? troop, s.Me.Lane));
|
|
if (baseId != null)
|
|
Send(s, Command.Upgrade(s.Me.Draft.Roster.Last().Uid));
|
|
}
|
|
Send(s, Command.HeroBuy("held_funkenlanze"));
|
|
s.Me.Draft.Gold = 400;
|
|
s.Sync();
|
|
yield return new WaitForSecondsRealtime(.5f);
|
|
Assert.AreEqual(Troops.Length, s.Me.Draft.Roster.Count(e => Troops.Contains(e.TypeId)), "all ten Glutpakt troops");
|
|
Vec2 formation = Centre(s.View.Preview.Units.Where(u => u.Team == s.Me.Team && (Troops.Contains(u.Def.Id) || u.Kind == "hero")));
|
|
s.Rig.LookAt(formation, 14f, true);
|
|
yield return new WaitForSecondsRealtime(.5f);
|
|
yield return Shot(s, "01-aufstellung-nah");
|
|
s.Rig.LookAt(formation, 22f, true);
|
|
yield return new WaitForSecondsRealtime(.5f);
|
|
yield return Shot(s, "02-aufstellung-lane");
|
|
s.Game.Key(KeyCode.Space);
|
|
yield return HudSession.Frames(1);
|
|
Assert.AreEqual(LuneMatchRunner.Stage.Combat, s.Runner.Current, "combat of round 3");
|
|
yield return s.Fight(9.0);
|
|
s.Driver.Paused = true;
|
|
// The front of the own army (as in FigureViewsTests): the troop furthest along the lane.
|
|
Vec2 front = s.Match.Combat.Units.Where(u => u.Alive && u.Team == s.Me.Team && Troops.Contains(u.Def.Id))
|
|
.OrderByDescending(u => u.Progress).First().Position;
|
|
s.Rig.LookAt(front, 14f, true);
|
|
yield return new WaitForSecondsRealtime(.5f);
|
|
yield return Shot(s, "03-kampf-nah");
|
|
s.Rig.LookAt(front, 22f, true);
|
|
yield return new WaitForSecondsRealtime(.5f);
|
|
yield return Shot(s, "04-kampf-lane");
|
|
s.Rig.LookAt(front, 40f, true);
|
|
yield return new WaitForSecondsRealtime(.5f);
|
|
yield return Shot(s, "05-kampf-weit");
|
|
s.Close();
|
|
}
|
|
}
|
|
}
|