mirror of
https://github.com/osukey/osukey.git
synced 2025-05-04 21:27:22 +09:00
Merge branch 'master' into all-ruleset-encoders
This commit is contained in:
commit
dd9ceed802
@ -71,8 +71,7 @@ namespace osu.Game.Rulesets.Catch.Difficulty
|
|||||||
|
|
||||||
protected override Skill[] CreateSkills(IBeatmap beatmap)
|
protected override Skill[] CreateSkills(IBeatmap beatmap)
|
||||||
{
|
{
|
||||||
using (var catcher = new Catcher(beatmap.BeatmapInfo.BaseDifficulty))
|
halfCatcherWidth = Catcher.CalculateCatchWidth(beatmap.BeatmapInfo.BaseDifficulty) * 0.5f;
|
||||||
halfCatcherWidth = catcher.CatchWidth * 0.5f;
|
|
||||||
|
|
||||||
return new Skill[]
|
return new Skill[]
|
||||||
{
|
{
|
||||||
|
@ -44,11 +44,6 @@ namespace osu.Game.Rulesets.Catch.UI
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private const float allowed_catch_range = 0.8f;
|
private const float allowed_catch_range = 0.8f;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Width of the area that can be used to attempt catches during gameplay.
|
|
||||||
/// </summary>
|
|
||||||
internal float CatchWidth => CatcherArea.CATCHER_SIZE * Math.Abs(Scale.X) * allowed_catch_range;
|
|
||||||
|
|
||||||
protected bool Dashing
|
protected bool Dashing
|
||||||
{
|
{
|
||||||
get => dashing;
|
get => dashing;
|
||||||
@ -79,6 +74,11 @@ namespace osu.Game.Rulesets.Catch.UI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Width of the area that can be used to attempt catches during gameplay.
|
||||||
|
/// </summary>
|
||||||
|
private readonly float catchWidth;
|
||||||
|
|
||||||
private Container<DrawableHitObject> caughtFruit;
|
private Container<DrawableHitObject> caughtFruit;
|
||||||
|
|
||||||
private CatcherSprite catcherIdle;
|
private CatcherSprite catcherIdle;
|
||||||
@ -106,7 +106,9 @@ namespace osu.Game.Rulesets.Catch.UI
|
|||||||
|
|
||||||
Size = new Vector2(CatcherArea.CATCHER_SIZE);
|
Size = new Vector2(CatcherArea.CATCHER_SIZE);
|
||||||
if (difficulty != null)
|
if (difficulty != null)
|
||||||
Scale = new Vector2(1.0f - 0.7f * (difficulty.CircleSize - 5) / 5);
|
Scale = calculateScale(difficulty);
|
||||||
|
|
||||||
|
catchWidth = CalculateCatchWidth(Scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
@ -139,6 +141,26 @@ namespace osu.Game.Rulesets.Catch.UI
|
|||||||
updateCatcher();
|
updateCatcher();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Calculates the scale of the catcher based off the provided beatmap difficulty.
|
||||||
|
/// </summary>
|
||||||
|
private static Vector2 calculateScale(BeatmapDifficulty difficulty)
|
||||||
|
=> new Vector2(1.0f - 0.7f * (difficulty.CircleSize - 5) / 5);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Calculates the width of the area used for attempting catches in gameplay.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="scale">The scale of the catcher.</param>
|
||||||
|
internal static float CalculateCatchWidth(Vector2 scale)
|
||||||
|
=> CatcherArea.CATCHER_SIZE * Math.Abs(scale.X) * allowed_catch_range;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Calculates the width of the area used for attempting catches in gameplay.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="difficulty">The beatmap difficulty.</param>
|
||||||
|
internal static float CalculateCatchWidth(BeatmapDifficulty difficulty)
|
||||||
|
=> CalculateCatchWidth(calculateScale(difficulty));
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Add a caught fruit to the catcher's stack.
|
/// Add a caught fruit to the catcher's stack.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -177,7 +199,7 @@ namespace osu.Game.Rulesets.Catch.UI
|
|||||||
/// <returns>Whether the catch is possible.</returns>
|
/// <returns>Whether the catch is possible.</returns>
|
||||||
public bool AttemptCatch(CatchHitObject fruit)
|
public bool AttemptCatch(CatchHitObject fruit)
|
||||||
{
|
{
|
||||||
var halfCatchWidth = CatchWidth * 0.5f;
|
var halfCatchWidth = catchWidth * 0.5f;
|
||||||
|
|
||||||
// this stuff wil disappear once we move fruit to non-relative coordinate space in the future.
|
// this stuff wil disappear once we move fruit to non-relative coordinate space in the future.
|
||||||
var catchObjectPosition = fruit.X * CatchPlayfield.BASE_WIDTH;
|
var catchObjectPosition = fruit.X * CatchPlayfield.BASE_WIDTH;
|
||||||
|
@ -10,24 +10,22 @@ using osu.Game.Rulesets.Osu;
|
|||||||
using osu.Game.Rulesets.Osu.Objects;
|
using osu.Game.Rulesets.Osu.Objects;
|
||||||
using osu.Game.Screens.Edit;
|
using osu.Game.Screens.Edit;
|
||||||
using osu.Game.Screens.Edit.Compose.Components.Timeline;
|
using osu.Game.Screens.Edit.Compose.Components.Timeline;
|
||||||
using osuTK.Input;
|
|
||||||
|
|
||||||
namespace osu.Game.Tests.Visual.Editor
|
namespace osu.Game.Tests.Visual.Editor
|
||||||
{
|
{
|
||||||
public class TestSceneEditorChangeStates : ScreenTestScene
|
public class TestSceneEditorChangeStates : ScreenTestScene
|
||||||
{
|
{
|
||||||
private EditorBeatmap editorBeatmap;
|
private EditorBeatmap editorBeatmap;
|
||||||
|
private TestEditor editor;
|
||||||
|
|
||||||
public override void SetUpSteps()
|
public override void SetUpSteps()
|
||||||
{
|
{
|
||||||
base.SetUpSteps();
|
base.SetUpSteps();
|
||||||
|
|
||||||
Screens.Edit.Editor editor = null;
|
|
||||||
|
|
||||||
AddStep("load editor", () =>
|
AddStep("load editor", () =>
|
||||||
{
|
{
|
||||||
Beatmap.Value = CreateWorkingBeatmap(new OsuRuleset().RulesetInfo);
|
Beatmap.Value = CreateWorkingBeatmap(new OsuRuleset().RulesetInfo);
|
||||||
LoadScreen(editor = new Screens.Edit.Editor());
|
LoadScreen(editor = new TestEditor());
|
||||||
});
|
});
|
||||||
|
|
||||||
AddUntilStep("wait for editor to load", () => editor.ChildrenOfType<HitObjectComposer>().FirstOrDefault()?.IsLoaded == true
|
AddUntilStep("wait for editor to load", () => editor.ChildrenOfType<HitObjectComposer>().FirstOrDefault()?.IsLoaded == true
|
||||||
@ -160,36 +158,15 @@ namespace osu.Game.Tests.Visual.Editor
|
|||||||
AddAssert("no hitobject added", () => addedObject == null);
|
AddAssert("no hitobject added", () => addedObject == null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addUndoSteps()
|
private void addUndoSteps() => AddStep("undo", () => editor.Undo());
|
||||||
|
|
||||||
|
private void addRedoSteps() => AddStep("redo", () => editor.Redo());
|
||||||
|
|
||||||
|
private class TestEditor : Screens.Edit.Editor
|
||||||
{
|
{
|
||||||
AddStep("press undo", () =>
|
public new void Undo() => base.Undo();
|
||||||
{
|
|
||||||
InputManager.PressKey(Key.LControl);
|
|
||||||
InputManager.PressKey(Key.Z);
|
|
||||||
});
|
|
||||||
|
|
||||||
AddStep("release keys", () =>
|
public new void Redo() => base.Redo();
|
||||||
{
|
|
||||||
InputManager.ReleaseKey(Key.LControl);
|
|
||||||
InputManager.ReleaseKey(Key.Z);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addRedoSteps()
|
|
||||||
{
|
|
||||||
AddStep("press redo", () =>
|
|
||||||
{
|
|
||||||
InputManager.PressKey(Key.LControl);
|
|
||||||
InputManager.PressKey(Key.LShift);
|
|
||||||
InputManager.PressKey(Key.Z);
|
|
||||||
});
|
|
||||||
|
|
||||||
AddStep("release keys", () =>
|
|
||||||
{
|
|
||||||
InputManager.ReleaseKey(Key.LControl);
|
|
||||||
InputManager.ReleaseKey(Key.LShift);
|
|
||||||
InputManager.ReleaseKey(Key.Z);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
|
||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
@ -180,11 +179,6 @@ namespace osu.Game.Rulesets.Objects.Drawables
|
|||||||
|
|
||||||
private void apply(HitObject hitObject)
|
private void apply(HitObject hitObject)
|
||||||
{
|
{
|
||||||
#pragma warning disable 618 // can be removed 20200417
|
|
||||||
if (GetType().GetMethod(nameof(AddNested), BindingFlags.NonPublic | BindingFlags.Instance)?.DeclaringType != typeof(DrawableHitObject))
|
|
||||||
return;
|
|
||||||
#pragma warning restore 618
|
|
||||||
|
|
||||||
if (nestedHitObjects.IsValueCreated)
|
if (nestedHitObjects.IsValueCreated)
|
||||||
{
|
{
|
||||||
nestedHitObjects.Value.Clear();
|
nestedHitObjects.Value.Clear();
|
||||||
@ -195,7 +189,11 @@ namespace osu.Game.Rulesets.Objects.Drawables
|
|||||||
{
|
{
|
||||||
var drawableNested = CreateNestedHitObject(h) ?? throw new InvalidOperationException($"{nameof(CreateNestedHitObject)} returned null for {h.GetType().ReadableName()}.");
|
var drawableNested = CreateNestedHitObject(h) ?? throw new InvalidOperationException($"{nameof(CreateNestedHitObject)} returned null for {h.GetType().ReadableName()}.");
|
||||||
|
|
||||||
addNested(drawableNested);
|
drawableNested.OnNewResult += (d, r) => OnNewResult?.Invoke(d, r);
|
||||||
|
drawableNested.OnRevertResult += (d, r) => OnRevertResult?.Invoke(d, r);
|
||||||
|
drawableNested.ApplyCustomUpdateState += (d, j) => ApplyCustomUpdateState?.Invoke(d, j);
|
||||||
|
|
||||||
|
nestedHitObjects.Value.Add(drawableNested);
|
||||||
AddNestedHitObject(drawableNested);
|
AddNestedHitObject(drawableNested);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -208,13 +206,6 @@ namespace osu.Game.Rulesets.Objects.Drawables
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Adds a nested <see cref="DrawableHitObject"/>. This should not be used except for legacy nested <see cref="DrawableHitObject"/> usages.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="h"></param>
|
|
||||||
[Obsolete("Use AddNestedHitObject() / ClearNestedHitObjects() / CreateNestedHitObject() instead.")] // can be removed 20200417
|
|
||||||
protected virtual void AddNested(DrawableHitObject h) => addNested(h);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Invoked by the base <see cref="DrawableHitObject"/> to remove all previously-added nested <see cref="DrawableHitObject"/>s.
|
/// Invoked by the base <see cref="DrawableHitObject"/> to remove all previously-added nested <see cref="DrawableHitObject"/>s.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -229,17 +220,6 @@ namespace osu.Game.Rulesets.Objects.Drawables
|
|||||||
/// <returns>The drawable representation for <paramref name="hitObject"/>.</returns>
|
/// <returns>The drawable representation for <paramref name="hitObject"/>.</returns>
|
||||||
protected virtual DrawableHitObject CreateNestedHitObject(HitObject hitObject) => null;
|
protected virtual DrawableHitObject CreateNestedHitObject(HitObject hitObject) => null;
|
||||||
|
|
||||||
private void addNested(DrawableHitObject hitObject)
|
|
||||||
{
|
|
||||||
// Todo: Exists for legacy purposes, can be removed 20200417
|
|
||||||
|
|
||||||
hitObject.OnNewResult += (d, r) => OnNewResult?.Invoke(d, r);
|
|
||||||
hitObject.OnRevertResult += (d, r) => OnRevertResult?.Invoke(d, r);
|
|
||||||
hitObject.ApplyCustomUpdateState += (d, j) => ApplyCustomUpdateState?.Invoke(d, j);
|
|
||||||
|
|
||||||
nestedHitObjects.Value.Add(hitObject);
|
|
||||||
}
|
|
||||||
|
|
||||||
#region State / Transform Management
|
#region State / Transform Management
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -22,6 +22,7 @@ using osu.Game.Screens.Edit.Design;
|
|||||||
using osuTK.Input;
|
using osuTK.Input;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using osu.Framework;
|
using osu.Framework;
|
||||||
|
using osu.Framework.Input;
|
||||||
using osu.Framework.Input.Bindings;
|
using osu.Framework.Input.Bindings;
|
||||||
using osu.Framework.Logging;
|
using osu.Framework.Logging;
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
@ -37,7 +38,7 @@ using osu.Game.Users;
|
|||||||
namespace osu.Game.Screens.Edit
|
namespace osu.Game.Screens.Edit
|
||||||
{
|
{
|
||||||
[Cached(typeof(IBeatSnapProvider))]
|
[Cached(typeof(IBeatSnapProvider))]
|
||||||
public class Editor : ScreenWithBeatmapBackground, IKeyBindingHandler<GlobalAction>, IBeatSnapProvider
|
public class Editor : ScreenWithBeatmapBackground, IKeyBindingHandler<GlobalAction>, IKeyBindingHandler<PlatformAction>, IBeatSnapProvider
|
||||||
{
|
{
|
||||||
public override float BackgroundParallaxAmount => 0.1f;
|
public override float BackgroundParallaxAmount => 0.1f;
|
||||||
|
|
||||||
@ -157,8 +158,8 @@ namespace osu.Game.Screens.Edit
|
|||||||
{
|
{
|
||||||
Items = new[]
|
Items = new[]
|
||||||
{
|
{
|
||||||
undoMenuItem = new EditorMenuItem("Undo", MenuItemType.Standard, undo),
|
undoMenuItem = new EditorMenuItem("Undo", MenuItemType.Standard, Undo),
|
||||||
redoMenuItem = new EditorMenuItem("Redo", MenuItemType.Standard, redo)
|
redoMenuItem = new EditorMenuItem("Redo", MenuItemType.Standard, Redo)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -230,6 +231,30 @@ namespace osu.Game.Screens.Edit
|
|||||||
clock.ProcessFrame();
|
clock.ProcessFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool OnPressed(PlatformAction action)
|
||||||
|
{
|
||||||
|
switch (action.ActionType)
|
||||||
|
{
|
||||||
|
case PlatformActionType.Undo:
|
||||||
|
Undo();
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case PlatformActionType.Redo:
|
||||||
|
Redo();
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case PlatformActionType.Save:
|
||||||
|
saveBeatmap();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnReleased(PlatformAction action)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
protected override bool OnKeyDown(KeyDownEvent e)
|
protected override bool OnKeyDown(KeyDownEvent e)
|
||||||
{
|
{
|
||||||
switch (e.Key)
|
switch (e.Key)
|
||||||
@ -241,28 +266,6 @@ namespace osu.Game.Screens.Edit
|
|||||||
case Key.Right:
|
case Key.Right:
|
||||||
seek(e, 1);
|
seek(e, 1);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case Key.S:
|
|
||||||
if (e.ControlPressed)
|
|
||||||
{
|
|
||||||
saveBeatmap();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case Key.Z:
|
|
||||||
if (e.ControlPressed)
|
|
||||||
{
|
|
||||||
if (e.ShiftPressed)
|
|
||||||
redo();
|
|
||||||
else
|
|
||||||
undo();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return base.OnKeyDown(e);
|
return base.OnKeyDown(e);
|
||||||
@ -326,9 +329,9 @@ namespace osu.Game.Screens.Edit
|
|||||||
return base.OnExiting(next);
|
return base.OnExiting(next);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void undo() => changeHandler.RestoreState(-1);
|
protected void Undo() => changeHandler.RestoreState(-1);
|
||||||
|
|
||||||
private void redo() => changeHandler.RestoreState(1);
|
protected void Redo() => changeHandler.RestoreState(1);
|
||||||
|
|
||||||
private void resetTrack(bool seekToStart = false)
|
private void resetTrack(bool seekToStart = false)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user