public void Update() { foreach (var hitObject in usageFinishedHitObjects) { HitObjectUsageFinished?.Invoke(hitObject); } usageFinishedHitObjects.Clear(); }
/// <summary> /// Registers a <see cref="Playfield"/> as a nested <see cref="Playfield"/>. /// This does not add the <see cref="Playfield"/> to the draw hierarchy. /// </summary> /// <param name="otherPlayfield">The <see cref="Playfield"/> to add.</param> protected void AddNested(Playfield otherPlayfield) { otherPlayfield.DisplayJudgements.BindTo(DisplayJudgements); otherPlayfield.NewResult += (d, r) => NewResult?.Invoke(d, r); otherPlayfield.RevertResult += (d, r) => RevertResult?.Invoke(d, r); otherPlayfield.HitObjectUsageBegan += h => HitObjectUsageBegan?.Invoke(h); otherPlayfield.HitObjectUsageFinished += h => HitObjectUsageFinished?.Invoke(h); nestedPlayfields.Value.Add(otherPlayfield); }
protected override void RemoveDrawable(HitObjectLifetimeEntry entry, DrawableHitObject drawable) { drawable.OnKilled(); if (nonPooledDrawableMap.ContainsKey(entry)) { return; } removeDrawable(drawable); HitObjectUsageFinished?.Invoke(entry.HitObject); }
/// <summary> /// Creates a new <see cref="Playfield"/>. /// </summary> protected Playfield() { RelativeSizeAxes = Axes.Both; hitObjectContainerLazy = new Lazy <HitObjectContainer>(() => CreateHitObjectContainer().With(h => { h.NewResult += (d, r) => NewResult?.Invoke(d, r); h.RevertResult += (d, r) => RevertResult?.Invoke(d, r); h.HitObjectUsageBegan += o => HitObjectUsageBegan?.Invoke(o); h.HitObjectUsageFinished += o => HitObjectUsageFinished?.Invoke(o); })); }
private void removeDrawable(HitObjectLifetimeEntry entry) { Debug.Assert(drawableMap.ContainsKey(entry)); var drawable = drawableMap[entry]; drawable.OnNewResult -= onNewResult; drawable.OnRevertResult -= onRevertResult; drawable.OnKilled(); drawableMap.Remove(entry); unbindStartTime(drawable); RemoveInternal(drawable); HitObjectUsageFinished?.Invoke(entry.HitObject); }
private void removeDrawable(HitObjectLifetimeEntry entry) { Debug.Assert(drawableMap.ContainsKey(entry)); var drawable = drawableMap[entry]; // OnKilled can potentially change the hitobject's result, so it needs to run first before unbinding. drawable.OnKilled(); drawable.OnNewResult -= onNewResult; drawable.OnRevertResult -= onRevertResult; drawableMap.Remove(entry); OnRemove(drawable); unbindStartTime(drawable); RemoveInternal(drawable); HitObjectUsageFinished?.Invoke(entry.HitObject); }