From 87c39909c6c3ab7f872b33a3bb20714144022ac9 Mon Sep 17 00:00:00 2001 From: ekrctb Date: Mon, 19 Jul 2021 14:37:19 +0900 Subject: [PATCH] Simplify `DependencyProvidingContainer` Using an array of tuple for dependencies instead of using children. --- .../TestSceneCatcher.cs | 7 +++--- .../Visual/DependencyProvidingContainer.cs | 24 ++++--------------- 2 files changed, 8 insertions(+), 23 deletions(-) diff --git a/osu.Game.Rulesets.Catch.Tests/TestSceneCatcher.cs b/osu.Game.Rulesets.Catch.Tests/TestSceneCatcher.cs index 0cf5e2b7a0..0a2dff6a21 100644 --- a/osu.Game.Rulesets.Catch.Tests/TestSceneCatcher.cs +++ b/osu.Game.Rulesets.Catch.Tests/TestSceneCatcher.cs @@ -47,15 +47,16 @@ namespace osu.Game.Rulesets.Catch.Tests { Anchor = Anchor.Centre, }; + droppedObjectContainer = new DroppedObjectContainer(); Child = new DependencyProvidingContainer { - Types = new[] + CachedDependencies = new (Type, object)[] { - typeof(DroppedObjectContainer), + (typeof(DroppedObjectContainer), droppedObjectContainer), }, Children = new Drawable[] { - droppedObjectContainer = new DroppedObjectContainer(), + droppedObjectContainer, catcher = new TestCatcher(trailContainer, difficulty), trailContainer }, diff --git a/osu.Game/Tests/Visual/DependencyProvidingContainer.cs b/osu.Game/Tests/Visual/DependencyProvidingContainer.cs index cd3ae1123b..c799cad61a 100644 --- a/osu.Game/Tests/Visual/DependencyProvidingContainer.cs +++ b/osu.Game/Tests/Visual/DependencyProvidingContainer.cs @@ -2,7 +2,6 @@ // See the LICENCE file in the repository root for full licence text. using System; -using System.Linq; using osu.Framework.Allocation; using osu.Framework.Graphics.Containers; @@ -10,39 +9,24 @@ namespace osu.Game.Tests.Visual { /// /// A which providing ad-hoc dependencies to the child drawables. - /// - /// To provide a dependency, specify the dependency type to , then specify the dependency value to either or . - /// For each type specified in , the first value compatible with the type is selected and provided to the children. - /// /// /// - /// The and values of the dependencies must be set while this is not loaded. + /// The must be set while this is not loaded. /// public class DependencyProvidingContainer : Container { /// - /// The types of the dependencies provided to the children. + /// The dependencies provided to the children. /// // TODO: should be an init-only property when C# 9 - public Type[] Types { get; set; } = Array.Empty(); - - /// - /// The dependency values provided to the children. - /// - public object[] Values { get; set; } = Array.Empty(); + public (Type, object)[] CachedDependencies { get; set; } = Array.Empty<(Type, object)>(); protected override IReadOnlyDependencyContainer CreateChildDependencies(IReadOnlyDependencyContainer parent) { var dependencyContainer = new DependencyContainer(base.CreateChildDependencies(parent)); - foreach (var type in Types) - { - object value = Values.FirstOrDefault(v => type.IsInstanceOfType(v)) ?? - Children.FirstOrDefault(d => type.IsInstanceOfType(d)) ?? - throw new InvalidOperationException($"The type {type} is specified in this {nameof(DependencyProvidingContainer)}, but no corresponding value is provided."); - + foreach (var (type, value) in CachedDependencies) dependencyContainer.CacheAs(type, value); - } return dependencyContainer; }