perf(ui): scope cooldown heartbeat to visible items
This commit is contained in:
parent
f2a015be8e
commit
6b56f4bef2
5 changed files with 132 additions and 3 deletions
|
|
@ -59,4 +59,82 @@ public sealed class ItemCooldownUiControllerTests
|
|||
Assert.Equal(0u, list.Cell.ActiveCooldownSprite());
|
||||
Assert.Equal(0, spellbook.ActiveCount);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Hidden_ancestor_removes_list_from_retail_heartbeat_scope()
|
||||
{
|
||||
var objects = new ClientObjectTable();
|
||||
objects.AddOrUpdate(new ClientObject
|
||||
{
|
||||
ObjectId = 0x5001u,
|
||||
CooldownId = 42u,
|
||||
CooldownDuration = 30d,
|
||||
});
|
||||
var spellbook = new Spellbook();
|
||||
spellbook.OnEnchantmentAdded(new ActiveEnchantmentRecord(
|
||||
SpellId: 0x802Au,
|
||||
LayerId: 1u,
|
||||
Duration: 30d,
|
||||
CasterGuid: 0u,
|
||||
Bucket: Spellbook.CooldownBucket,
|
||||
StartTime: 100d));
|
||||
var root = new UiPanel();
|
||||
var window = new UiPanel();
|
||||
var list = new UiItemList();
|
||||
list.Cell.SetItem(0x5001u, 99u);
|
||||
root.AddChild(window);
|
||||
window.AddChild(list);
|
||||
uint[] sprites = Enumerable.Range(1, 10)
|
||||
.Select(index => 0x06000000u + (uint)index)
|
||||
.ToArray();
|
||||
ItemCooldownUiController controller = ItemCooldownUiController.Bind(
|
||||
root,
|
||||
spellbook,
|
||||
objects,
|
||||
() => 112.5d,
|
||||
new ItemCooldownAssets(sprites));
|
||||
Assert.Equal(sprites[5], list.Cell.ActiveCooldownSprite());
|
||||
|
||||
window.Visible = false;
|
||||
controller.Tick();
|
||||
Assert.Equal(0u, list.Cell.ActiveCooldownSprite());
|
||||
|
||||
window.Visible = true;
|
||||
controller.Tick();
|
||||
Assert.Equal(sprites[5], list.Cell.ActiveCooldownSprite());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Empty_cooldown_registry_skips_clock_and_item_walk()
|
||||
{
|
||||
var objects = new ClientObjectTable();
|
||||
objects.AddOrUpdate(new ClientObject
|
||||
{
|
||||
ObjectId = 0x5001u,
|
||||
CooldownId = 42u,
|
||||
CooldownDuration = 30d,
|
||||
});
|
||||
var spellbook = new Spellbook();
|
||||
var root = new UiPanel();
|
||||
var list = new UiItemList();
|
||||
list.Cell.SetItem(0x5001u, 99u);
|
||||
root.AddChild(list);
|
||||
int clockReads = 0;
|
||||
ItemCooldownUiController controller = ItemCooldownUiController.Bind(
|
||||
root,
|
||||
spellbook,
|
||||
objects,
|
||||
() =>
|
||||
{
|
||||
clockReads++;
|
||||
return 100d;
|
||||
},
|
||||
new ItemCooldownAssets(
|
||||
Enumerable.Range(1, 10).Select(index => (uint)index).ToArray()));
|
||||
|
||||
controller.Tick();
|
||||
|
||||
Assert.Equal(0, clockReads);
|
||||
Assert.Equal(0u, list.Cell.ActiveCooldownSprite());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue