mirror of
https://github.com/ppy/osu.git
synced 2024-11-11 11:28:00 +08:00
Add juicy streams
This commit is contained in:
parent
26215b4488
commit
03fbf47bc2
@ -5,9 +5,9 @@ using osu.Game.Beatmaps;
|
|||||||
using osu.Game.Rulesets.Catch.Objects;
|
using osu.Game.Rulesets.Catch.Objects;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System;
|
using System;
|
||||||
|
using osu.Game.Rulesets.Catch.UI;
|
||||||
using osu.Game.Rulesets.Objects.Types;
|
using osu.Game.Rulesets.Objects.Types;
|
||||||
using osu.Game.Rulesets.Objects;
|
using osu.Game.Rulesets.Objects;
|
||||||
using osu.Game.Rulesets.Osu.UI;
|
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Catch.Beatmaps
|
namespace osu.Game.Rulesets.Catch.Beatmaps
|
||||||
{
|
{
|
||||||
@ -17,14 +17,36 @@ namespace osu.Game.Rulesets.Catch.Beatmaps
|
|||||||
|
|
||||||
protected override IEnumerable<CatchBaseHit> ConvertHitObject(HitObject obj, Beatmap beatmap)
|
protected override IEnumerable<CatchBaseHit> ConvertHitObject(HitObject obj, Beatmap beatmap)
|
||||||
{
|
{
|
||||||
if (!(obj is IHasXPosition))
|
var curveData = obj as IHasCurve;
|
||||||
|
var positionData = obj as IHasPosition;
|
||||||
|
var comboData = obj as IHasCombo;
|
||||||
|
|
||||||
|
if (positionData == null)
|
||||||
yield break;
|
yield break;
|
||||||
|
|
||||||
|
if (curveData != null)
|
||||||
|
{
|
||||||
|
yield return new JuiceStream
|
||||||
|
{
|
||||||
|
StartTime = obj.StartTime,
|
||||||
|
Samples = obj.Samples,
|
||||||
|
ControlPoints = curveData.ControlPoints,
|
||||||
|
CurveType = curveData.CurveType,
|
||||||
|
Distance = curveData.Distance,
|
||||||
|
RepeatSamples = curveData.RepeatSamples,
|
||||||
|
RepeatCount = curveData.RepeatCount,
|
||||||
|
X = positionData.X / CatchPlayfield.BASE_WIDTH,
|
||||||
|
NewCombo = comboData?.NewCombo ?? false
|
||||||
|
};
|
||||||
|
|
||||||
|
yield break;
|
||||||
|
}
|
||||||
|
|
||||||
yield return new Fruit
|
yield return new Fruit
|
||||||
{
|
{
|
||||||
StartTime = obj.StartTime,
|
StartTime = obj.StartTime,
|
||||||
NewCombo = (obj as IHasCombo)?.NewCombo ?? false,
|
NewCombo = comboData?.NewCombo ?? false,
|
||||||
X = ((IHasXPosition)obj).X / OsuPlayfield.BASE_SIZE.X
|
X = positionData.X / CatchPlayfield.BASE_WIDTH
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,12 +3,23 @@
|
|||||||
|
|
||||||
using System;
|
using System;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.MathUtils;
|
|
||||||
using osu.Game.Rulesets.Judgements;
|
using osu.Game.Rulesets.Judgements;
|
||||||
using osu.Game.Rulesets.Objects.Drawables;
|
using osu.Game.Rulesets.Objects.Drawables;
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Catch.Objects.Drawable
|
namespace osu.Game.Rulesets.Catch.Objects.Drawable
|
||||||
{
|
{
|
||||||
|
public abstract class DrawableCatchHitObject<TObject> : DrawableCatchHitObject
|
||||||
|
where TObject : CatchBaseHit
|
||||||
|
{
|
||||||
|
public new TObject HitObject;
|
||||||
|
|
||||||
|
protected DrawableCatchHitObject(TObject hitObject)
|
||||||
|
: base(hitObject)
|
||||||
|
{
|
||||||
|
HitObject = hitObject;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public abstract class DrawableCatchHitObject : DrawableScrollingHitObject<CatchBaseHit>
|
public abstract class DrawableCatchHitObject : DrawableScrollingHitObject<CatchBaseHit>
|
||||||
{
|
{
|
||||||
protected DrawableCatchHitObject(CatchBaseHit hitObject)
|
protected DrawableCatchHitObject(CatchBaseHit hitObject)
|
||||||
@ -17,7 +28,7 @@ namespace osu.Game.Rulesets.Catch.Objects.Drawable
|
|||||||
Origin = Anchor.Centre;
|
Origin = Anchor.Centre;
|
||||||
RelativePositionAxes = Axes.Both;
|
RelativePositionAxes = Axes.Both;
|
||||||
X = hitObject.X;
|
X = hitObject.X;
|
||||||
Rotation = (float)(RNG.NextDouble() - 0.5f) * 40;
|
Y = (float)HitObject.StartTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Func<CatchBaseHit, bool> CheckPosition;
|
public Func<CatchBaseHit, bool> CheckPosition;
|
||||||
|
32
osu.Game.Rulesets.Catch/Objects/Drawable/DrawableDroplet.cs
Normal file
32
osu.Game.Rulesets.Catch/Objects/Drawable/DrawableDroplet.cs
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
using osu.Framework.Allocation;
|
||||||
|
using osu.Game.Rulesets.Catch.Objects.Drawable.Pieces;
|
||||||
|
using OpenTK;
|
||||||
|
using OpenTK.Graphics;
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Catch.Objects.Drawable
|
||||||
|
{
|
||||||
|
public class DrawableDroplet : DrawableCatchHitObject<Droplet>
|
||||||
|
{
|
||||||
|
public DrawableDroplet(Droplet h)
|
||||||
|
: base(h)
|
||||||
|
{
|
||||||
|
Size = new Vector2(Pulp.PULP_SIZE);
|
||||||
|
|
||||||
|
AccentColour = Color4.Green;
|
||||||
|
Masking = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
[BackgroundDependencyLoader]
|
||||||
|
private void load()
|
||||||
|
{
|
||||||
|
Child = new Pulp
|
||||||
|
{
|
||||||
|
AccentColour = AccentColour,
|
||||||
|
Scale = new Vector2(0.6f),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -2,26 +2,26 @@
|
|||||||
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Extensions.Color4Extensions;
|
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Graphics.Shapes;
|
using osu.Framework.MathUtils;
|
||||||
using osu.Game.Graphics;
|
using osu.Game.Rulesets.Catch.Objects.Drawable.Pieces;
|
||||||
using OpenTK;
|
using OpenTK;
|
||||||
using OpenTK.Graphics;
|
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Catch.Objects.Drawable
|
namespace osu.Game.Rulesets.Catch.Objects.Drawable
|
||||||
{
|
{
|
||||||
public class DrawableFruit : DrawableCatchHitObject
|
public class DrawableFruit : DrawableCatchHitObject<Fruit>
|
||||||
{
|
{
|
||||||
private const float pulp_size = 20;
|
private const float pulp_size = 20;
|
||||||
|
|
||||||
public DrawableFruit(CatchBaseHit h)
|
public DrawableFruit(Fruit h)
|
||||||
: base(h)
|
: base(h)
|
||||||
{
|
{
|
||||||
Size = new Vector2(pulp_size * 2.2f, pulp_size * 2.8f);
|
Size = new Vector2(pulp_size * 2.2f, pulp_size * 2.8f);
|
||||||
AccentColour = HitObject.ComboColour;
|
AccentColour = HitObject.ComboColour;
|
||||||
Masking = false;
|
Masking = false;
|
||||||
|
|
||||||
|
Rotation = (float)(RNG.NextDouble() - 0.5f) * 40;
|
||||||
}
|
}
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
@ -71,33 +71,5 @@ namespace osu.Game.Rulesets.Catch.Objects.Drawable
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private class Pulp : Circle, IHasAccentColour
|
|
||||||
{
|
|
||||||
public Pulp()
|
|
||||||
{
|
|
||||||
Size = new Vector2(pulp_size);
|
|
||||||
|
|
||||||
Blending = BlendingMode.Additive;
|
|
||||||
Colour = Color4.White.Opacity(0.9f);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Color4 accentColour;
|
|
||||||
public Color4 AccentColour
|
|
||||||
{
|
|
||||||
get { return accentColour; }
|
|
||||||
set
|
|
||||||
{
|
|
||||||
accentColour = value;
|
|
||||||
|
|
||||||
EdgeEffect = new EdgeEffectParameters
|
|
||||||
{
|
|
||||||
Type = EdgeEffectType.Glow,
|
|
||||||
Radius = 5,
|
|
||||||
Colour = accentColour.Lighten(100),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,59 @@
|
|||||||
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Containers;
|
||||||
|
using OpenTK;
|
||||||
|
using OpenTK.Graphics;
|
||||||
|
using osu.Game.Rulesets.Objects.Drawables;
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Catch.Objects.Drawable
|
||||||
|
{
|
||||||
|
public class DrawableJuiceStream : DrawableCatchHitObject<JuiceStream>
|
||||||
|
{
|
||||||
|
private readonly Container dropletContainer;
|
||||||
|
|
||||||
|
public DrawableJuiceStream(JuiceStream s) : base(s)
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.Both;
|
||||||
|
Height = (float)HitObject.Duration;
|
||||||
|
|
||||||
|
Child = dropletContainer = new Container
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.Both,
|
||||||
|
RelativeChildOffset = new Vector2(0, (float)HitObject.StartTime),
|
||||||
|
RelativeChildSize = new Vector2(1, (float)HitObject.Duration)
|
||||||
|
};
|
||||||
|
|
||||||
|
var start = new DrawableFruit(new Fruit
|
||||||
|
{
|
||||||
|
ComboColour = Color4.Blue,
|
||||||
|
StartTime = s.StartTime,
|
||||||
|
X = s.X,
|
||||||
|
});
|
||||||
|
|
||||||
|
AddNested(start);
|
||||||
|
|
||||||
|
var end = new DrawableFruit(new Fruit
|
||||||
|
{
|
||||||
|
ComboColour = Color4.Red,
|
||||||
|
StartTime = s.EndTime,
|
||||||
|
X = s.EndX,
|
||||||
|
});
|
||||||
|
|
||||||
|
AddNested(end);
|
||||||
|
|
||||||
|
foreach (var tick in s.Ticks)
|
||||||
|
{
|
||||||
|
var droplet = new DrawableDroplet(tick);
|
||||||
|
AddNested(droplet);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void AddNested(DrawableHitObject<CatchBaseHit> h)
|
||||||
|
{
|
||||||
|
dropletContainer.Add(h);
|
||||||
|
base.AddNested(h);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
40
osu.Game.Rulesets.Catch/Objects/Drawable/Pieces/Pulp.cs
Normal file
40
osu.Game.Rulesets.Catch/Objects/Drawable/Pieces/Pulp.cs
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
using osu.Framework.Extensions.Color4Extensions;
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Containers;
|
||||||
|
using osu.Framework.Graphics.Shapes;
|
||||||
|
using osu.Game.Graphics;
|
||||||
|
using OpenTK;
|
||||||
|
using OpenTK.Graphics;
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Catch.Objects.Drawable.Pieces
|
||||||
|
{
|
||||||
|
public class Pulp : Circle, IHasAccentColour
|
||||||
|
{
|
||||||
|
public const float PULP_SIZE = 20;
|
||||||
|
|
||||||
|
public Pulp()
|
||||||
|
{
|
||||||
|
Size = new Vector2(PULP_SIZE);
|
||||||
|
|
||||||
|
Blending = BlendingMode.Additive;
|
||||||
|
Colour = Color4.White.Opacity(0.9f);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Color4 accentColour;
|
||||||
|
public Color4 AccentColour
|
||||||
|
{
|
||||||
|
get { return accentColour; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
accentColour = value;
|
||||||
|
|
||||||
|
EdgeEffect = new EdgeEffectParameters
|
||||||
|
{
|
||||||
|
Type = EdgeEffectType.Glow,
|
||||||
|
Radius = 5,
|
||||||
|
Colour = accentColour.Lighten(100),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
126
osu.Game.Rulesets.Catch/Objects/JuiceStream.cs
Normal file
126
osu.Game.Rulesets.Catch/Objects/JuiceStream.cs
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using osu.Game.Audio;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
using osu.Game.Beatmaps.ControlPoints;
|
||||||
|
using osu.Game.Rulesets.Catch.UI;
|
||||||
|
using osu.Game.Rulesets.Objects;
|
||||||
|
using osu.Game.Rulesets.Objects.Types;
|
||||||
|
using OpenTK;
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Catch.Objects
|
||||||
|
{
|
||||||
|
public class JuiceStream : CatchBaseHit, IHasCurve
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Scoring distance with a speed-adjusted beat length of 1 second.
|
||||||
|
/// </summary>
|
||||||
|
private const float base_scoring_distance = 100;
|
||||||
|
|
||||||
|
public readonly SliderCurve Curve = new SliderCurve();
|
||||||
|
|
||||||
|
public int RepeatCount { get; set; } = 1;
|
||||||
|
|
||||||
|
public double Velocity;
|
||||||
|
public double TickDistance;
|
||||||
|
|
||||||
|
public override void ApplyDefaults(ControlPointInfo controlPointInfo, BeatmapDifficulty difficulty)
|
||||||
|
{
|
||||||
|
base.ApplyDefaults(controlPointInfo, difficulty);
|
||||||
|
|
||||||
|
TimingControlPoint timingPoint = controlPointInfo.TimingPointAt(StartTime);
|
||||||
|
DifficultyControlPoint difficultyPoint = controlPointInfo.DifficultyPointAt(StartTime);
|
||||||
|
|
||||||
|
double scoringDistance = base_scoring_distance * difficulty.SliderMultiplier * difficultyPoint.SpeedMultiplier;
|
||||||
|
|
||||||
|
Velocity = scoringDistance / timingPoint.BeatLength;
|
||||||
|
TickDistance = scoringDistance / difficulty.SliderTickRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<Droplet> Ticks
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (TickDistance == 0) yield break;
|
||||||
|
|
||||||
|
var length = Curve.Distance;
|
||||||
|
var tickDistance = Math.Min(TickDistance, length);
|
||||||
|
var repeatDuration = length / Velocity;
|
||||||
|
|
||||||
|
var minDistanceFromEnd = Velocity * 0.01;
|
||||||
|
|
||||||
|
// temporary
|
||||||
|
while (tickDistance > 10) tickDistance /= 2;
|
||||||
|
|
||||||
|
for (var repeat = 0; repeat < RepeatCount; repeat++)
|
||||||
|
{
|
||||||
|
var repeatStartTime = StartTime + repeat * repeatDuration;
|
||||||
|
var reversed = repeat % 2 == 1;
|
||||||
|
|
||||||
|
for (var d = tickDistance; d <= length; d += tickDistance)
|
||||||
|
{
|
||||||
|
if (d > length - minDistanceFromEnd)
|
||||||
|
break;
|
||||||
|
|
||||||
|
var distanceProgress = d / length;
|
||||||
|
var timeProgress = reversed ? 1 - distanceProgress : distanceProgress;
|
||||||
|
|
||||||
|
yield return new Droplet
|
||||||
|
{
|
||||||
|
StartTime = repeatStartTime + timeProgress * repeatDuration,
|
||||||
|
X = Curve.PositionAt(distanceProgress).X / CatchPlayfield.BASE_WIDTH,
|
||||||
|
Samples = new SampleInfoList(Samples.Select(s => new SampleInfo
|
||||||
|
{
|
||||||
|
Bank = s.Bank,
|
||||||
|
Name = @"slidertick",
|
||||||
|
Volume = s.Volume
|
||||||
|
}))
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public double EndTime => StartTime + RepeatCount * Curve.Distance / Velocity;
|
||||||
|
|
||||||
|
public float EndX => Curve.PositionAt(ProgressAt(1)).X / CatchPlayfield.BASE_WIDTH;
|
||||||
|
|
||||||
|
public double Duration => EndTime - StartTime;
|
||||||
|
|
||||||
|
public double Distance
|
||||||
|
{
|
||||||
|
get { return Curve.Distance; }
|
||||||
|
set { Curve.Distance = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Vector2> ControlPoints
|
||||||
|
{
|
||||||
|
get { return Curve.ControlPoints; }
|
||||||
|
set { Curve.ControlPoints = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<SampleInfoList> RepeatSamples { get; set; } = new List<SampleInfoList>();
|
||||||
|
|
||||||
|
public CurveType CurveType
|
||||||
|
{
|
||||||
|
get { return Curve.CurveType; }
|
||||||
|
set { Curve.CurveType = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public Vector2 PositionAt(double progress) => Curve.PositionAt(ProgressAt(progress));
|
||||||
|
|
||||||
|
public double ProgressAt(double progress)
|
||||||
|
{
|
||||||
|
double p = progress * RepeatCount % 1;
|
||||||
|
if (RepeatAt(progress) % 2 == 1)
|
||||||
|
p = 1 - p;
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int RepeatAt(double progress) => (int)(progress * RepeatCount);
|
||||||
|
}
|
||||||
|
}
|
@ -2,8 +2,6 @@
|
|||||||
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using osu.Game.Beatmaps;
|
|
||||||
using osu.Game.Rulesets.Catch.Objects;
|
|
||||||
|
|
||||||
namespace osu.Game.Rulesets.Catch.Tests
|
namespace osu.Game.Rulesets.Catch.Tests
|
||||||
{
|
{
|
||||||
@ -13,15 +11,5 @@ namespace osu.Game.Rulesets.Catch.Tests
|
|||||||
public TestCaseCatchPlayer() : base(typeof(CatchRuleset))
|
public TestCaseCatchPlayer() : base(typeof(CatchRuleset))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override Beatmap CreateBeatmap()
|
|
||||||
{
|
|
||||||
var beatmap = new Beatmap();
|
|
||||||
|
|
||||||
for (int i = 0; i < 256; i++)
|
|
||||||
beatmap.HitObjects.Add(new Fruit { X = 0.5f, StartTime = i * 100, NewCombo = i % 8 == 0 });
|
|
||||||
|
|
||||||
return beatmap;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
27
osu.Game.Rulesets.Catch/Tests/TestCaseCatchStacker.cs
Normal file
27
osu.Game.Rulesets.Catch/Tests/TestCaseCatchStacker.cs
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
using NUnit.Framework;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
using osu.Game.Rulesets.Catch.Objects;
|
||||||
|
|
||||||
|
namespace osu.Game.Rulesets.Catch.Tests
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class TestCaseCatchStacker : Game.Tests.Visual.TestCasePlayer
|
||||||
|
{
|
||||||
|
public TestCaseCatchStacker() : base(typeof(CatchRuleset))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override Beatmap CreateBeatmap()
|
||||||
|
{
|
||||||
|
var beatmap = new Beatmap();
|
||||||
|
|
||||||
|
for (int i = 0; i < 256; i++)
|
||||||
|
beatmap.HitObjects.Add(new Fruit { X = 0.5f, StartTime = i * 100, NewCombo = i % 8 == 0 });
|
||||||
|
|
||||||
|
return beatmap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -15,6 +15,8 @@ namespace osu.Game.Rulesets.Catch.UI
|
|||||||
{
|
{
|
||||||
public class CatchPlayfield : ScrollingPlayfield
|
public class CatchPlayfield : ScrollingPlayfield
|
||||||
{
|
{
|
||||||
|
public static readonly float BASE_WIDTH = 512;
|
||||||
|
|
||||||
protected override Container<Drawable> Content => content;
|
protected override Container<Drawable> Content => content;
|
||||||
private readonly Container<Drawable> content;
|
private readonly Container<Drawable> content;
|
||||||
|
|
||||||
@ -28,8 +30,6 @@ namespace osu.Game.Rulesets.Catch.UI
|
|||||||
|
|
||||||
Reversed.Value = true;
|
Reversed.Value = true;
|
||||||
|
|
||||||
Size = new Vector2(1);
|
|
||||||
|
|
||||||
Anchor = Anchor.TopCentre;
|
Anchor = Anchor.TopCentre;
|
||||||
Origin = Anchor.TopCentre;
|
Origin = Anchor.TopCentre;
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ namespace osu.Game.Rulesets.Catch.UI
|
|||||||
|
|
||||||
base.Add(h);
|
base.Add(h);
|
||||||
|
|
||||||
var fruit = (DrawableFruit)h;
|
var fruit = (DrawableCatchHitObject)h;
|
||||||
fruit.CheckPosition = CheckIfWeCanCatch;
|
fruit.CheckPosition = CheckIfWeCanCatch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,8 +32,13 @@ namespace osu.Game.Rulesets.Catch.UI
|
|||||||
|
|
||||||
protected override DrawableHitObject<CatchBaseHit> GetVisualRepresentation(CatchBaseHit h)
|
protected override DrawableHitObject<CatchBaseHit> GetVisualRepresentation(CatchBaseHit h)
|
||||||
{
|
{
|
||||||
if (h is Fruit)
|
var fruit = h as Fruit;
|
||||||
return new DrawableFruit(h);
|
if (fruit != null)
|
||||||
|
return new DrawableFruit(fruit);
|
||||||
|
|
||||||
|
var stream = h as JuiceStream;
|
||||||
|
if (stream != null)
|
||||||
|
return new DrawableJuiceStream(stream);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,10 @@
|
|||||||
<Compile Include="CatchDifficultyCalculator.cs" />
|
<Compile Include="CatchDifficultyCalculator.cs" />
|
||||||
<Compile Include="CatchInputManager.cs" />
|
<Compile Include="CatchInputManager.cs" />
|
||||||
<Compile Include="Objects\Drawable\DrawableCatchHitObject.cs" />
|
<Compile Include="Objects\Drawable\DrawableCatchHitObject.cs" />
|
||||||
|
<Compile Include="Objects\Drawable\DrawableDroplet.cs" />
|
||||||
|
<Compile Include="Objects\Drawable\DrawableJuiceStream.cs" />
|
||||||
|
<Compile Include="Objects\Drawable\Pieces\Pulp.cs" />
|
||||||
|
<Compile Include="Objects\JuiceStream.cs" />
|
||||||
<Compile Include="Scoring\CatchScoreProcessor.cs" />
|
<Compile Include="Scoring\CatchScoreProcessor.cs" />
|
||||||
<Compile Include="Judgements\CatchJudgement.cs" />
|
<Compile Include="Judgements\CatchJudgement.cs" />
|
||||||
<Compile Include="Objects\CatchBaseHit.cs" />
|
<Compile Include="Objects\CatchBaseHit.cs" />
|
||||||
@ -59,6 +63,7 @@
|
|||||||
<Compile Include="Objects\Fruit.cs" />
|
<Compile Include="Objects\Fruit.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="Tests\TestCaseCatcher.cs" />
|
<Compile Include="Tests\TestCaseCatcher.cs" />
|
||||||
|
<Compile Include="Tests\TestCaseCatchStacker.cs" />
|
||||||
<Compile Include="Tests\TestCaseCatchPlayer.cs" />
|
<Compile Include="Tests\TestCaseCatchPlayer.cs" />
|
||||||
<Compile Include="UI\Catcher.cs" />
|
<Compile Include="UI\Catcher.cs" />
|
||||||
<Compile Include="UI\CatchRulesetContainer.cs" />
|
<Compile Include="UI\CatchRulesetContainer.cs" />
|
||||||
@ -80,11 +85,6 @@
|
|||||||
<Name>osu.Framework</Name>
|
<Name>osu.Framework</Name>
|
||||||
<Private>False</Private>
|
<Private>False</Private>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\osu.Game.Rulesets.Osu\osu.Game.Rulesets.Osu.csproj">
|
|
||||||
<Project>{C92A607B-1FDD-4954-9F92-03FF547D9080}</Project>
|
|
||||||
<Name>osu.Game.Rulesets.Osu</Name>
|
|
||||||
<Private>False</Private>
|
|
||||||
</ProjectReference>
|
|
||||||
<ProjectReference Include="..\osu.Game\osu.Game.csproj">
|
<ProjectReference Include="..\osu.Game\osu.Game.csproj">
|
||||||
<Project>{2a66dd92-adb1-4994-89e2-c94e04acda0d}</Project>
|
<Project>{2a66dd92-adb1-4994-89e2-c94e04acda0d}</Project>
|
||||||
<Name>osu.Game</Name>
|
<Name>osu.Game</Name>
|
||||||
|
@ -15,6 +15,8 @@ namespace osu.Game.Rulesets.Objects
|
|||||||
|
|
||||||
public List<Vector2> ControlPoints;
|
public List<Vector2> ControlPoints;
|
||||||
|
|
||||||
|
public double Scale = 1;
|
||||||
|
|
||||||
public CurveType CurveType = CurveType.PerfectCurve;
|
public CurveType CurveType = CurveType.PerfectCurve;
|
||||||
|
|
||||||
public Vector2 Offset;
|
public Vector2 Offset;
|
||||||
|
Loading…
Reference in New Issue
Block a user