mirror of
https://github.com/ppy/osu.git
synced 2024-11-11 20:07:29 +08:00
Merge branch 'master' into DrabWeb/song-progress-graph
# Conflicts: # osu.Desktop.VisualTests/osu.Desktop.VisualTests.csproj # osu.Game/Overlays/Pause/PauseProgressBar.cs # osu.Game/Overlays/Pause/PauseProgressGraph.cs # osu.Game/osu.Game.csproj
This commit is contained in:
commit
435e845067
@ -7,3 +7,21 @@ insert_final_newline = true
|
|||||||
indent_style = space
|
indent_style = space
|
||||||
indent_size = 4
|
indent_size = 4
|
||||||
trim_trailing_whitespace = true
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
|
#Roslyn naming styles
|
||||||
|
|
||||||
|
#PascalCase for public and protected members
|
||||||
|
dotnet_naming_style.pascalcase.capitalization = pascal_case
|
||||||
|
dotnet_naming_symbols.public_members.applicable_accessibilities = public,internal,protected,protected_internal
|
||||||
|
dotnet_naming_symbols.public_members.applicable_kinds = property,method,field,event,delegate
|
||||||
|
dotnet_naming_rule.public_members_pascalcase.severity = suggestion
|
||||||
|
dotnet_naming_rule.public_members_pascalcase.symbols = public_members
|
||||||
|
dotnet_naming_rule.public_members_pascalcase.style = pascalcase
|
||||||
|
|
||||||
|
#camelCase for private members
|
||||||
|
dotnet_naming_style.camelcase.capitalization = camel_case
|
||||||
|
dotnet_naming_symbols.private_members.applicable_accessibilities = private
|
||||||
|
dotnet_naming_symbols.private_members.applicable_kinds = property,method,field,event,delegate
|
||||||
|
dotnet_naming_rule.private_members_camelcase.severity = suggestion
|
||||||
|
dotnet_naming_rule.private_members_camelcase.symbols = private_members
|
||||||
|
dotnet_naming_rule.private_members_camelcase.style = camelcase
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -11,7 +11,7 @@
|
|||||||
*.userprefs
|
*.userprefs
|
||||||
|
|
||||||
# Build results
|
# Build results
|
||||||
[Dd]ebug/
|
bin/[Dd]ebug/
|
||||||
[Dd]ebugPublic/
|
[Dd]ebugPublic/
|
||||||
[Rr]elease/
|
[Rr]elease/
|
||||||
[Rr]eleases/
|
[Rr]eleases/
|
||||||
@ -256,3 +256,4 @@ paket-files/
|
|||||||
# Python Tools for Visual Studio (PTVS)
|
# Python Tools for Visual Studio (PTVS)
|
||||||
__pycache__/
|
__pycache__/
|
||||||
*.pyc
|
*.pyc
|
||||||
|
Staging/
|
||||||
|
4
LICENCE
4
LICENCE
@ -1,6 +1,4 @@
|
|||||||
The MIT License
|
Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
|
||||||
Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 5906ae1e16802fd4e04a6e9ceefdbd1a95de8b9e
|
Subproject commit 5dbb4a5134dacb2e98ab8f2af219039a72bd32e6
|
@ -1 +1 @@
|
|||||||
Subproject commit c03414fd4e9ffd99ab5641ac9a15ee21f3976b55
|
Subproject commit 51f2b9b37f38cd349a3dd728a78f8fffcb3a54f5
|
32
osu.Desktop.Deploy/App.config
Normal file
32
osu.Desktop.Deploy/App.config
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<appSettings>
|
||||||
|
<add key="StagingFolder" value="Staging" />
|
||||||
|
<add key="ReleasesFolder" value="Releases" />
|
||||||
|
<add key="GitHubAccessToken" value="" />
|
||||||
|
<add key="GitHubUsername" value="ppy" />
|
||||||
|
<add key="GitHubRepoName" value="osu" />
|
||||||
|
<add key="ProjectName" value="osu.Desktop" />
|
||||||
|
<add key="NuSpecName" value="osu.Desktop\osu.nuspec" />
|
||||||
|
<add key="SolutionName" value="osu" />
|
||||||
|
<add key="TargetName" value="Client\osu.Desktop" />
|
||||||
|
<add key="PackageName" value="osulazer" />
|
||||||
|
<add key="IconName" value="lazer.ico" />
|
||||||
|
<add key="CodeSigningCertificate" value="" />
|
||||||
|
</appSettings>
|
||||||
|
<startup>
|
||||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
|
||||||
|
</startup>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="DeltaCompressionDotNet.MsDelta" publicKeyToken="46b2138a390abf55" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-1.1.0.0" newVersion="1.1.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
</configuration>
|
13
osu.Desktop.Deploy/GitHubObject.cs
Normal file
13
osu.Desktop.Deploy/GitHubObject.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace osu.Desktop.Deploy
|
||||||
|
{
|
||||||
|
internal class GitHubObject
|
||||||
|
{
|
||||||
|
[JsonProperty(@"id")]
|
||||||
|
public int Id;
|
||||||
|
|
||||||
|
[JsonProperty(@"name")]
|
||||||
|
public string Name;
|
||||||
|
}
|
||||||
|
}
|
25
osu.Desktop.Deploy/GitHubRelease.cs
Normal file
25
osu.Desktop.Deploy/GitHubRelease.cs
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace osu.Desktop.Deploy
|
||||||
|
{
|
||||||
|
internal class GitHubRelease
|
||||||
|
{
|
||||||
|
[JsonProperty(@"id")]
|
||||||
|
public int Id;
|
||||||
|
|
||||||
|
[JsonProperty(@"tag_name")]
|
||||||
|
public string TagName => $"v{Name}";
|
||||||
|
|
||||||
|
[JsonProperty(@"name")]
|
||||||
|
public string Name;
|
||||||
|
|
||||||
|
[JsonProperty(@"draft")]
|
||||||
|
public bool Draft;
|
||||||
|
|
||||||
|
[JsonProperty(@"prerelease")]
|
||||||
|
public bool PreRelease;
|
||||||
|
|
||||||
|
[JsonProperty(@"upload_url")]
|
||||||
|
public string UploadUrl;
|
||||||
|
}
|
||||||
|
}
|
420
osu.Desktop.Deploy/Program.cs
Normal file
420
osu.Desktop.Deploy/Program.cs
Normal file
@ -0,0 +1,420 @@
|
|||||||
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
// Licensed under the MIT Licence - https://raw.GitHubusercontent.com/ppy/osu-framework/master/LICENCE
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Configuration;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using osu.Framework.IO.Network;
|
||||||
|
using FileWebRequest = osu.Framework.IO.Network.FileWebRequest;
|
||||||
|
using WebRequest = osu.Framework.IO.Network.WebRequest;
|
||||||
|
|
||||||
|
namespace osu.Desktop.Deploy
|
||||||
|
{
|
||||||
|
internal static class Program
|
||||||
|
{
|
||||||
|
private const string nuget_path = @"packages\NuGet.CommandLine.3.5.0\tools\NuGet.exe";
|
||||||
|
private const string squirrel_path = @"packages\squirrel.windows.1.5.2\tools\Squirrel.exe";
|
||||||
|
private const string msbuild_path = @"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe";
|
||||||
|
|
||||||
|
public static string StagingFolder = ConfigurationManager.AppSettings["StagingFolder"];
|
||||||
|
public static string ReleasesFolder = ConfigurationManager.AppSettings["ReleasesFolder"];
|
||||||
|
public static string GitHubAccessToken = ConfigurationManager.AppSettings["GitHubAccessToken"];
|
||||||
|
public static string GitHubUsername = ConfigurationManager.AppSettings["GitHubUsername"];
|
||||||
|
public static string GitHubRepoName = ConfigurationManager.AppSettings["GitHubRepoName"];
|
||||||
|
public static string SolutionName = ConfigurationManager.AppSettings["SolutionName"];
|
||||||
|
public static string ProjectName = ConfigurationManager.AppSettings["ProjectName"];
|
||||||
|
public static string NuSpecName = ConfigurationManager.AppSettings["NuSpecName"];
|
||||||
|
public static string TargetName = ConfigurationManager.AppSettings["TargetName"];
|
||||||
|
public static string PackageName = ConfigurationManager.AppSettings["PackageName"];
|
||||||
|
public static string IconName = ConfigurationManager.AppSettings["IconName"];
|
||||||
|
public static string CodeSigningCertificate = ConfigurationManager.AppSettings["CodeSigningCertificate"];
|
||||||
|
|
||||||
|
public static string GitHubApiEndpoint => $"https://api.github.com/repos/{GitHubUsername}/{GitHubRepoName}/releases";
|
||||||
|
public static string GitHubReleasePage => $"https://github.com/{GitHubUsername}/{GitHubRepoName}/releases";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// How many previous build deltas we want to keep when publishing.
|
||||||
|
/// </summary>
|
||||||
|
const int keep_delta_count = 3;
|
||||||
|
|
||||||
|
private static string codeSigningCmd => string.IsNullOrEmpty(codeSigningPassword) ? "" : $"-n \"/a /f {codeSigningCertPath} /p {codeSigningPassword} /t http://timestamp.comodoca.com/authenticode\"";
|
||||||
|
|
||||||
|
private static string homeDir => Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
|
||||||
|
private static string codeSigningCertPath => Path.Combine(homeDir, CodeSigningCertificate);
|
||||||
|
private static string solutionPath => Environment.CurrentDirectory;
|
||||||
|
private static string stagingPath => Path.Combine(solutionPath, StagingFolder);
|
||||||
|
private static string iconPath => Path.Combine(solutionPath, ProjectName, IconName);
|
||||||
|
|
||||||
|
private static string nupkgFilename(string ver) => $"{PackageName}.{ver}.nupkg";
|
||||||
|
private static string nupkgDistroFilename(string ver) => $"{PackageName}-{ver}-full.nupkg";
|
||||||
|
|
||||||
|
private static Stopwatch sw = new Stopwatch();
|
||||||
|
|
||||||
|
private static string codeSigningPassword;
|
||||||
|
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
displayHeader();
|
||||||
|
|
||||||
|
findSolutionPath();
|
||||||
|
|
||||||
|
if (!Directory.Exists(ReleasesFolder))
|
||||||
|
{
|
||||||
|
write("WARNING: No release directory found. Make sure you want this!", ConsoleColor.Yellow);
|
||||||
|
Directory.CreateDirectory(ReleasesFolder);
|
||||||
|
}
|
||||||
|
|
||||||
|
checkGitHubReleases();
|
||||||
|
|
||||||
|
refreshDirectory(StagingFolder);
|
||||||
|
|
||||||
|
//increment build number until we have a unique one.
|
||||||
|
string verBase = DateTime.Now.ToString("yyyy.Mdd.");
|
||||||
|
int increment = 0;
|
||||||
|
while (Directory.GetFiles(ReleasesFolder, $"*{verBase}{increment}*").Any())
|
||||||
|
increment++;
|
||||||
|
|
||||||
|
string version = $"{verBase}{increment}";
|
||||||
|
|
||||||
|
Console.ForegroundColor = ConsoleColor.White;
|
||||||
|
Console.Write($"Ready to deploy {version}: ");
|
||||||
|
Console.ReadLine();
|
||||||
|
|
||||||
|
sw.Start();
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(CodeSigningCertificate))
|
||||||
|
{
|
||||||
|
Console.Write("Enter code signing password: ");
|
||||||
|
codeSigningPassword = readLineMasked();
|
||||||
|
}
|
||||||
|
|
||||||
|
write("Restoring NuGet packages...");
|
||||||
|
runCommand(nuget_path, "restore " + solutionPath);
|
||||||
|
|
||||||
|
write("Updating AssemblyInfo...");
|
||||||
|
updateAssemblyInfo(version);
|
||||||
|
|
||||||
|
write("Running build process...");
|
||||||
|
runCommand(msbuild_path, $"/v:quiet /m /t:{TargetName.Replace('.', '_')} /p:OutputPath={stagingPath};Configuration=Release {SolutionName}.sln");
|
||||||
|
|
||||||
|
write("Creating NuGet deployment package...");
|
||||||
|
runCommand(nuget_path, $"pack {NuSpecName} -Version {version} -Properties Configuration=Deploy -OutputDirectory {stagingPath} -BasePath {stagingPath}");
|
||||||
|
|
||||||
|
//prune once before checking for files so we can avoid erroring on files which aren't even needed for this build.
|
||||||
|
pruneReleases();
|
||||||
|
|
||||||
|
checkReleaseFiles();
|
||||||
|
|
||||||
|
write("Running squirrel build...");
|
||||||
|
runCommand(squirrel_path, $"--releasify {stagingPath}\\{nupkgFilename(version)} --setupIcon {iconPath} --icon {iconPath} {codeSigningCmd} --no-msi");
|
||||||
|
|
||||||
|
//prune again to clean up before upload.
|
||||||
|
pruneReleases();
|
||||||
|
|
||||||
|
//rename setup to install.
|
||||||
|
File.Copy(Path.Combine(ReleasesFolder, "Setup.exe"), Path.Combine(ReleasesFolder, "install.exe"), true);
|
||||||
|
File.Delete(Path.Combine(ReleasesFolder, "Setup.exe"));
|
||||||
|
|
||||||
|
uploadBuild(version);
|
||||||
|
|
||||||
|
//reset assemblyinfo.
|
||||||
|
updateAssemblyInfo("0.0.0");
|
||||||
|
|
||||||
|
write("Done!", ConsoleColor.White);
|
||||||
|
Console.ReadLine();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void displayHeader()
|
||||||
|
{
|
||||||
|
Console.ForegroundColor = ConsoleColor.Red;
|
||||||
|
Console.WriteLine();
|
||||||
|
Console.WriteLine(" Please note that OSU! and PPY are registered trademarks and as such covered by trademark law.");
|
||||||
|
Console.WriteLine(" Do not distribute builds of this project publicly that make use of these.");
|
||||||
|
Console.ResetColor();
|
||||||
|
Console.WriteLine();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Ensure we have all the files in the release directory which are expected to be there.
|
||||||
|
/// This should have been accounted for in earlier steps, and just serves as a verification step.
|
||||||
|
/// </summary>
|
||||||
|
private static void checkReleaseFiles()
|
||||||
|
{
|
||||||
|
var releaseLines = getReleaseLines();
|
||||||
|
|
||||||
|
//ensure we have all files necessary
|
||||||
|
foreach (var l in releaseLines)
|
||||||
|
if (!File.Exists(Path.Combine(ReleasesFolder, l.Filename)))
|
||||||
|
error($"Local file missing {l.Filename}");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IEnumerable<ReleaseLine> getReleaseLines() => File.ReadAllLines(Path.Combine(ReleasesFolder, "RELEASES")).Select(l => new ReleaseLine(l));
|
||||||
|
|
||||||
|
private static void pruneReleases()
|
||||||
|
{
|
||||||
|
write("Pruning RELEASES...");
|
||||||
|
|
||||||
|
var releaseLines = getReleaseLines().ToList();
|
||||||
|
|
||||||
|
var fulls = releaseLines.Where(l => l.Filename.Contains("-full")).Reverse().Skip(1);
|
||||||
|
|
||||||
|
//remove any FULL releases (except most recent)
|
||||||
|
foreach (var l in fulls)
|
||||||
|
{
|
||||||
|
write($"- Removing old release {l.Filename}", ConsoleColor.Yellow);
|
||||||
|
File.Delete(Path.Combine(ReleasesFolder, l.Filename));
|
||||||
|
releaseLines.Remove(l);
|
||||||
|
}
|
||||||
|
|
||||||
|
//remove excess deltas
|
||||||
|
var deltas = releaseLines.Where(l => l.Filename.Contains("-delta"));
|
||||||
|
if (deltas.Count() > keep_delta_count)
|
||||||
|
{
|
||||||
|
foreach (var l in deltas.Take(deltas.Count() - keep_delta_count))
|
||||||
|
{
|
||||||
|
write($"- Removing old delta {l.Filename}", ConsoleColor.Yellow);
|
||||||
|
File.Delete(Path.Combine(ReleasesFolder, l.Filename));
|
||||||
|
releaseLines.Remove(l);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var lines = new List<string>();
|
||||||
|
releaseLines.ForEach(l => lines.Add(l.ToString()));
|
||||||
|
File.WriteAllLines(Path.Combine(ReleasesFolder, "RELEASES"), lines);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void uploadBuild(string version)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(GitHubAccessToken) || string.IsNullOrEmpty(codeSigningCertPath))
|
||||||
|
return;
|
||||||
|
|
||||||
|
write("Publishing to GitHub...");
|
||||||
|
|
||||||
|
write($"- Creating release {version}...", ConsoleColor.Yellow);
|
||||||
|
var req = new JsonWebRequest<GitHubRelease>($"{GitHubApiEndpoint}")
|
||||||
|
{
|
||||||
|
Method = HttpMethod.POST
|
||||||
|
};
|
||||||
|
req.AddRaw(JsonConvert.SerializeObject(new GitHubRelease
|
||||||
|
{
|
||||||
|
Name = version,
|
||||||
|
Draft = true,
|
||||||
|
PreRelease = true
|
||||||
|
}));
|
||||||
|
req.AuthenticatedBlockingPerform();
|
||||||
|
|
||||||
|
var assetUploadUrl = req.ResponseObject.UploadUrl.Replace("{?name,label}", "?name={0}");
|
||||||
|
foreach (var a in Directory.GetFiles(ReleasesFolder).Reverse()) //reverse to upload RELEASES first.
|
||||||
|
{
|
||||||
|
write($"- Adding asset {a}...", ConsoleColor.Yellow);
|
||||||
|
var upload = new WebRequest(assetUploadUrl, Path.GetFileName(a))
|
||||||
|
{
|
||||||
|
Method = HttpMethod.POST,
|
||||||
|
ContentType = "application/octet-stream",
|
||||||
|
};
|
||||||
|
|
||||||
|
upload.AddRaw(File.ReadAllBytes(a));
|
||||||
|
upload.AuthenticatedBlockingPerform();
|
||||||
|
}
|
||||||
|
|
||||||
|
openGitHubReleasePage();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void openGitHubReleasePage() => Process.Start(GitHubReleasePage);
|
||||||
|
|
||||||
|
private static void checkGitHubReleases()
|
||||||
|
{
|
||||||
|
write("Checking GitHub releases...");
|
||||||
|
var req = new JsonWebRequest<List<GitHubRelease>>($"{GitHubApiEndpoint}");
|
||||||
|
req.AuthenticatedBlockingPerform();
|
||||||
|
|
||||||
|
var lastRelease = req.ResponseObject.FirstOrDefault();
|
||||||
|
|
||||||
|
if (lastRelease == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (lastRelease.Draft)
|
||||||
|
{
|
||||||
|
openGitHubReleasePage();
|
||||||
|
error("There's a pending draft release! You probably don't want to push a build with this present.");
|
||||||
|
}
|
||||||
|
|
||||||
|
//there's a previous release for this project.
|
||||||
|
var assetReq = new JsonWebRequest<List<GitHubObject>>($"{GitHubApiEndpoint}/{lastRelease.Id}/assets");
|
||||||
|
assetReq.AuthenticatedBlockingPerform();
|
||||||
|
var assets = assetReq.ResponseObject;
|
||||||
|
|
||||||
|
//make sure our RELEASES file is the same as the last build on the server.
|
||||||
|
var releaseAsset = assets.FirstOrDefault(a => a.Name == "RELEASES");
|
||||||
|
|
||||||
|
//if we don't have a RELEASES asset then the previous release likely wasn't a Squirrel one.
|
||||||
|
if (releaseAsset == null) return;
|
||||||
|
|
||||||
|
write($"Last GitHub release was {lastRelease.Name}.");
|
||||||
|
|
||||||
|
bool requireDownload = false;
|
||||||
|
|
||||||
|
if (!File.Exists(Path.Combine(ReleasesFolder, nupkgDistroFilename(lastRelease.Name))))
|
||||||
|
{
|
||||||
|
write("Last verion's package not found locally.", ConsoleColor.Red);
|
||||||
|
requireDownload = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var lastReleases = new RawFileWebRequest($"{GitHubApiEndpoint}/assets/{releaseAsset.Id}");
|
||||||
|
lastReleases.AuthenticatedBlockingPerform();
|
||||||
|
if (File.ReadAllText(Path.Combine(ReleasesFolder, "RELEASES")) != lastReleases.ResponseString)
|
||||||
|
{
|
||||||
|
write("Server's RELEASES differed from ours.", ConsoleColor.Red);
|
||||||
|
requireDownload = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!requireDownload) return;
|
||||||
|
|
||||||
|
write("Refreshing local releases directory...");
|
||||||
|
refreshDirectory(ReleasesFolder);
|
||||||
|
|
||||||
|
foreach (var a in assets)
|
||||||
|
{
|
||||||
|
write($"- Downloading {a.Name}...", ConsoleColor.Yellow);
|
||||||
|
new FileWebRequest(Path.Combine(ReleasesFolder, a.Name), $"{GitHubApiEndpoint}/assets/{a.Id}").AuthenticatedBlockingPerform();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void refreshDirectory(string directory)
|
||||||
|
{
|
||||||
|
if (Directory.Exists(directory))
|
||||||
|
Directory.Delete(directory, true);
|
||||||
|
Directory.CreateDirectory(directory);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void updateAssemblyInfo(string version)
|
||||||
|
{
|
||||||
|
string file = Path.Combine(ProjectName, "Properties", "AssemblyInfo.cs");
|
||||||
|
|
||||||
|
var l1 = File.ReadAllLines(file);
|
||||||
|
List<string> l2 = new List<string>();
|
||||||
|
foreach (var l in l1)
|
||||||
|
{
|
||||||
|
if (l.StartsWith("[assembly: AssemblyVersion("))
|
||||||
|
l2.Add($"[assembly: AssemblyVersion(\"{version}\")]");
|
||||||
|
else if (l.StartsWith("[assembly: AssemblyFileVersion("))
|
||||||
|
l2.Add($"[assembly: AssemblyFileVersion(\"{version}\")]");
|
||||||
|
else
|
||||||
|
l2.Add(l);
|
||||||
|
}
|
||||||
|
|
||||||
|
File.WriteAllLines(file, l2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Find the base path of the active solution (git checkout location)
|
||||||
|
/// </summary>
|
||||||
|
private static void findSolutionPath()
|
||||||
|
{
|
||||||
|
string path = Path.GetDirectoryName(Environment.CommandLine.Replace("\"", "").Trim());
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(path))
|
||||||
|
path = Environment.CurrentDirectory;
|
||||||
|
|
||||||
|
while (!File.Exists(Path.Combine(path, $"{SolutionName}.sln")))
|
||||||
|
path = path.Remove(path.LastIndexOf('\\'));
|
||||||
|
path += "\\";
|
||||||
|
|
||||||
|
Environment.CurrentDirectory = path;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool runCommand(string command, string args)
|
||||||
|
{
|
||||||
|
var psi = new ProcessStartInfo(command, args)
|
||||||
|
{
|
||||||
|
WorkingDirectory = solutionPath,
|
||||||
|
CreateNoWindow = true,
|
||||||
|
RedirectStandardOutput = true,
|
||||||
|
UseShellExecute = false,
|
||||||
|
WindowStyle = ProcessWindowStyle.Hidden
|
||||||
|
};
|
||||||
|
|
||||||
|
Process p = Process.Start(psi);
|
||||||
|
string output = p.StandardOutput.ReadToEnd();
|
||||||
|
if (p.ExitCode == 0) return true;
|
||||||
|
|
||||||
|
write(output);
|
||||||
|
error($"Command {command} {args} failed!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string readLineMasked()
|
||||||
|
{
|
||||||
|
var fg = Console.ForegroundColor;
|
||||||
|
Console.ForegroundColor = Console.BackgroundColor;
|
||||||
|
var ret = Console.ReadLine();
|
||||||
|
Console.ForegroundColor = fg;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void error(string message)
|
||||||
|
{
|
||||||
|
Console.ForegroundColor = ConsoleColor.Red;
|
||||||
|
Console.WriteLine($"FATAL ERROR: {message}");
|
||||||
|
|
||||||
|
Console.ReadLine();
|
||||||
|
Environment.Exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void write(string message, ConsoleColor col = ConsoleColor.Gray)
|
||||||
|
{
|
||||||
|
if (sw.ElapsedMilliseconds > 0)
|
||||||
|
{
|
||||||
|
Console.ForegroundColor = ConsoleColor.Green;
|
||||||
|
Console.Write(sw.ElapsedMilliseconds.ToString().PadRight(8));
|
||||||
|
}
|
||||||
|
Console.ForegroundColor = col;
|
||||||
|
Console.WriteLine(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void AuthenticatedBlockingPerform(this WebRequest r)
|
||||||
|
{
|
||||||
|
r.AddHeader("Authorization", $"token {GitHubAccessToken}");
|
||||||
|
r.BlockingPerform();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal class RawFileWebRequest : WebRequest
|
||||||
|
{
|
||||||
|
public RawFileWebRequest(string url) : base(url)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override HttpWebRequest CreateWebRequest(string requestString = null)
|
||||||
|
{
|
||||||
|
var req = base.CreateWebRequest(requestString);
|
||||||
|
req.Accept = "application/octet-stream";
|
||||||
|
return req;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal class ReleaseLine
|
||||||
|
{
|
||||||
|
public string Hash;
|
||||||
|
public string Filename;
|
||||||
|
public int Filesize;
|
||||||
|
|
||||||
|
public ReleaseLine(string line)
|
||||||
|
{
|
||||||
|
var split = line.Split(' ');
|
||||||
|
Hash = split[0];
|
||||||
|
Filename = split[1];
|
||||||
|
Filesize = int.Parse(split[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString() => $"{Hash} {Filename} {Filesize}";
|
||||||
|
}
|
||||||
|
}
|
35
osu.Desktop.Deploy/Properties/AssemblyInfo.cs
Normal file
35
osu.Desktop.Deploy/Properties/AssemblyInfo.cs
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("osu.Desktop.Deploy")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("osu.Desktop.Deploy")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2017")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("baea2f74-0315-4667-84e0-acac0b4bf785")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
125
osu.Desktop.Deploy/osu.Desktop.Deploy.csproj
Normal file
125
osu.Desktop.Deploy/osu.Desktop.Deploy.csproj
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{BAEA2F74-0315-4667-84E0-ACAC0B4BF785}</ProjectGuid>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>osu.Desktop.Deploy</RootNamespace>
|
||||||
|
<AssemblyName>osu.Desktop.Deploy</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<StartupObject>osu.Desktop.Deploy.Program</StartupObject>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="DeltaCompressionDotNet, Version=1.1.0.0, Culture=neutral, PublicKeyToken=1d14d6e5194e7f4a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\DeltaCompressionDotNet.1.1.0\lib\net20\DeltaCompressionDotNet.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DeltaCompressionDotNet.MsDelta, Version=1.1.0.0, Culture=neutral, PublicKeyToken=46b2138a390abf55, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\DeltaCompressionDotNet.1.1.0\lib\net20\DeltaCompressionDotNet.MsDelta.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DeltaCompressionDotNet.PatchApi, Version=1.1.0.0, Culture=neutral, PublicKeyToken=3e8888ee913ed789, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\DeltaCompressionDotNet.1.1.0\lib\net20\DeltaCompressionDotNet.PatchApi.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\squirrel.windows.1.5.2\lib\Net45\ICSharpCode.SharpZipLib.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Mono.Cecil, Version=0.9.6.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\Mono.Cecil.0.9.6.4\lib\net45\Mono.Cecil.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Mono.Cecil.Mdb, Version=0.9.6.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\Mono.Cecil.0.9.6.4\lib\net45\Mono.Cecil.Mdb.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Mono.Cecil.Pdb, Version=0.9.6.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\Mono.Cecil.0.9.6.4\lib\net45\Mono.Cecil.Pdb.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Mono.Cecil.Rocks, Version=0.9.6.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\Mono.Cecil.0.9.6.4\lib\net45\Mono.Cecil.Rocks.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="NuGet.Squirrel, Version=3.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\squirrel.windows.1.5.2\lib\Net45\NuGet.Squirrel.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Splat, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\Splat.2.0.0\lib\Net45\Splat.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Squirrel, Version=1.5.2.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\squirrel.windows.1.5.2\lib\Net45\Squirrel.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Configuration" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="GitHubObject.cs" />
|
||||||
|
<Compile Include="GitHubRelease.cs" />
|
||||||
|
<Compile Include="Program.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="App.config" />
|
||||||
|
<None Include="packages.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\osu-framework\osu.Framework.Desktop\osu.Framework.Desktop.csproj">
|
||||||
|
<Project>{65dc628f-a640-4111-ab35-3a5652bc1e17}</Project>
|
||||||
|
<Name>osu.Framework.Desktop</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\osu-framework\osu.Framework\osu.Framework.csproj">
|
||||||
|
<Project>{C76BF5B3-985E-4D39-95FE-97C9C879B83A}</Project>
|
||||||
|
<Name>osu.Framework</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
<Target Name="BeforeBuild">
|
||||||
|
</Target>
|
||||||
|
<Target Name="AfterBuild">
|
||||||
|
</Target>
|
||||||
|
-->
|
||||||
|
</Project>
|
9
osu.Desktop.Deploy/packages.config
Normal file
9
osu.Desktop.Deploy/packages.config
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="DeltaCompressionDotNet" version="1.1.0" targetFramework="net452" />
|
||||||
|
<package id="Mono.Cecil" version="0.9.6.4" targetFramework="net452" />
|
||||||
|
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net452" />
|
||||||
|
<package id="NuGet.CommandLine" version="3.5.0" targetFramework="net452" developmentDependency="true" />
|
||||||
|
<package id="Splat" version="2.0.0" targetFramework="net452" />
|
||||||
|
<package id="squirrel.windows" version="1.5.2" targetFramework="net452" />
|
||||||
|
</packages>
|
32
osu.Desktop.Tests/BenchmarkTest.cs
Normal file
32
osu.Desktop.Tests/BenchmarkTest.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 NUnit.Framework;
|
||||||
|
using osu.Desktop.VisualTests;
|
||||||
|
using osu.Framework.Desktop.Platform;
|
||||||
|
using osu.Game.Modes;
|
||||||
|
using osu.Game.Modes.Catch;
|
||||||
|
using osu.Game.Modes.Mania;
|
||||||
|
using osu.Game.Modes.Osu;
|
||||||
|
using osu.Game.Modes.Taiko;
|
||||||
|
|
||||||
|
namespace osu.Desktop.Tests
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class BenchmarkTest
|
||||||
|
{
|
||||||
|
[Test]
|
||||||
|
public void TestBenchmark()
|
||||||
|
{
|
||||||
|
using (var host = new HeadlessGameHost())
|
||||||
|
{
|
||||||
|
Ruleset.Register(new OsuRuleset());
|
||||||
|
Ruleset.Register(new TaikoRuleset());
|
||||||
|
Ruleset.Register(new ManiaRuleset());
|
||||||
|
Ruleset.Register(new CatchRuleset());
|
||||||
|
|
||||||
|
host.Run(new Benchmark());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
15
osu.Desktop.Tests/app.config
Normal file
15
osu.Desktop.Tests/app.config
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
-->
|
||||||
|
<configuration>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
</configuration>
|
117
osu.Desktop.Tests/osu.Desktop.Tests.csproj
Normal file
117
osu.Desktop.Tests/osu.Desktop.Tests.csproj
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{230AC4F3-7783-49FB-9AEC-B83CDA3B9F3D}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>osu.Desktop.Tests</RootNamespace>
|
||||||
|
<AssemblyName>osu.Desktop.Tests</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="mscorlib" />
|
||||||
|
<Reference Include="nunit.framework, Version=3.5.0.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\NUnit.3.5.0\lib\net45\nunit.framework.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="SQLite.Net, Version=3.1.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>$(SolutionDir)\packages\SQLite.Net.Core-PCL.3.1.1\lib\portable-win8+net45+wp8+wpa81+MonoAndroid1+MonoTouch1\SQLite.Net.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="Newtonsoft.Json">
|
||||||
|
<HintPath>$(SolutionDir)\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="SQLiteNetExtensions">
|
||||||
|
<HintPath>$(SolutionDir)\packages\SQLiteNetExtensions.1.3.0\lib\portable-net45+netcore45+wpa81+wp8+MonoAndroid1+MonoTouch1\SQLiteNetExtensions.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="SQLite.Net.Platform.Win32">
|
||||||
|
<HintPath>$(SolutionDir)\packages\SQLite.Net-PCL.3.1.1\lib\net4\SQLite.Net.Platform.Win32.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="SQLite.Net.Platform.Generic">
|
||||||
|
<HintPath>$(SolutionDir)\packages\SQLite.Net-PCL.3.1.1\lib\net40\SQLite.Net.Platform.Generic.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="BenchmarkTest.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\osu-framework\osu.Framework.Desktop\osu.Framework.Desktop.csproj">
|
||||||
|
<Project>{65DC628F-A640-4111-AB35-3A5652BC1E17}</Project>
|
||||||
|
<Name>osu.Framework.Desktop</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\osu-framework\osu.Framework\osu.Framework.csproj">
|
||||||
|
<Project>{C76BF5B3-985E-4D39-95FE-97C9C879B83A}</Project>
|
||||||
|
<Name>osu.Framework</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\osu-resources\osu.Game.Resources\osu.Game.Resources.csproj">
|
||||||
|
<Project>{d9a367c9-4c1a-489f-9b05-a0cea2b53b58}</Project>
|
||||||
|
<Name>osu.Game.Resources</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\osu.Desktop.VisualTests\osu.Desktop.VisualTests.csproj">
|
||||||
|
<Project>{69051C69-12AE-4E7D-A3E6-460D2E282312}</Project>
|
||||||
|
<Name>osu.Desktop.VisualTests</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\osu.Game.Modes.Catch\osu.Game.Modes.Catch.csproj">
|
||||||
|
<Project>{58F6C80C-1253-4A0E-A465-B8C85EBEADF3}</Project>
|
||||||
|
<Name>osu.Game.Modes.Catch</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\osu.Game.Modes.Mania\osu.Game.Modes.Mania.csproj">
|
||||||
|
<Project>{48F4582B-7687-4621-9CBE-5C24197CB536}</Project>
|
||||||
|
<Name>osu.Game.Modes.Mania</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\osu.Game.Modes.Osu\osu.Game.Modes.Osu.csproj">
|
||||||
|
<Project>{C92A607B-1FDD-4954-9F92-03FF547D9080}</Project>
|
||||||
|
<Name>osu.Game.Modes.Osu</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\osu.Game.Modes.Taiko\osu.Game.Modes.Taiko.csproj">
|
||||||
|
<Project>{F167E17A-7DE6-4AF5-B920-A5112296C695}</Project>
|
||||||
|
<Name>osu.Game.Modes.Taiko</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\osu.Game\osu.Game.csproj">
|
||||||
|
<Project>{0D3FBF8A-7464-4CF7-8C90-3E7886DF2D4D}</Project>
|
||||||
|
<Name>osu.Game</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="..\osu.licenseheader">
|
||||||
|
<Link>osu.licenseheader</Link>
|
||||||
|
</None>
|
||||||
|
<None Include="app.config" />
|
||||||
|
<None Include="packages.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="Properties\" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
<Target Name="BeforeBuild">
|
||||||
|
</Target>
|
||||||
|
<Target Name="AfterBuild">
|
||||||
|
</Target>
|
||||||
|
-->
|
||||||
|
</Project>
|
12
osu.Desktop.Tests/packages.config
Normal file
12
osu.Desktop.Tests/packages.config
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
-->
|
||||||
|
<packages>
|
||||||
|
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net45" />
|
||||||
|
<package id="NUnit" version="3.5.0" targetFramework="net45" />
|
||||||
|
<package id="SQLite.Net.Core-PCL" version="3.1.1" targetFramework="net45" />
|
||||||
|
<package id="SQLite.Net-PCL" version="3.1.1" targetFramework="net45" />
|
||||||
|
<package id="SQLiteNetExtensions" version="1.3.0" targetFramework="net45" />
|
||||||
|
</packages>
|
45
osu.Desktop.VisualTests/Benchmark.cs
Normal file
45
osu.Desktop.VisualTests/Benchmark.cs
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
// 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 osu.Framework.Allocation;
|
||||||
|
using osu.Framework.Screens.Testing;
|
||||||
|
using osu.Game;
|
||||||
|
|
||||||
|
namespace osu.Desktop.VisualTests
|
||||||
|
{
|
||||||
|
public class Benchmark : OsuGameBase
|
||||||
|
{
|
||||||
|
private double timePerTest = 200;
|
||||||
|
|
||||||
|
[BackgroundDependencyLoader]
|
||||||
|
private void load()
|
||||||
|
{
|
||||||
|
Host.MaximumDrawHz = int.MaxValue;
|
||||||
|
Host.MaximumUpdateHz = int.MaxValue;
|
||||||
|
Host.MaximumInactiveHz = int.MaxValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void LoadComplete()
|
||||||
|
{
|
||||||
|
base.LoadComplete();
|
||||||
|
|
||||||
|
TestBrowser f = new TestBrowser();
|
||||||
|
Add(f);
|
||||||
|
|
||||||
|
Console.WriteLine($@"{Time}: Running {f.TestCount} tests for {timePerTest}ms each...");
|
||||||
|
|
||||||
|
for (int i = 1; i < f.TestCount; i++)
|
||||||
|
{
|
||||||
|
int loadableCase = i;
|
||||||
|
Scheduler.AddDelayed(delegate
|
||||||
|
{
|
||||||
|
f.LoadTest(loadableCase);
|
||||||
|
Console.WriteLine($@"{Time}: Switching to test #{loadableCase}");
|
||||||
|
}, loadableCase * timePerTest);
|
||||||
|
}
|
||||||
|
|
||||||
|
Scheduler.AddDelayed(Host.Exit, f.TestCount * timePerTest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,8 +1,7 @@
|
|||||||
<!--
|
<!--
|
||||||
Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
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
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<configuration>
|
<configuration>
|
||||||
<dllmap os="linux" dll="opengl32.dll" target="libGL.so.1"/>
|
<dllmap os="linux" dll="opengl32.dll" target="libGL.so.1"/>
|
||||||
<dllmap os="linux" dll="glu32.dll" target="libGLU.so.1"/>
|
<dllmap os="linux" dll="glu32.dll" target="libGLU.so.1"/>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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;
|
using osu.Framework;
|
||||||
using osu.Framework.Desktop.Platform;
|
using osu.Framework.Desktop.Platform;
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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 System;
|
using System;
|
||||||
using osu.Framework.Desktop;
|
using osu.Framework.Desktop;
|
||||||
using osu.Framework.Desktop.Platform;
|
|
||||||
using osu.Framework.Platform;
|
using osu.Framework.Platform;
|
||||||
using osu.Game.Modes;
|
using osu.Game.Modes;
|
||||||
using osu.Game.Modes.Catch;
|
using osu.Game.Modes.Catch;
|
||||||
@ -18,15 +17,19 @@ namespace osu.Desktop.VisualTests
|
|||||||
[STAThread]
|
[STAThread]
|
||||||
public static void Main(string[] args)
|
public static void Main(string[] args)
|
||||||
{
|
{
|
||||||
using (BasicGameHost host = Host.GetSuitableHost(@"osu"))
|
bool benchmark = args.Length > 0 && args[0] == @"-benchmark";
|
||||||
|
|
||||||
|
using (GameHost host = Host.GetSuitableHost(@"osu"))
|
||||||
{
|
{
|
||||||
Ruleset.Register(new OsuRuleset());
|
Ruleset.Register(new OsuRuleset());
|
||||||
Ruleset.Register(new TaikoRuleset());
|
Ruleset.Register(new TaikoRuleset());
|
||||||
Ruleset.Register(new ManiaRuleset());
|
Ruleset.Register(new ManiaRuleset());
|
||||||
Ruleset.Register(new CatchRuleset());
|
Ruleset.Register(new CatchRuleset());
|
||||||
|
|
||||||
host.Add(new VisualTestGame());
|
if (benchmark)
|
||||||
host.Run();
|
host.Run(new Benchmark());
|
||||||
|
else
|
||||||
|
host.Run(new VisualTestGame());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,22 +1,10 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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 System.Collections.Generic;
|
using osu.Framework.Screens.Testing;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Linq;
|
|
||||||
using osu.Framework;
|
|
||||||
using osu.Framework.GameModes.Testing;
|
|
||||||
using osu.Framework.Graphics;
|
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Graphics.Sprites;
|
|
||||||
using osu.Framework.Threading;
|
using osu.Framework.Threading;
|
||||||
using osu.Game;
|
using osu.Game.Overlays;
|
||||||
using osu.Game.Online.API;
|
|
||||||
using osu.Game.Online.API.Requests;
|
|
||||||
using osu.Game.Online.Chat;
|
|
||||||
using OpenTK;
|
|
||||||
using osu.Framework.Allocation;
|
|
||||||
using osu.Game.Online.Chat.Drawables;
|
|
||||||
|
|
||||||
namespace osu.Desktop.VisualTests.Tests
|
namespace osu.Desktop.VisualTests.Tests
|
||||||
{
|
{
|
||||||
@ -25,119 +13,16 @@ namespace osu.Desktop.VisualTests.Tests
|
|||||||
private ScheduledDelegate messageRequest;
|
private ScheduledDelegate messageRequest;
|
||||||
|
|
||||||
public override string Name => @"Chat";
|
public override string Name => @"Chat";
|
||||||
public override string Description => @"Testing API polling";
|
public override string Description => @"Testing chat api and overlay";
|
||||||
|
|
||||||
FlowContainer flow;
|
|
||||||
|
|
||||||
private Scheduler scheduler = new Scheduler();
|
|
||||||
|
|
||||||
private APIAccess api;
|
|
||||||
|
|
||||||
private ChannelDisplay channelDisplay;
|
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
|
||||||
private void load(APIAccess api)
|
|
||||||
{
|
|
||||||
this.api = api;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void Reset()
|
public override void Reset()
|
||||||
{
|
{
|
||||||
base.Reset();
|
base.Reset();
|
||||||
|
|
||||||
if (api.State != APIState.Online)
|
Add(new ChatOverlay()
|
||||||
api.OnStateChange += delegate { initializeChannels(); };
|
|
||||||
else
|
|
||||||
initializeChannels();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void Update()
|
|
||||||
{
|
{
|
||||||
scheduler.Update();
|
State = Visibility.Visible
|
||||||
base.Update();
|
|
||||||
}
|
|
||||||
|
|
||||||
private long? lastMessageId;
|
|
||||||
|
|
||||||
List<Channel> careChannels;
|
|
||||||
|
|
||||||
private void initializeChannels()
|
|
||||||
{
|
|
||||||
careChannels = new List<Channel>();
|
|
||||||
|
|
||||||
if (api.State != APIState.Online)
|
|
||||||
return;
|
|
||||||
|
|
||||||
Add(flow = new FlowContainer
|
|
||||||
{
|
|
||||||
RelativeSizeAxes = Axes.Both,
|
|
||||||
Direction = FlowDirection.VerticalOnly
|
|
||||||
});
|
});
|
||||||
|
|
||||||
SpriteText loading;
|
|
||||||
Add(loading = new SpriteText
|
|
||||||
{
|
|
||||||
Text = @"Loading available channels...",
|
|
||||||
Anchor = Anchor.Centre,
|
|
||||||
Origin = Anchor.Centre,
|
|
||||||
TextSize = 40,
|
|
||||||
});
|
|
||||||
|
|
||||||
messageRequest?.Cancel();
|
|
||||||
|
|
||||||
ListChannelsRequest req = new ListChannelsRequest();
|
|
||||||
req.Success += delegate (List<Channel> channels)
|
|
||||||
{
|
|
||||||
Scheduler.Add(delegate
|
|
||||||
{
|
|
||||||
loading.FadeOut(100);
|
|
||||||
});
|
|
||||||
|
|
||||||
addChannel(channels.Find(c => c.Name == @"#osu"));
|
|
||||||
addChannel(channels.Find(c => c.Name == @"#lobby"));
|
|
||||||
addChannel(channels.Find(c => c.Name == @"#english"));
|
|
||||||
|
|
||||||
messageRequest = scheduler.AddDelayed(() => FetchNewMessages(api), 1000, true);
|
|
||||||
};
|
|
||||||
api.Queue(req);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addChannel(Channel channel)
|
|
||||||
{
|
|
||||||
flow.Add(channelDisplay = new ChannelDisplay(channel)
|
|
||||||
{
|
|
||||||
Size = new Vector2(1, 0.3f)
|
|
||||||
});
|
|
||||||
|
|
||||||
careChannels.Add(channel);
|
|
||||||
}
|
|
||||||
|
|
||||||
GetMessagesRequest fetchReq;
|
|
||||||
|
|
||||||
public void FetchNewMessages(APIAccess api)
|
|
||||||
{
|
|
||||||
if (fetchReq != null) return;
|
|
||||||
|
|
||||||
fetchReq = new GetMessagesRequest(careChannels, lastMessageId);
|
|
||||||
fetchReq.Success += delegate (List<Message> messages)
|
|
||||||
{
|
|
||||||
foreach (Message m in messages)
|
|
||||||
{
|
|
||||||
careChannels.Find(c => c.Id == m.ChannelId).AddNewMessages(m);
|
|
||||||
}
|
|
||||||
|
|
||||||
lastMessageId = messages.LastOrDefault()?.Id ?? lastMessageId;
|
|
||||||
|
|
||||||
Debug.Write("success!");
|
|
||||||
fetchReq = null;
|
|
||||||
};
|
|
||||||
fetchReq.Failure += delegate
|
|
||||||
{
|
|
||||||
Debug.Write("failure!");
|
|
||||||
fetchReq = null;
|
|
||||||
};
|
|
||||||
|
|
||||||
api.Queue(fetchReq);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
80
osu.Desktop.VisualTests/Tests/TestCaseDialogOverlay.cs
Normal file
80
osu.Desktop.VisualTests/Tests/TestCaseDialogOverlay.cs
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
// 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.Screens.Testing;
|
||||||
|
using osu.Game.Graphics;
|
||||||
|
using osu.Game.Overlays;
|
||||||
|
using osu.Game.Overlays.Dialog;
|
||||||
|
|
||||||
|
namespace osu.Desktop.VisualTests.Tests
|
||||||
|
{
|
||||||
|
class TestCaseDialogOverlay : TestCase
|
||||||
|
{
|
||||||
|
public override string Name => @"Dialog Overlay";
|
||||||
|
public override string Description => @"Display dialogs";
|
||||||
|
|
||||||
|
DialogOverlay overlay;
|
||||||
|
|
||||||
|
public override void Reset()
|
||||||
|
{
|
||||||
|
base.Reset();
|
||||||
|
|
||||||
|
Add(overlay = new DialogOverlay());
|
||||||
|
|
||||||
|
AddButton("dialog #1", () => overlay.Push(new PopupDialog
|
||||||
|
{
|
||||||
|
Icon = FontAwesome.fa_trash_o,
|
||||||
|
HeaderText = @"Confirm deletion of",
|
||||||
|
BodyText = @"Ayase Rie - Yuima-ru*World TVver.",
|
||||||
|
Buttons = new PopupDialogButton[]
|
||||||
|
{
|
||||||
|
new PopupDialogOkButton
|
||||||
|
{
|
||||||
|
Text = @"I never want to see this again.",
|
||||||
|
Action = () => System.Console.WriteLine(@"OK"),
|
||||||
|
},
|
||||||
|
new PopupDialogCancelButton
|
||||||
|
{
|
||||||
|
Text = @"Firetruck, I still want quick ranks!",
|
||||||
|
Action = () => System.Console.WriteLine(@"Cancel"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
|
||||||
|
AddButton("dialog #2", () => overlay.Push(new PopupDialog
|
||||||
|
{
|
||||||
|
Icon = FontAwesome.fa_gear,
|
||||||
|
HeaderText = @"What do you want to do with",
|
||||||
|
BodyText = "Camellia as \"Bang Riot\" - Blastix Riotz",
|
||||||
|
Buttons = new PopupDialogButton[]
|
||||||
|
{
|
||||||
|
new PopupDialogOkButton
|
||||||
|
{
|
||||||
|
Text = @"Manage collections",
|
||||||
|
},
|
||||||
|
new PopupDialogOkButton
|
||||||
|
{
|
||||||
|
Text = @"Delete...",
|
||||||
|
},
|
||||||
|
new PopupDialogOkButton
|
||||||
|
{
|
||||||
|
Text = @"Remove from unplayed",
|
||||||
|
},
|
||||||
|
new PopupDialogOkButton
|
||||||
|
{
|
||||||
|
Text = @"Clear local scores",
|
||||||
|
},
|
||||||
|
new PopupDialogOkButton
|
||||||
|
{
|
||||||
|
Text = @"Edit",
|
||||||
|
},
|
||||||
|
new PopupDialogCancelButton
|
||||||
|
{
|
||||||
|
Text = @"Cancel",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,21 +1,18 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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 System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using osu.Framework.GameModes.Testing;
|
using osu.Framework.Screens.Testing;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.MathUtils;
|
using osu.Framework.MathUtils;
|
||||||
using osu.Framework.Timing;
|
using osu.Framework.Timing;
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
using osu.Game.Modes.Catch;
|
|
||||||
using osu.Game.Modes.Catch.UI;
|
using osu.Game.Modes.Catch.UI;
|
||||||
using osu.Game.Modes.Mania;
|
|
||||||
using osu.Game.Modes.Mania.UI;
|
using osu.Game.Modes.Mania.UI;
|
||||||
using osu.Game.Modes.Objects;
|
using osu.Game.Modes.Objects;
|
||||||
using osu.Game.Modes.Osu;
|
|
||||||
using osu.Game.Modes.Osu.Objects;
|
using osu.Game.Modes.Osu.Objects;
|
||||||
using osu.Game.Modes.Osu.UI;
|
using osu.Game.Modes.Osu.UI;
|
||||||
using osu.Game.Modes.Taiko;
|
|
||||||
using osu.Game.Modes.Taiko.UI;
|
using osu.Game.Modes.Taiko.UI;
|
||||||
using OpenTK;
|
using OpenTK;
|
||||||
|
|
||||||
@ -31,9 +28,6 @@ namespace osu.Desktop.VisualTests.Tests
|
|||||||
{
|
{
|
||||||
base.Reset();
|
base.Reset();
|
||||||
|
|
||||||
//ensure we are at offset 0
|
|
||||||
Clock = new FramedClock();
|
|
||||||
|
|
||||||
List<HitObject> objects = new List<HitObject>();
|
List<HitObject> objects = new List<HitObject>();
|
||||||
|
|
||||||
int time = 500;
|
int time = 500;
|
||||||
@ -55,35 +49,44 @@ namespace osu.Desktop.VisualTests.Tests
|
|||||||
};
|
};
|
||||||
|
|
||||||
Add(new Drawable[]
|
Add(new Drawable[]
|
||||||
|
{
|
||||||
|
new Container
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.Both,
|
||||||
|
//ensure we are at offset 0
|
||||||
|
Clock = new FramedClock(),
|
||||||
|
Children = new Drawable[]
|
||||||
{
|
{
|
||||||
new OsuHitRenderer
|
new OsuHitRenderer
|
||||||
{
|
{
|
||||||
Objects = beatmap.HitObjects,
|
Beatmap = beatmap,
|
||||||
Scale = new Vector2(0.5f),
|
Scale = new Vector2(0.5f),
|
||||||
Anchor = Anchor.TopLeft,
|
Anchor = Anchor.TopLeft,
|
||||||
Origin = Anchor.TopLeft
|
Origin = Anchor.TopLeft
|
||||||
},
|
},
|
||||||
new TaikoHitRenderer
|
new TaikoHitRenderer
|
||||||
{
|
{
|
||||||
Objects = beatmap.HitObjects,
|
Beatmap = beatmap,
|
||||||
Scale = new Vector2(0.5f),
|
Scale = new Vector2(0.5f),
|
||||||
Anchor = Anchor.TopRight,
|
Anchor = Anchor.TopRight,
|
||||||
Origin = Anchor.TopRight
|
Origin = Anchor.TopRight
|
||||||
},
|
},
|
||||||
new CatchHitRenderer
|
new CatchHitRenderer
|
||||||
{
|
{
|
||||||
Objects = beatmap.HitObjects,
|
Beatmap = beatmap,
|
||||||
Scale = new Vector2(0.5f),
|
Scale = new Vector2(0.5f),
|
||||||
Anchor = Anchor.BottomLeft,
|
Anchor = Anchor.BottomLeft,
|
||||||
Origin = Anchor.BottomLeft
|
Origin = Anchor.BottomLeft
|
||||||
},
|
},
|
||||||
new ManiaHitRenderer
|
new ManiaHitRenderer
|
||||||
{
|
{
|
||||||
Objects = beatmap.HitObjects,
|
Beatmap = beatmap,
|
||||||
Scale = new Vector2(0.5f),
|
Scale = new Vector2(0.5f),
|
||||||
Anchor = Anchor.BottomRight,
|
Anchor = Anchor.BottomRight,
|
||||||
Origin = Anchor.BottomRight
|
Origin = Anchor.BottomRight
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,18 +1,19 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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;
|
using System.Collections.Generic;
|
||||||
using osu.Framework.GameModes.Testing;
|
using osu.Framework.Screens.Testing;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Timing;
|
using osu.Framework.Timing;
|
||||||
using OpenTK;
|
using OpenTK;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Configuration;
|
||||||
using osu.Game.Modes.Objects;
|
|
||||||
using osu.Game.Modes.Objects.Drawables;
|
using osu.Game.Modes.Objects.Drawables;
|
||||||
using osu.Game.Modes.Osu.Objects;
|
using osu.Game.Modes.Osu.Objects;
|
||||||
using osu.Game.Modes.Osu.Objects.Drawables;
|
using osu.Game.Modes.Osu.Objects.Drawables;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Game.Modes;
|
using osu.Framework.Graphics.Sprites;
|
||||||
|
using osu.Framework.Graphics.UserInterface;
|
||||||
|
using OpenTK.Graphics;
|
||||||
|
|
||||||
namespace osu.Desktop.VisualTests.Tests
|
namespace osu.Desktop.VisualTests.Tests
|
||||||
{
|
{
|
||||||
@ -20,44 +21,125 @@ namespace osu.Desktop.VisualTests.Tests
|
|||||||
{
|
{
|
||||||
public override string Name => @"Hit Objects";
|
public override string Name => @"Hit Objects";
|
||||||
|
|
||||||
|
private StopwatchClock rateAdjustClock;
|
||||||
|
private FramedClock framedClock;
|
||||||
|
|
||||||
|
bool auto = false;
|
||||||
|
|
||||||
public TestCaseHitObjects()
|
public TestCaseHitObjects()
|
||||||
{
|
{
|
||||||
var swClock = new StopwatchClock(true) { Rate = 0.2f };
|
rateAdjustClock = new StopwatchClock(true);
|
||||||
Clock = new FramedClock(swClock);
|
framedClock = new FramedClock(rateAdjustClock);
|
||||||
|
playbackSpeed.ValueChanged += delegate { rateAdjustClock.Rate = playbackSpeed.Value; };
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Reset()
|
HitObjectType mode = HitObjectType.Slider;
|
||||||
|
|
||||||
|
BindableNumber<double> playbackSpeed = new BindableDouble(0.5) { MinValue = 0, MaxValue = 1 };
|
||||||
|
private Container playfieldContainer;
|
||||||
|
private Container approachContainer;
|
||||||
|
|
||||||
|
private void load(HitObjectType mode)
|
||||||
{
|
{
|
||||||
base.Reset();
|
this.mode = mode;
|
||||||
|
|
||||||
Clock.ProcessFrame();
|
|
||||||
|
|
||||||
Container approachContainer = new Container { Depth = float.MinValue, };
|
|
||||||
|
|
||||||
Add(approachContainer);
|
|
||||||
|
|
||||||
|
switch (mode)
|
||||||
|
{
|
||||||
|
case HitObjectType.Circle:
|
||||||
const int count = 10;
|
const int count = 10;
|
||||||
|
|
||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
var h = new HitCircle
|
var h = new HitCircle
|
||||||
{
|
{
|
||||||
StartTime = Clock.CurrentTime + 600 + i * 80,
|
StartTime = framedClock.CurrentTime + 600 + i * 80,
|
||||||
Position = new Vector2((i - count / 2) * 14),
|
Position = new Vector2((i - count / 2) * 14),
|
||||||
};
|
};
|
||||||
|
|
||||||
DrawableHitCircle d = new DrawableHitCircle(h)
|
add(new DrawableHitCircle(h));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HitObjectType.Slider:
|
||||||
|
add(new DrawableSlider(new Slider
|
||||||
{
|
{
|
||||||
Anchor = Anchor.Centre,
|
StartTime = framedClock.CurrentTime + 600,
|
||||||
Depth = i,
|
ControlPoints = new List<Vector2>()
|
||||||
State = ArmedState.Hit,
|
{
|
||||||
Judgement = new OsuJudgementInfo { Result = HitResult.Hit }
|
new Vector2(-200, 0),
|
||||||
|
new Vector2(400, 0),
|
||||||
|
},
|
||||||
|
Length = 400,
|
||||||
|
Position = new Vector2(-200, 0),
|
||||||
|
Velocity = 1,
|
||||||
|
TickDistance = 100,
|
||||||
|
}));
|
||||||
|
break;
|
||||||
|
case HitObjectType.Spinner:
|
||||||
|
add(new DrawableSpinner(new Spinner
|
||||||
|
{
|
||||||
|
StartTime = framedClock.CurrentTime + 600,
|
||||||
|
Length = 1000,
|
||||||
|
Position = new Vector2(0, 0),
|
||||||
|
}));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Reset()
|
||||||
|
{
|
||||||
|
base.Reset();
|
||||||
|
|
||||||
|
playbackSpeed.TriggerChange();
|
||||||
|
|
||||||
|
AddButton(@"circles", () => load(HitObjectType.Circle));
|
||||||
|
AddButton(@"slider", () => load(HitObjectType.Slider));
|
||||||
|
AddButton(@"spinner", () => load(HitObjectType.Spinner));
|
||||||
|
|
||||||
|
AddToggle(@"auto", (state) => { auto = state; load(mode); });
|
||||||
|
|
||||||
|
ButtonsContainer.Add(new SpriteText { Text = "Playback Speed" });
|
||||||
|
ButtonsContainer.Add(new BasicSliderBar<double>
|
||||||
|
{
|
||||||
|
Width = 150,
|
||||||
|
Height = 10,
|
||||||
|
SelectionColor = Color4.Orange,
|
||||||
|
Bindable = playbackSpeed
|
||||||
|
});
|
||||||
|
|
||||||
|
framedClock.ProcessFrame();
|
||||||
|
|
||||||
|
var clockAdjustContainer = new Container
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.Both,
|
||||||
|
Clock = framedClock,
|
||||||
|
Children = new[]
|
||||||
|
{
|
||||||
|
playfieldContainer = new Container { RelativeSizeAxes = Axes.Both },
|
||||||
|
approachContainer = new Container { RelativeSizeAxes = Axes.Both }
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Add(clockAdjustContainer);
|
||||||
|
|
||||||
approachContainer.Add(d.ApproachCircle.CreateProxy());
|
load(mode);
|
||||||
Add(d);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int depth;
|
||||||
|
void add(DrawableHitObject h)
|
||||||
|
{
|
||||||
|
h.Anchor = Anchor.Centre;
|
||||||
|
h.Depth = depth++;
|
||||||
|
|
||||||
|
if (auto)
|
||||||
|
{
|
||||||
|
h.State = ArmedState.Hit;
|
||||||
|
h.Judgement = new OsuJudgementInfo { Result = HitResult.Hit };
|
||||||
|
}
|
||||||
|
|
||||||
|
playfieldContainer.Add(h);
|
||||||
|
var proxyable = h as IDrawableHitObjectWithProxiedApproach;
|
||||||
|
if (proxyable != null)
|
||||||
|
approachContainer.Add(proxyable.ProxiedLayer.CreateProxy());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,18 +1,16 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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.GameModes.Testing;
|
using osu.Framework.Screens.Testing;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Game.Graphics.UserInterface;
|
|
||||||
using OpenTK.Input;
|
using OpenTK.Input;
|
||||||
using osu.Framework.Graphics.Containers;
|
|
||||||
using osu.Framework.Graphics.UserInterface;
|
using osu.Framework.Graphics.UserInterface;
|
||||||
using osu.Framework.Configuration;
|
using osu.Framework.Configuration;
|
||||||
using OpenTK;
|
using OpenTK;
|
||||||
using OpenTK.Graphics;
|
using OpenTK.Graphics;
|
||||||
using osu.Framework.MathUtils;
|
using osu.Framework.MathUtils;
|
||||||
using osu.Framework.Graphics.Sprites;
|
using osu.Framework.Graphics.Sprites;
|
||||||
using osu.Framework.Graphics.Transformations;
|
using osu.Framework.Graphics.Transforms;
|
||||||
using osu.Game.Screens.Play;
|
using osu.Game.Screens.Play;
|
||||||
|
|
||||||
namespace osu.Desktop.VisualTests.Tests
|
namespace osu.Desktop.VisualTests.Tests
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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.GameModes.Testing;
|
using osu.Framework.Screens.Testing;
|
||||||
using osu.Framework.Graphics.Colour;
|
using osu.Framework.Graphics.Colour;
|
||||||
using osu.Framework.Graphics.Sprites;
|
using osu.Framework.Graphics.Sprites;
|
||||||
using osu.Game.Screens.Menu;
|
using osu.Game.Screens.Menu;
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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.GameModes.Testing;
|
using osu.Framework.Screens.Testing;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Timing;
|
using osu.Framework.Timing;
|
||||||
using osu.Game.Overlays;
|
using osu.Game.Overlays;
|
||||||
|
using osu.Framework.Graphics.Containers;
|
||||||
|
|
||||||
namespace osu.Desktop.VisualTests.Tests
|
namespace osu.Desktop.VisualTests.Tests
|
||||||
{
|
{
|
||||||
@ -13,7 +14,7 @@ namespace osu.Desktop.VisualTests.Tests
|
|||||||
public override string Name => @"Music Controller";
|
public override string Name => @"Music Controller";
|
||||||
public override string Description => @"Tests music controller ui.";
|
public override string Description => @"Tests music controller ui.";
|
||||||
|
|
||||||
protected MusicController mc;
|
private MusicController mc;
|
||||||
|
|
||||||
public TestCaseMusicController()
|
public TestCaseMusicController()
|
||||||
{
|
{
|
||||||
@ -30,7 +31,7 @@ namespace osu.Desktop.VisualTests.Tests
|
|||||||
Anchor = Anchor.Centre
|
Anchor = Anchor.Centre
|
||||||
};
|
};
|
||||||
Add(mc);
|
Add(mc);
|
||||||
AddToggle(@"Show", mc.ToggleVisibility);
|
AddToggle(@"Show", (state) => mc.State = state ? Visibility.Visible : Visibility.Hidden);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
118
osu.Desktop.VisualTests/Tests/TestCaseNotificationManager.cs
Normal file
118
osu.Desktop.VisualTests/Tests/TestCaseNotificationManager.cs
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
// 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.Collections.Generic;
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Screens.Testing;
|
||||||
|
using osu.Framework.MathUtils;
|
||||||
|
using osu.Game.Overlays;
|
||||||
|
using System.Linq;
|
||||||
|
using osu.Game.Overlays.Notifications;
|
||||||
|
using osu.Framework.Graphics.Containers;
|
||||||
|
|
||||||
|
namespace osu.Desktop.VisualTests.Tests
|
||||||
|
{
|
||||||
|
class TestCaseNotificationManager : TestCase
|
||||||
|
{
|
||||||
|
public override string Name => @"Notification Manager";
|
||||||
|
public override string Description => @"I handle notifications";
|
||||||
|
|
||||||
|
NotificationManager manager;
|
||||||
|
|
||||||
|
public override void Reset()
|
||||||
|
{
|
||||||
|
base.Reset();
|
||||||
|
|
||||||
|
progressingNotifications.Clear();
|
||||||
|
|
||||||
|
Content.Add(manager = new NotificationManager
|
||||||
|
{
|
||||||
|
Anchor = Anchor.TopRight,
|
||||||
|
Origin = Anchor.TopRight,
|
||||||
|
});
|
||||||
|
|
||||||
|
AddToggle(@"show", (state) => manager.State = state ? Visibility.Visible : Visibility.Hidden);
|
||||||
|
|
||||||
|
AddButton(@"simple #1", sendNotification1);
|
||||||
|
AddButton(@"simple #2", sendNotification2);
|
||||||
|
AddButton(@"progress #1", sendProgress1);
|
||||||
|
AddButton(@"progress #2", sendProgress2);
|
||||||
|
AddButton(@"barrage", () => sendBarrage());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendBarrage(int remaining = 100)
|
||||||
|
{
|
||||||
|
switch (RNG.Next(0, 4))
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
sendNotification1();
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
sendNotification2();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
sendProgress1();
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
sendProgress2();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (remaining > 0)
|
||||||
|
{
|
||||||
|
Delay(80);
|
||||||
|
Schedule(() => sendBarrage(remaining - 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Update()
|
||||||
|
{
|
||||||
|
base.Update();
|
||||||
|
|
||||||
|
progressingNotifications.RemoveAll(n => n.State == ProgressNotificationState.Completed);
|
||||||
|
|
||||||
|
while (progressingNotifications.Count(n => n.State == ProgressNotificationState.Active) < 3)
|
||||||
|
{
|
||||||
|
var p = progressingNotifications.FirstOrDefault(n => n.IsLoaded && n.State == ProgressNotificationState.Queued);
|
||||||
|
if (p == null)
|
||||||
|
break;
|
||||||
|
|
||||||
|
p.State = ProgressNotificationState.Active;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var n in progressingNotifications.FindAll(n => n.State == ProgressNotificationState.Active))
|
||||||
|
{
|
||||||
|
if (n.Progress < 1)
|
||||||
|
n.Progress += (float)(Time.Elapsed / 2000) * RNG.NextSingle();
|
||||||
|
else
|
||||||
|
n.State = ProgressNotificationState.Completed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendProgress2()
|
||||||
|
{
|
||||||
|
var n = new ProgressNotification { Text = @"Downloading Haitai..." };
|
||||||
|
manager.Post(n);
|
||||||
|
progressingNotifications.Add(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<ProgressNotification> progressingNotifications = new List<ProgressNotification>();
|
||||||
|
|
||||||
|
private void sendProgress1()
|
||||||
|
{
|
||||||
|
var n = new ProgressNotification { Text = @"Uploading to BSS..." };
|
||||||
|
manager.Post(n);
|
||||||
|
progressingNotifications.Add(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendNotification2()
|
||||||
|
{
|
||||||
|
manager.Post(new SimpleNotification { Text = @"You are amazing" });
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendNotification1()
|
||||||
|
{
|
||||||
|
manager.Post(new SimpleNotification { Text = @"Welcome to osu!. Enjoy your stay!" });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,12 +1,8 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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.GameModes.Testing;
|
using osu.Framework.Screens.Testing;
|
||||||
using osu.Framework.Graphics;
|
|
||||||
using osu.Game.Graphics.UserInterface;
|
|
||||||
using OpenTK.Input;
|
|
||||||
using osu.Game.Overlays;
|
using osu.Game.Overlays;
|
||||||
using osu.Framework.Graphics.Containers;
|
|
||||||
|
|
||||||
namespace osu.Desktop.VisualTests.Tests
|
namespace osu.Desktop.VisualTests.Tests
|
||||||
{
|
{
|
||||||
|
@ -1,13 +1,9 @@
|
|||||||
using System;
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
using OpenTK.Graphics;
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
using osu.Framework.Logging;
|
using osu.Framework.Logging;
|
||||||
using osu.Framework.Graphics;
|
|
||||||
using osu.Game.Overlays.Pause;
|
using osu.Game.Overlays.Pause;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Screens.Testing;
|
||||||
using osu.Framework.Graphics.Sprites;
|
|
||||||
using osu.Framework.Graphics.Colour;
|
|
||||||
using osu.Framework.GameModes.Testing;
|
|
||||||
using osu.Framework.Graphics.UserInterface;
|
|
||||||
|
|
||||||
namespace osu.Desktop.VisualTests.Tests
|
namespace osu.Desktop.VisualTests.Tests
|
||||||
{
|
{
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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 System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using osu.Desktop.VisualTests.Platform;
|
using osu.Desktop.VisualTests.Platform;
|
||||||
using osu.Framework.GameModes.Testing;
|
using osu.Framework.Screens.Testing;
|
||||||
|
using osu.Framework.MathUtils;
|
||||||
using osu.Game.Database;
|
using osu.Game.Database;
|
||||||
using osu.Game.Modes;
|
using osu.Game.Modes;
|
||||||
using osu.Game.Screens.Select;
|
using osu.Game.Screens.Select;
|
||||||
@ -14,6 +16,7 @@ namespace osu.Desktop.VisualTests.Tests
|
|||||||
{
|
{
|
||||||
private BeatmapDatabase db, oldDb;
|
private BeatmapDatabase db, oldDb;
|
||||||
private TestStorage storage;
|
private TestStorage storage;
|
||||||
|
private PlaySongSelect songSelect;
|
||||||
|
|
||||||
public override string Name => @"Song Select";
|
public override string Name => @"Song Select";
|
||||||
public override string Description => @"with fake data";
|
public override string Description => @"with fake data";
|
||||||
@ -35,7 +38,13 @@ namespace osu.Desktop.VisualTests.Tests
|
|||||||
|
|
||||||
db.Import(sets);
|
db.Import(sets);
|
||||||
}
|
}
|
||||||
Add(new PlaySongSelect());
|
|
||||||
|
Add(songSelect = new PlaySongSelect());
|
||||||
|
|
||||||
|
AddButton(@"Sort by Artist", delegate { songSelect.Filter.Sort = FilterControl.SortMode.Artist; });
|
||||||
|
AddButton(@"Sort by Title", delegate { songSelect.Filter.Sort = FilterControl.SortMode.Title; });
|
||||||
|
AddButton(@"Sort by Author", delegate { songSelect.Filter.Sort = FilterControl.SortMode.Author; });
|
||||||
|
AddButton(@"Sort by Difficulty", delegate { songSelect.Filter.Sort = FilterControl.SortMode.Difficulty; });
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Dispose(bool isDisposing)
|
protected override void Dispose(bool isDisposing)
|
||||||
@ -59,9 +68,10 @@ namespace osu.Desktop.VisualTests.Tests
|
|||||||
Metadata = new BeatmapMetadata
|
Metadata = new BeatmapMetadata
|
||||||
{
|
{
|
||||||
OnlineBeatmapSetID = 1234 + i,
|
OnlineBeatmapSetID = 1234 + i,
|
||||||
Artist = "MONACA",
|
// Create random metadata, then we can check if sorting works based on these
|
||||||
Title = "Black Song",
|
Artist = "MONACA " + RNG.Next(0, 9),
|
||||||
Author = "Some Guy",
|
Title = "Black Song " + RNG.Next(0, 9),
|
||||||
|
Author = "Some Guy " + RNG.Next(0, 9),
|
||||||
},
|
},
|
||||||
Beatmaps = new List<BeatmapInfo>(new[]
|
Beatmaps = new List<BeatmapInfo>(new[]
|
||||||
{
|
{
|
||||||
|
@ -1,15 +1,14 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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 System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.GameModes.Testing;
|
using osu.Framework.Screens.Testing;
|
||||||
using osu.Framework.MathUtils;
|
|
||||||
using osu.Framework.Timing;
|
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
using osu.Game.Beatmaps.Formats;
|
using osu.Game.Beatmaps.Formats;
|
||||||
using OpenTK;
|
using OpenTK;
|
||||||
using osu.Framework.Graphics.Sprites;
|
using osu.Framework.Graphics.Sprites;
|
||||||
|
using osu.Game.Beatmaps.IO;
|
||||||
using osu.Game.Database;
|
using osu.Game.Database;
|
||||||
using osu.Game.Modes;
|
using osu.Game.Modes;
|
||||||
using osu.Game.Modes.Objects;
|
using osu.Game.Modes.Objects;
|
||||||
@ -60,25 +59,48 @@ namespace osu.Desktop.VisualTests.Tests
|
|||||||
|
|
||||||
Beatmap b = new Beatmap
|
Beatmap b = new Beatmap
|
||||||
{
|
{
|
||||||
HitObjects = objects
|
HitObjects = objects,
|
||||||
|
BeatmapInfo = new BeatmapInfo
|
||||||
|
{
|
||||||
|
Metadata = new BeatmapMetadata
|
||||||
|
{
|
||||||
|
Artist = @"Unknown",
|
||||||
|
Title = @"Sample Beatmap",
|
||||||
|
Author = @"peppy",
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
decoder.Process(b);
|
decoder.Process(b);
|
||||||
|
|
||||||
beatmap = new WorkingBeatmap(b);
|
beatmap = new TestWorkingBeatmap(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
Add(new Box
|
Add(new Box
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Framework.Graphics.Axes.Both,
|
RelativeSizeAxes = Framework.Graphics.Axes.Both,
|
||||||
Colour = Color4.Gray,
|
Colour = Color4.Black,
|
||||||
});
|
});
|
||||||
|
|
||||||
Add(new Player
|
Add(new PlayerLoader(new Player
|
||||||
{
|
{
|
||||||
PreferredPlayMode = PlayMode.Osu,
|
PreferredPlayMode = PlayMode.Osu,
|
||||||
Beatmap = beatmap
|
Beatmap = beatmap
|
||||||
|
})
|
||||||
|
{
|
||||||
|
Beatmap = beatmap
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class TestWorkingBeatmap : WorkingBeatmap
|
||||||
|
{
|
||||||
|
public TestWorkingBeatmap(Beatmap beatmap)
|
||||||
|
: base(beatmap.BeatmapInfo, beatmap.BeatmapInfo.BeatmapSet)
|
||||||
|
{
|
||||||
|
Beatmap = beatmap;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override ArchiveReader GetReader() => null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,23 +1,17 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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 System;
|
using System;
|
||||||
using osu.Framework.GameModes.Testing;
|
using osu.Framework.Screens.Testing;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Sprites;
|
using osu.Framework.Graphics.Sprites;
|
||||||
using osu.Framework.MathUtils;
|
using osu.Framework.MathUtils;
|
||||||
using osu.Game.Graphics.UserInterface;
|
using osu.Game.Graphics.UserInterface;
|
||||||
using osu.Game.Modes;
|
|
||||||
using osu.Game.Modes.Catch;
|
|
||||||
using osu.Game.Modes.Catch.UI;
|
using osu.Game.Modes.Catch.UI;
|
||||||
using osu.Game.Modes.Mania;
|
|
||||||
using osu.Game.Modes.Mania.UI;
|
using osu.Game.Modes.Mania.UI;
|
||||||
using osu.Game.Modes.Osu;
|
|
||||||
using osu.Game.Modes.Osu.UI;
|
using osu.Game.Modes.Osu.UI;
|
||||||
using osu.Game.Modes.Taiko;
|
|
||||||
using osu.Game.Modes.Taiko.UI;
|
using osu.Game.Modes.Taiko.UI;
|
||||||
using osu.Game.Modes.UI;
|
using osu.Game.Modes.UI;
|
||||||
using osu.Game.Screens.Play;
|
|
||||||
using OpenTK;
|
using OpenTK;
|
||||||
using OpenTK.Graphics;
|
using OpenTK.Graphics;
|
||||||
using osu.Framework.Graphics.Primitives;
|
using osu.Framework.Graphics.Primitives;
|
||||||
@ -164,7 +158,7 @@ namespace osu.Desktop.VisualTests.Tests
|
|||||||
|
|
||||||
AddButton(@"Alter stars", delegate
|
AddButton(@"Alter stars", delegate
|
||||||
{
|
{
|
||||||
stars.Count = RNG.NextSingle() * (stars.MaxStars + 1);
|
stars.Count = RNG.NextSingle() * (stars.StarCount + 1);
|
||||||
starsLabel.Text = stars.Count.ToString("0.00");
|
starsLabel.Text = stars.Count.ToString("0.00");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -2,16 +2,12 @@
|
|||||||
// 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 System;
|
using System;
|
||||||
using OpenTK.Graphics;
|
|
||||||
using osu.Game.Screens.Play;
|
|
||||||
using osu.Framework.Graphics;
|
|
||||||
using osu.Framework.GameModes.Testing;
|
|
||||||
using osu.Framework.Graphics.Sprites;
|
|
||||||
using osu.Framework.GameModes.Testing;
|
|
||||||
using osu.Framework.Graphics.Colour;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Screens.Testing;
|
||||||
|
using osu.Game.Screens.Play;
|
||||||
|
|
||||||
namespace osu.Desktop.VisualTests
|
namespace osu.Desktop.VisualTests.Tests
|
||||||
{
|
{
|
||||||
public class TestCaseSongProgress : TestCase
|
public class TestCaseSongProgress : TestCase
|
||||||
{
|
{
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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 System;
|
using System;
|
||||||
using osu.Framework.GameModes.Testing;
|
using osu.Framework.Screens.Testing;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.MathUtils;
|
using osu.Framework.MathUtils;
|
||||||
@ -22,9 +22,9 @@ namespace osu.Desktop.VisualTests.Tests
|
|||||||
{
|
{
|
||||||
base.Reset();
|
base.Reset();
|
||||||
|
|
||||||
FlowContainer flow;
|
FillFlowContainer flow;
|
||||||
|
|
||||||
Add(flow = new FlowContainer()
|
Add(flow = new FillFlowContainer()
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Size = new Vector2(0.5f),
|
Size = new Vector2(0.5f),
|
||||||
|
@ -1,13 +1,9 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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.GameModes.Testing;
|
using osu.Framework.Screens.Testing;
|
||||||
using osu.Framework.Graphics.Colour;
|
|
||||||
using osu.Framework.Graphics.Sprites;
|
|
||||||
using osu.Game.Graphics.UserInterface;
|
using osu.Game.Graphics.UserInterface;
|
||||||
using osu.Game.Screens.Menu;
|
|
||||||
using osu.Game.Screens.Play;
|
using osu.Game.Screens.Play;
|
||||||
using OpenTK.Graphics;
|
|
||||||
|
|
||||||
namespace osu.Desktop.VisualTests.Tests
|
namespace osu.Desktop.VisualTests.Tests
|
||||||
{
|
{
|
||||||
|
@ -1,17 +1,9 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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;
|
using osu.Framework.Screens.Testing;
|
||||||
using osu.Framework.GameModes.Testing;
|
|
||||||
using osu.Framework.Graphics.Cursor;
|
|
||||||
using osu.Game.Database;
|
|
||||||
using osu.Game;
|
using osu.Game;
|
||||||
using osu.Framework.Desktop.Platform;
|
using osu.Game.Screens.Backgrounds;
|
||||||
using System.Reflection;
|
|
||||||
using System.IO;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using SQLiteNetExtensions.Extensions;
|
|
||||||
using osu.Framework.Allocation;
|
|
||||||
|
|
||||||
namespace osu.Desktop.VisualTests
|
namespace osu.Desktop.VisualTests
|
||||||
{
|
{
|
||||||
@ -21,6 +13,8 @@ namespace osu.Desktop.VisualTests
|
|||||||
{
|
{
|
||||||
base.LoadComplete();
|
base.LoadComplete();
|
||||||
|
|
||||||
|
(new BackgroundScreenDefault() { Depth = 10 }).LoadAsync(this, AddInternal);
|
||||||
|
|
||||||
// Have to construct this here, rather than in the constructor, because
|
// Have to construct this here, rather than in the constructor, because
|
||||||
// we depend on some dependencies to be loaded within OsuGameBase.load().
|
// we depend on some dependencies to be loaded within OsuGameBase.load().
|
||||||
Add(new TestBrowser());
|
Add(new TestBrowser());
|
||||||
|
15
osu.Desktop.VisualTests/app.config
Normal file
15
osu.Desktop.VisualTests/app.config
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
-->
|
||||||
|
<configuration>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
</configuration>
|
@ -59,6 +59,7 @@
|
|||||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||||
<RunCodeAnalysis>false</RunCodeAnalysis>
|
<RunCodeAnalysis>false</RunCodeAnalysis>
|
||||||
<Prefer32Bit>false</Prefer32Bit>
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
|
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
<DebugType>none</DebugType>
|
<DebugType>none</DebugType>
|
||||||
@ -73,6 +74,7 @@
|
|||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||||
<Prefer32Bit>false</Prefer32Bit>
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
|
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Win32Resource>
|
<Win32Resource>
|
||||||
@ -80,6 +82,10 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="mscorlib" />
|
<Reference Include="mscorlib" />
|
||||||
|
<Reference Include="OpenTK, Version=2.0.0.0, Culture=neutral, PublicKeyToken=bad199fe84eb3df4, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\ppy.OpenTK.2.0.50727.1340\lib\net45\OpenTK.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
<Reference Include="SQLite.Net, Version=3.1.0.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="SQLite.Net, Version=3.1.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>$(SolutionDir)\packages\SQLite.Net.Core-PCL.3.1.1\lib\portable-win8+net45+wp8+wpa81+MonoAndroid1+MonoTouch1\SQLite.Net.dll</HintPath>
|
<HintPath>$(SolutionDir)\packages\SQLite.Net.Core-PCL.3.1.1\lib\portable-win8+net45+wp8+wpa81+MonoAndroid1+MonoTouch1\SQLite.Net.dll</HintPath>
|
||||||
@ -97,9 +103,6 @@
|
|||||||
<Reference Include="SQLite.Net.Platform.Generic">
|
<Reference Include="SQLite.Net.Platform.Generic">
|
||||||
<HintPath>$(SolutionDir)\packages\SQLite.Net-PCL.3.1.1\lib\net40\SQLite.Net.Platform.Generic.dll</HintPath>
|
<HintPath>$(SolutionDir)\packages\SQLite.Net-PCL.3.1.1\lib\net40\SQLite.Net.Platform.Generic.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="OpenTK">
|
|
||||||
<HintPath>$(SolutionDir)\packages\ppy.OpenTK.2.0.50727.1339\lib\net45\OpenTK.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Drawing" />
|
<Reference Include="System.Drawing" />
|
||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -107,6 +110,7 @@
|
|||||||
<None Include="..\osu.licenseheader">
|
<None Include="..\osu.licenseheader">
|
||||||
<Link>osu.licenseheader</Link>
|
<Link>osu.licenseheader</Link>
|
||||||
</None>
|
</None>
|
||||||
|
<None Include="app.config" />
|
||||||
<None Include="packages.config" />
|
<None Include="packages.config" />
|
||||||
<None Include="OpenTK.dll.config" />
|
<None Include="OpenTK.dll.config" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -172,10 +176,12 @@
|
|||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="Benchmark.cs" />
|
||||||
<Compile Include="Program.cs" />
|
<Compile Include="Program.cs" />
|
||||||
<Compile Include="Tests\TestCaseChatDisplay.cs" />
|
<Compile Include="Tests\TestCaseChatDisplay.cs" />
|
||||||
<Compile Include="Tests\TestCaseGamefield.cs" />
|
<Compile Include="Tests\TestCaseGamefield.cs" />
|
||||||
<Compile Include="Tests\TestCaseMusicController.cs" />
|
<Compile Include="Tests\TestCaseMusicController.cs" />
|
||||||
|
<Compile Include="Tests\TestCaseNotificationManager.cs" />
|
||||||
<Compile Include="Tests\TestCasePlayer.cs" />
|
<Compile Include="Tests\TestCasePlayer.cs" />
|
||||||
<Compile Include="Tests\TestCaseHitObjects.cs" />
|
<Compile Include="Tests\TestCaseHitObjects.cs" />
|
||||||
<Compile Include="Tests\TestCaseKeyCounter.cs" />
|
<Compile Include="Tests\TestCaseKeyCounter.cs" />
|
||||||
@ -189,6 +195,7 @@
|
|||||||
<Compile Include="Tests\TestCaseOptions.cs" />
|
<Compile Include="Tests\TestCaseOptions.cs" />
|
||||||
<Compile Include="Tests\TestCasePauseOverlay.cs" />
|
<Compile Include="Tests\TestCasePauseOverlay.cs" />
|
||||||
<Compile Include="Tests\TestCaseSongProgress.cs" />
|
<Compile Include="Tests\TestCaseSongProgress.cs" />
|
||||||
|
<Compile Include="Tests\TestCaseDialogOverlay.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup />
|
<ItemGroup />
|
||||||
<ItemGroup />
|
<ItemGroup />
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!--
|
<!--
|
||||||
Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
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
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net45" />
|
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net45" />
|
||||||
<package id="ppy.OpenTK" version="2.0.50727.1339" targetFramework="net45" />
|
<package id="ppy.OpenTK" version="2.0.50727.1340" targetFramework="net45" />
|
||||||
<package id="SQLite.Net.Core-PCL" version="3.1.1" targetFramework="net45" />
|
<package id="SQLite.Net.Core-PCL" version="3.1.1" targetFramework="net45" />
|
||||||
<package id="SQLite.Net-PCL" version="3.1.1" targetFramework="net45" />
|
<package id="SQLite.Net-PCL" version="3.1.1" targetFramework="net45" />
|
||||||
<package id="SQLiteNetExtensions" version="1.3.0" targetFramework="net45" />
|
<package id="SQLiteNetExtensions" version="1.3.0" targetFramework="net45" />
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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 System;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using osu.Game.Beatmaps.Formats;
|
using osu.Game.Beatmaps.Formats;
|
||||||
using osu.Game.Beatmaps.IO;
|
using osu.Game.Beatmaps.IO;
|
||||||
@ -20,27 +18,22 @@ namespace osu.Desktop.Beatmaps.IO
|
|||||||
public static void Register() => AddReader<LegacyFilesystemReader>((storage, path) => Directory.Exists(path));
|
public static void Register() => AddReader<LegacyFilesystemReader>((storage, path) => Directory.Exists(path));
|
||||||
|
|
||||||
private string basePath { get; set; }
|
private string basePath { get; set; }
|
||||||
private string[] beatmaps { get; set; }
|
|
||||||
private Beatmap firstMap { get; set; }
|
private Beatmap firstMap { get; set; }
|
||||||
|
|
||||||
public LegacyFilesystemReader(string path)
|
public LegacyFilesystemReader(string path)
|
||||||
{
|
{
|
||||||
basePath = path;
|
basePath = path;
|
||||||
beatmaps = Directory.GetFiles(basePath, @"*.osu").Select(f => Path.GetFileName(f)).ToArray();
|
BeatmapFilenames = Directory.GetFiles(basePath, @"*.osu").Select(f => Path.GetFileName(f)).ToArray();
|
||||||
if (beatmaps.Length == 0)
|
if (BeatmapFilenames.Length == 0)
|
||||||
throw new FileNotFoundException(@"This directory contains no beatmaps");
|
throw new FileNotFoundException(@"This directory contains no beatmaps");
|
||||||
using (var stream = new StreamReader(GetStream(beatmaps[0])))
|
StoryboardFilename = Directory.GetFiles(basePath, @"*.osb").Select(f => Path.GetFileName(f)).FirstOrDefault();
|
||||||
|
using (var stream = new StreamReader(GetStream(BeatmapFilenames[0])))
|
||||||
{
|
{
|
||||||
var decoder = BeatmapDecoder.GetDecoder(stream);
|
var decoder = BeatmapDecoder.GetDecoder(stream);
|
||||||
firstMap = decoder.Decode(stream);
|
firstMap = decoder.Decode(stream);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string[] ReadBeatmaps()
|
|
||||||
{
|
|
||||||
return beatmaps;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override Stream GetStream(string name)
|
public override Stream GetStream(string name)
|
||||||
{
|
{
|
||||||
return File.OpenRead(Path.Combine(basePath, name));
|
return File.OpenRead(Path.Combine(basePath, name));
|
||||||
|
@ -1,30 +1,51 @@
|
|||||||
using osu.Game;
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
using System;
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
using System.Collections.Generic;
|
|
||||||
|
using osu.Game;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using osu.Framework.Platform;
|
using osu.Framework.Platform;
|
||||||
using osu.Framework.Desktop.Platform;
|
using osu.Framework.Desktop.Platform;
|
||||||
using osu.Game.Database;
|
using osu.Desktop.Overlays;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Drawing;
|
||||||
|
using osu.Game.Screens.Menu;
|
||||||
|
|
||||||
namespace osu.Desktop
|
namespace osu.Desktop
|
||||||
{
|
{
|
||||||
class OsuGameDesktop : OsuGame
|
class OsuGameDesktop : OsuGame
|
||||||
{
|
{
|
||||||
|
private VersionManager versionManager;
|
||||||
|
|
||||||
|
public override bool IsDeployedBuild => versionManager.IsDeployedBuild;
|
||||||
|
|
||||||
public OsuGameDesktop(string[] args = null)
|
public OsuGameDesktop(string[] args = null)
|
||||||
: base(args)
|
: base(args)
|
||||||
{
|
{
|
||||||
|
versionManager = new VersionManager { Depth = int.MinValue };
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void SetHost(BasicGameHost host)
|
protected override void LoadComplete()
|
||||||
|
{
|
||||||
|
base.LoadComplete();
|
||||||
|
|
||||||
|
versionManager.LoadAsync(this);
|
||||||
|
ModeChanged += m =>
|
||||||
|
{
|
||||||
|
if (!versionManager.IsAlive && m is Intro)
|
||||||
|
Add(versionManager);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void SetHost(GameHost host)
|
||||||
{
|
{
|
||||||
base.SetHost(host);
|
base.SetHost(host);
|
||||||
var desktopWindow = host.Window as DesktopGameWindow;
|
var desktopWindow = host.Window as DesktopGameWindow;
|
||||||
if (desktopWindow != null)
|
if (desktopWindow != null)
|
||||||
{
|
{
|
||||||
|
desktopWindow.Icon = Icon.ExtractAssociatedIcon(Assembly.GetExecutingAssembly().Location);
|
||||||
|
desktopWindow.Title = @"osu!lazer";
|
||||||
|
|
||||||
desktopWindow.DragEnter += dragEnter;
|
desktopWindow.DragEnter += dragEnter;
|
||||||
desktopWindow.DragDrop += dragDrop;
|
desktopWindow.DragDrop += dragDrop;
|
||||||
}
|
}
|
||||||
@ -35,7 +56,7 @@ namespace osu.Desktop
|
|||||||
// this method will only be executed if e.Effect in dragEnter gets set to something other that None.
|
// this method will only be executed if e.Effect in dragEnter gets set to something other that None.
|
||||||
var dropData = e.Data.GetData(DataFormats.FileDrop) as object[];
|
var dropData = e.Data.GetData(DataFormats.FileDrop) as object[];
|
||||||
var filePaths = dropData.Select(f => f.ToString()).ToArray();
|
var filePaths = dropData.Select(f => f.ToString()).ToArray();
|
||||||
ImportBeatmaps(filePaths);
|
ImportBeatmapsAsync(filePaths);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void dragEnter(DragEventArgs e)
|
private void dragEnter(DragEventArgs e)
|
||||||
|
231
osu.Desktop/Overlays/VersionManager.cs
Normal file
231
osu.Desktop/Overlays/VersionManager.cs
Normal file
@ -0,0 +1,231 @@
|
|||||||
|
// 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.Diagnostics;
|
||||||
|
using osu.Framework.Allocation;
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Colour;
|
||||||
|
using osu.Framework.Graphics.Containers;
|
||||||
|
using osu.Game.Graphics.Sprites;
|
||||||
|
using osu.Game.Overlays;
|
||||||
|
using osu.Game.Overlays.Notifications;
|
||||||
|
using Squirrel;
|
||||||
|
using System.Reflection;
|
||||||
|
using osu.Framework.Graphics.Sprites;
|
||||||
|
using osu.Framework.Graphics.Textures;
|
||||||
|
using osu.Game.Graphics;
|
||||||
|
using OpenTK;
|
||||||
|
using OpenTK.Graphics;
|
||||||
|
using System.Net.Http;
|
||||||
|
|
||||||
|
namespace osu.Desktop.Overlays
|
||||||
|
{
|
||||||
|
public class VersionManager : OverlayContainer
|
||||||
|
{
|
||||||
|
private UpdateManager updateManager;
|
||||||
|
private NotificationManager notificationManager;
|
||||||
|
|
||||||
|
AssemblyName assembly = Assembly.GetEntryAssembly().GetName();
|
||||||
|
|
||||||
|
public bool IsDeployedBuild => assembly.Version.Major > 0;
|
||||||
|
|
||||||
|
protected override bool HideOnEscape => false;
|
||||||
|
|
||||||
|
public override bool HandleInput => false;
|
||||||
|
|
||||||
|
[BackgroundDependencyLoader]
|
||||||
|
private void load(NotificationManager notification, OsuColour colours, TextureStore textures)
|
||||||
|
{
|
||||||
|
notificationManager = notification;
|
||||||
|
|
||||||
|
AutoSizeAxes = Axes.Both;
|
||||||
|
Anchor = Anchor.BottomCentre;
|
||||||
|
Origin = Anchor.BottomCentre;
|
||||||
|
Alpha = 0;
|
||||||
|
|
||||||
|
bool isDebug = false;
|
||||||
|
Debug.Assert(isDebug = true);
|
||||||
|
|
||||||
|
string version;
|
||||||
|
if (!IsDeployedBuild)
|
||||||
|
{
|
||||||
|
version = @"local " + (isDebug ? @"debug" : @"release");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
version = $@"{assembly.Version.Major}.{assembly.Version.Minor}.{assembly.Version.Build}";
|
||||||
|
|
||||||
|
Children = new Drawable[]
|
||||||
|
{
|
||||||
|
new FillFlowContainer
|
||||||
|
{
|
||||||
|
AutoSizeAxes = Axes.Both,
|
||||||
|
Direction = FillDirection.Down,
|
||||||
|
Children = new Drawable[]
|
||||||
|
{
|
||||||
|
new FillFlowContainer
|
||||||
|
{
|
||||||
|
AutoSizeAxes = Axes.Both,
|
||||||
|
Direction = FillDirection.Right,
|
||||||
|
Spacing = new Vector2(5),
|
||||||
|
Anchor = Anchor.TopCentre,
|
||||||
|
Origin = Anchor.TopCentre,
|
||||||
|
Children = new Drawable[]
|
||||||
|
{
|
||||||
|
new OsuSpriteText
|
||||||
|
{
|
||||||
|
Font = @"Exo2.0-Bold",
|
||||||
|
Text = $@"osu!lazer"
|
||||||
|
},
|
||||||
|
new OsuSpriteText
|
||||||
|
{
|
||||||
|
Colour = isDebug ? colours.Red : Color4.White,
|
||||||
|
Text = version
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
new OsuSpriteText
|
||||||
|
{
|
||||||
|
Anchor = Anchor.TopCentre,
|
||||||
|
Origin = Anchor.TopCentre,
|
||||||
|
TextSize = 12,
|
||||||
|
Colour = colours.Yellow,
|
||||||
|
Font = @"Venera",
|
||||||
|
Text = $@"Development Build"
|
||||||
|
},
|
||||||
|
new Sprite
|
||||||
|
{
|
||||||
|
Anchor = Anchor.TopCentre,
|
||||||
|
Origin = Anchor.TopCentre,
|
||||||
|
Texture = textures.Get(@"Menu/dev-build-footer"),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if (IsDeployedBuild)
|
||||||
|
checkForUpdateAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void LoadComplete()
|
||||||
|
{
|
||||||
|
base.LoadComplete();
|
||||||
|
State = Visibility.Visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Dispose(bool isDisposing)
|
||||||
|
{
|
||||||
|
base.Dispose(isDisposing);
|
||||||
|
updateManager?.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void checkForUpdateAsync(bool useDeltaPatching = true, UpdateProgressNotification notification = null)
|
||||||
|
{
|
||||||
|
//should we schedule a retry on completion of this check?
|
||||||
|
bool scheduleRetry = true;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (updateManager == null) updateManager = await UpdateManager.GitHubUpdateManager(@"https://github.com/ppy/osu", @"osulazer", null, null, true);
|
||||||
|
|
||||||
|
var info = await updateManager.CheckForUpdate(!useDeltaPatching);
|
||||||
|
if (info.ReleasesToApply.Count == 0)
|
||||||
|
//no updates available. bail and retry later.
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (notification == null)
|
||||||
|
{
|
||||||
|
notification = new UpdateProgressNotification { State = ProgressNotificationState.Active };
|
||||||
|
Schedule(() => notificationManager.Post(notification));
|
||||||
|
}
|
||||||
|
|
||||||
|
Schedule(() =>
|
||||||
|
{
|
||||||
|
notification.Progress = 0;
|
||||||
|
notification.Text = @"Downloading update...";
|
||||||
|
});
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await updateManager.DownloadReleases(info.ReleasesToApply, p => Schedule(() => notification.Progress = p / 100f));
|
||||||
|
|
||||||
|
Schedule(() =>
|
||||||
|
{
|
||||||
|
notification.Progress = 0;
|
||||||
|
notification.Text = @"Installing update...";
|
||||||
|
});
|
||||||
|
|
||||||
|
await updateManager.ApplyReleases(info, p => Schedule(() => notification.Progress = p / 100f));
|
||||||
|
|
||||||
|
Schedule(() => notification.State = ProgressNotificationState.Completed);
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
if (useDeltaPatching)
|
||||||
|
{
|
||||||
|
//could fail if deltas are unavailable for full update path (https://github.com/Squirrel/Squirrel.Windows/issues/959)
|
||||||
|
//try again without deltas.
|
||||||
|
checkForUpdateAsync(false, notification);
|
||||||
|
scheduleRetry = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (HttpRequestException)
|
||||||
|
{
|
||||||
|
//likely have no internet connection.
|
||||||
|
//we'll ignore this and retry later.
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
if (scheduleRetry)
|
||||||
|
{
|
||||||
|
//check again in 30 minutes.
|
||||||
|
Scheduler.AddDelayed(() => checkForUpdateAsync(), 60000 * 30);
|
||||||
|
if (notification != null)
|
||||||
|
notification.State = ProgressNotificationState.Cancelled;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void PopIn()
|
||||||
|
{
|
||||||
|
FadeIn(1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void PopOut()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
class UpdateProgressNotification : ProgressNotification
|
||||||
|
{
|
||||||
|
protected override Notification CreateCompletionNotification() => new ProgressCompletionNotification(this)
|
||||||
|
{
|
||||||
|
Text = @"Update ready to install. Click to restart!",
|
||||||
|
Activated = () =>
|
||||||
|
{
|
||||||
|
UpdateManager.RestartApp();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
[BackgroundDependencyLoader]
|
||||||
|
private void load(OsuColour colours)
|
||||||
|
{
|
||||||
|
IconContent.Add(new Drawable[]
|
||||||
|
{
|
||||||
|
new Box
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.Both,
|
||||||
|
ColourInfo = ColourInfo.GradientVertical(colours.YellowDark, colours.Yellow)
|
||||||
|
},
|
||||||
|
new TextAwesome
|
||||||
|
{
|
||||||
|
Anchor = Anchor.Centre,
|
||||||
|
Icon = FontAwesome.fa_upload,
|
||||||
|
Colour = Color4.White,
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,16 +1,11 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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 System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
|
||||||
using System.Threading;
|
|
||||||
using osu.Desktop.Beatmaps.IO;
|
using osu.Desktop.Beatmaps.IO;
|
||||||
using osu.Framework;
|
|
||||||
using osu.Framework.Desktop;
|
using osu.Framework.Desktop;
|
||||||
using osu.Framework.Desktop.Platform;
|
using osu.Framework.Desktop.Platform;
|
||||||
using osu.Framework.Platform;
|
|
||||||
using osu.Game;
|
|
||||||
using osu.Game.IPC;
|
using osu.Game.IPC;
|
||||||
using osu.Game.Modes;
|
using osu.Game.Modes;
|
||||||
using osu.Game.Modes.Catch;
|
using osu.Game.Modes.Catch;
|
||||||
@ -40,7 +35,7 @@ namespace osu.Desktop
|
|||||||
foreach (var file in args)
|
foreach (var file in args)
|
||||||
{
|
{
|
||||||
Console.WriteLine(@"Importing {0}", file);
|
Console.WriteLine(@"Importing {0}", file);
|
||||||
if (!importer.Import(Path.GetFullPath(file)).Wait(3000))
|
if (!importer.ImportAsync(Path.GetFullPath(file)).Wait(3000))
|
||||||
throw new TimeoutException(@"IPC took too long to send");
|
throw new TimeoutException(@"IPC took too long to send");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -51,9 +46,7 @@ namespace osu.Desktop
|
|||||||
Ruleset.Register(new ManiaRuleset());
|
Ruleset.Register(new ManiaRuleset());
|
||||||
Ruleset.Register(new CatchRuleset());
|
Ruleset.Register(new CatchRuleset());
|
||||||
|
|
||||||
BaseGame osu = new OsuGameDesktop(args);
|
host.Run(new OsuGameDesktop(args));
|
||||||
host.Add(osu);
|
|
||||||
host.Run();
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
28
osu.Desktop/Properties/AssemblyInfo.cs
Normal file
28
osu.Desktop/Properties/AssemblyInfo.cs
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
// 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.Reflection;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("osu!lazer")]
|
||||||
|
[assembly: AssemblyDescription("click the circles. to the beat.")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("ppy Pty Ltd")]
|
||||||
|
[assembly: AssemblyProduct("osu!lazer")]
|
||||||
|
[assembly: AssemblyCopyright("ppy Pty Ltd 2007-2017")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("55e28cb2-7b6c-4595-8dcc-9871d8aad7e9")]
|
||||||
|
|
||||||
|
[assembly: AssemblyVersion("0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("0.0.0")]
|
19
osu.Desktop/app.config
Normal file
19
osu.Desktop/app.config
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
-->
|
||||||
|
<configuration>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="DeltaCompressionDotNet.MsDelta" publicKeyToken="46b2138a390abf55" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-1.1.0.0" newVersion="1.1.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
</configuration>
|
@ -59,6 +59,7 @@
|
|||||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||||
<RunCodeAnalysis>false</RunCodeAnalysis>
|
<RunCodeAnalysis>false</RunCodeAnalysis>
|
||||||
<Prefer32Bit>false</Prefer32Bit>
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
|
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||||
<Commandlineparameters>
|
<Commandlineparameters>
|
||||||
</Commandlineparameters>
|
</Commandlineparameters>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
@ -75,21 +76,86 @@
|
|||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||||
<Prefer32Bit>false</Prefer32Bit>
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
|
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Win32Resource>osu!.res</Win32Resource>
|
<Win32Resource>
|
||||||
|
</Win32Resource>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<ApplicationIcon>lazer.ico</ApplicationIcon>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<ApplicationManifest>Properties\app.manifest</ApplicationManifest>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Reference Include="DeltaCompressionDotNet, Version=1.1.0.0, Culture=neutral, PublicKeyToken=1d14d6e5194e7f4a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\DeltaCompressionDotNet.1.1.0\lib\net20\DeltaCompressionDotNet.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DeltaCompressionDotNet.MsDelta, Version=1.1.0.0, Culture=neutral, PublicKeyToken=46b2138a390abf55, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\DeltaCompressionDotNet.1.1.0\lib\net20\DeltaCompressionDotNet.MsDelta.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="DeltaCompressionDotNet.PatchApi, Version=1.1.0.0, Culture=neutral, PublicKeyToken=3e8888ee913ed789, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\DeltaCompressionDotNet.1.1.0\lib\net20\DeltaCompressionDotNet.PatchApi.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\squirrel.windows.1.5.2\lib\Net45\ICSharpCode.SharpZipLib.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Mono.Cecil, Version=0.9.6.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\Mono.Cecil.0.9.6.4\lib\net45\Mono.Cecil.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Mono.Cecil.Mdb, Version=0.9.6.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\Mono.Cecil.0.9.6.4\lib\net45\Mono.Cecil.Mdb.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Mono.Cecil.Pdb, Version=0.9.6.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\Mono.Cecil.0.9.6.4\lib\net45\Mono.Cecil.Pdb.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Mono.Cecil.Rocks, Version=0.9.6.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\Mono.Cecil.0.9.6.4\lib\net45\Mono.Cecil.Rocks.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
<Reference Include="mscorlib" />
|
<Reference Include="mscorlib" />
|
||||||
|
<Reference Include="NuGet.Squirrel, Version=3.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\squirrel.windows.1.5.2\lib\Net45\NuGet.Squirrel.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
<Reference Include="OpenTK, Version=2.0.0.0, Culture=neutral, PublicKeyToken=bad199fe84eb3df4" />
|
<Reference Include="OpenTK, Version=2.0.0.0, Culture=neutral, PublicKeyToken=bad199fe84eb3df4" />
|
||||||
|
<Reference Include="Splat, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\Splat.2.0.0\lib\Net45\Splat.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Squirrel, Version=1.5.2.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\squirrel.windows.1.5.2\lib\Net45\Squirrel.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Drawing" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
<Reference Include="System.Net.Http.Extensions, Version=2.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\Microsoft.Net.Http.2.2.29\lib\net45\System.Net.Http.Extensions.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Net.Http.Primitives, Version=4.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>$(SolutionDir)\packages\Microsoft.Net.Http.2.2.29\lib\net45\System.Net.Http.Primitives.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Net.Http.WebRequest" />
|
||||||
<Reference Include="System.Windows.Forms" />
|
<Reference Include="System.Windows.Forms" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="..\osu.licenseheader">
|
<None Include="..\osu.licenseheader">
|
||||||
<Link>osu.licenseheader</Link>
|
<Link>osu.licenseheader</Link>
|
||||||
</None>
|
</None>
|
||||||
|
<None Include="app.config" />
|
||||||
<None Include="osu!.res" />
|
<None Include="osu!.res" />
|
||||||
|
<None Include="packages.config" />
|
||||||
<None Include="Properties\app.manifest" />
|
<None Include="Properties\app.manifest" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@ -155,11 +221,14 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="OsuGameDesktop.cs" />
|
<Compile Include="OsuGameDesktop.cs" />
|
||||||
|
<Compile Include="Overlays\VersionManager.cs" />
|
||||||
<Compile Include="Program.cs" />
|
<Compile Include="Program.cs" />
|
||||||
<Compile Include="Beatmaps\IO\LegacyFilesystemReader.cs" />
|
<Compile Include="Beatmaps\IO\LegacyFilesystemReader.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Content Include="lazer.ico" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup />
|
|
||||||
<ItemGroup />
|
|
||||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
25
osu.Desktop/osu.nuspec
Normal file
25
osu.Desktop/osu.nuspec
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
||||||
|
<metadata>
|
||||||
|
<id>osulazer</id>
|
||||||
|
<version>0.0.0</version>
|
||||||
|
<title>osulazer</title>
|
||||||
|
<authors>ppy Pty Ltd</authors>
|
||||||
|
<owners>Dean Herbert</owners>
|
||||||
|
<projectUrl>https://osu.ppy.sh/</projectUrl>
|
||||||
|
<iconUrl>https://puu.sh/tYyXZ/9a01a5d1b0.ico</iconUrl>
|
||||||
|
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
||||||
|
<description>click the circles. to the beat.</description>
|
||||||
|
<summary>click the circles.</summary>
|
||||||
|
<releaseNotes>testing</releaseNotes>
|
||||||
|
<copyright>Copyright ppy Pty Ltd 2007-2017</copyright>
|
||||||
|
<language>en-AU</language>
|
||||||
|
</metadata>
|
||||||
|
<files>
|
||||||
|
<file src="*.exe" target="lib\net45\" exclude="**vshost**"/>
|
||||||
|
<file src="*.dll" target="lib\net45\"/>
|
||||||
|
<file src="x86\*.dll" target="lib\net45\x86\"/>
|
||||||
|
<file src="x64\*.dll" target="lib\net45\x64\"/>
|
||||||
|
</files>
|
||||||
|
</package>
|
||||||
|
|
12
osu.Desktop/packages.config
Normal file
12
osu.Desktop/packages.config
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
-->
|
||||||
|
<packages>
|
||||||
|
<package id="DeltaCompressionDotNet" version="1.1.0" targetFramework="net45" />
|
||||||
|
<package id="Microsoft.Net.Http" version="2.2.29" targetFramework="net45" />
|
||||||
|
<package id="Mono.Cecil" version="0.9.6.4" targetFramework="net45" />
|
||||||
|
<package id="Splat" version="2.0.0" targetFramework="net45" />
|
||||||
|
<package id="squirrel.windows" version="1.5.2" targetFramework="net45" />
|
||||||
|
</packages>
|
27
osu.Game.Modes.Catch/CatchDifficultyCalculator.cs
Normal file
27
osu.Game.Modes.Catch/CatchDifficultyCalculator.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 osu.Game.Beatmaps;
|
||||||
|
using osu.Game.Modes.Catch.Objects;
|
||||||
|
using osu.Game.Modes.Objects;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace osu.Game.Modes.Catch
|
||||||
|
{
|
||||||
|
public class CatchDifficultyCalculator : DifficultyCalculator<CatchBaseHit>
|
||||||
|
{
|
||||||
|
protected override PlayMode PlayMode => PlayMode.Catch;
|
||||||
|
|
||||||
|
public CatchDifficultyCalculator(Beatmap beatmap) : base(beatmap)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override HitObjectConverter<CatchBaseHit> Converter => new CatchConverter();
|
||||||
|
|
||||||
|
protected override double CalculateInternal(Dictionary<String, String> categoryDifficulty)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,13 +1,12 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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 System.Collections.Generic;
|
|
||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
using osu.Game.Modes.Catch.UI;
|
using osu.Game.Modes.Catch.UI;
|
||||||
using osu.Game.Modes.Objects;
|
using osu.Game.Modes.Objects;
|
||||||
using osu.Game.Modes.Osu.Objects;
|
|
||||||
using osu.Game.Modes.Osu.UI;
|
using osu.Game.Modes.Osu.UI;
|
||||||
using osu.Game.Modes.UI;
|
using osu.Game.Modes.UI;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
|
||||||
namespace osu.Game.Modes.Catch
|
namespace osu.Game.Modes.Catch
|
||||||
{
|
{
|
||||||
@ -15,7 +14,7 @@ namespace osu.Game.Modes.Catch
|
|||||||
{
|
{
|
||||||
public override ScoreOverlay CreateScoreOverlay() => new OsuScoreOverlay();
|
public override ScoreOverlay CreateScoreOverlay() => new OsuScoreOverlay();
|
||||||
|
|
||||||
public override HitRenderer CreateHitRendererWith(List<HitObject> objects) => new CatchHitRenderer { Objects = objects };
|
public override HitRenderer CreateHitRendererWith(Beatmap beatmap) => new CatchHitRenderer { Beatmap = beatmap };
|
||||||
|
|
||||||
protected override PlayMode PlayMode => PlayMode.Catch;
|
protected override PlayMode PlayMode => PlayMode.Catch;
|
||||||
|
|
||||||
@ -23,6 +22,8 @@ namespace osu.Game.Modes.Catch
|
|||||||
|
|
||||||
public override ScoreProcessor CreateScoreProcessor(int hitObjectCount) => null;
|
public override ScoreProcessor CreateScoreProcessor(int hitObjectCount) => null;
|
||||||
|
|
||||||
public override HitObjectParser CreateHitObjectParser() => new OsuHitObjectParser();
|
public override HitObjectParser CreateHitObjectParser() => new NullHitObjectParser();
|
||||||
|
|
||||||
|
public override DifficultyCalculator CreateDifficultyCalculator(Beatmap beatmap) => new CatchDifficultyCalculator(beatmap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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.Game.Modes.Objects;
|
using osu.Game.Modes.Objects;
|
||||||
|
|
||||||
|
@ -1,19 +1,20 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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 System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using osu.Game.Modes.Objects;
|
using osu.Game.Modes.Objects;
|
||||||
using osu.Game.Modes.Osu.Objects;
|
using osu.Game.Modes.Osu.Objects;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
|
||||||
namespace osu.Game.Modes.Catch.Objects
|
namespace osu.Game.Modes.Catch.Objects
|
||||||
{
|
{
|
||||||
class CatchConverter : HitObjectConverter<CatchBaseHit>
|
class CatchConverter : HitObjectConverter<CatchBaseHit>
|
||||||
{
|
{
|
||||||
public override List<CatchBaseHit> Convert(List<HitObject> input)
|
public override List<CatchBaseHit> Convert(Beatmap beatmap)
|
||||||
{
|
{
|
||||||
List<CatchBaseHit> output = new List<CatchBaseHit>();
|
List<CatchBaseHit> output = new List<CatchBaseHit>();
|
||||||
|
|
||||||
foreach (HitObject i in input)
|
foreach (HitObject i in beatmap.HitObjects)
|
||||||
{
|
{
|
||||||
CatchBaseHit h = i as CatchBaseHit;
|
CatchBaseHit h = i as CatchBaseHit;
|
||||||
|
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Sprites;
|
using osu.Framework.Graphics.Sprites;
|
||||||
using osu.Framework.Graphics.Textures;
|
using osu.Framework.Graphics.Textures;
|
||||||
using osu.Framework.Graphics.Transformations;
|
using osu.Framework.Graphics.Transforms;
|
||||||
using OpenTK;
|
using OpenTK;
|
||||||
|
|
||||||
namespace osu.Game.Modes.Catch.Objects.Drawable
|
namespace osu.Game.Modes.Catch.Objects.Drawable
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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
|
||||||
|
|
||||||
namespace osu.Game.Modes.Catch.Objects
|
namespace osu.Game.Modes.Catch.Objects
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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
|
||||||
|
|
||||||
namespace osu.Game.Modes.Catch.Objects
|
namespace osu.Game.Modes.Catch.Objects
|
||||||
{
|
{
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
<!--
|
<!--
|
||||||
Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
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
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<configuration>
|
<configuration>
|
||||||
<dllmap os="linux" dll="opengl32.dll" target="libGL.so.1"/>
|
<dllmap os="linux" dll="opengl32.dll" target="libGL.so.1"/>
|
||||||
<dllmap os="linux" dll="glu32.dll" target="libGLU.so.1"/>
|
<dllmap os="linux" dll="glu32.dll" target="libGLU.so.1"/>
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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 System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
// General Information about an assembly is controlled through the following
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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.Game.Modes.Osu.UI;
|
using osu.Game.Modes.Osu.UI;
|
||||||
using OpenTK.Graphics;
|
using OpenTK.Graphics;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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.Game.Modes.Catch.Objects;
|
using osu.Game.Modes.Catch.Objects;
|
||||||
using osu.Game.Modes.Objects;
|
using osu.Game.Modes.Objects;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Sprites;
|
using osu.Framework.Graphics.Sprites;
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
<DebugType>pdbonly</DebugType>
|
<DebugType>pdbonly</DebugType>
|
||||||
@ -28,10 +29,11 @@
|
|||||||
<DefineConstants>TRACE</DefineConstants>
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="OpenTK, Version=2.0.0.0, Culture=neutral, PublicKeyToken=bad199fe84eb3df4, processorArchitecture=MSIL">
|
<Reference Include="OpenTK, Version=2.0.0.0, Culture=neutral, PublicKeyToken=bad199fe84eb3df4, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\ppy.OpenTK.2.0.50727.1339\lib\net45\OpenTK.dll</HintPath>
|
<HintPath>$(SolutionDir)\packages\ppy.OpenTK.2.0.50727.1340\lib\net45\OpenTK.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
@ -45,6 +47,7 @@
|
|||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="CatchDifficultyCalculator.cs" />
|
||||||
<Compile Include="Objects\CatchBaseHit.cs" />
|
<Compile Include="Objects\CatchBaseHit.cs" />
|
||||||
<Compile Include="Objects\CatchConverter.cs" />
|
<Compile Include="Objects\CatchConverter.cs" />
|
||||||
<Compile Include="Objects\Drawable\DrawableFruit.cs" />
|
<Compile Include="Objects\Drawable\DrawableFruit.cs" />
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!--
|
<!--
|
||||||
Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
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
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<packages>
|
<packages>
|
||||||
<package id="ppy.OpenTK" version="2.0.50727.1339" targetFramework="net45" />
|
<package id="ppy.OpenTK" version="2.0.50727.1340" targetFramework="net45" />
|
||||||
</packages>
|
</packages>
|
30
osu.Game.Modes.Mania/ManiaDifficultyCalculator.cs
Normal file
30
osu.Game.Modes.Mania/ManiaDifficultyCalculator.cs
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
// 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.Game.Beatmaps;
|
||||||
|
using osu.Game.Modes.Mania.Objects;
|
||||||
|
using osu.Game.Modes.Objects;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace osu.Game.Modes.Mania
|
||||||
|
{
|
||||||
|
public class ManiaDifficultyCalculator : DifficultyCalculator<ManiaBaseHit>
|
||||||
|
{
|
||||||
|
protected override PlayMode PlayMode => PlayMode.Mania;
|
||||||
|
|
||||||
|
private int columns;
|
||||||
|
|
||||||
|
public ManiaDifficultyCalculator(Beatmap beatmap, int columns = 5) : base(beatmap)
|
||||||
|
{
|
||||||
|
this.columns = columns;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override HitObjectConverter<ManiaBaseHit> Converter => new ManiaConverter(columns);
|
||||||
|
|
||||||
|
protected override double CalculateInternal(Dictionary<String, String> categoryDifficulty)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,14 +1,12 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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 System.Collections.Generic;
|
|
||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
using osu.Game.Modes.Mania.UI;
|
using osu.Game.Modes.Mania.UI;
|
||||||
using osu.Game.Modes.Objects;
|
using osu.Game.Modes.Objects;
|
||||||
using osu.Game.Modes.Osu;
|
|
||||||
using osu.Game.Modes.Osu.Objects;
|
|
||||||
using osu.Game.Modes.Osu.UI;
|
using osu.Game.Modes.Osu.UI;
|
||||||
using osu.Game.Modes.UI;
|
using osu.Game.Modes.UI;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
|
||||||
namespace osu.Game.Modes.Mania
|
namespace osu.Game.Modes.Mania
|
||||||
{
|
{
|
||||||
@ -16,7 +14,7 @@ namespace osu.Game.Modes.Mania
|
|||||||
{
|
{
|
||||||
public override ScoreOverlay CreateScoreOverlay() => new OsuScoreOverlay();
|
public override ScoreOverlay CreateScoreOverlay() => new OsuScoreOverlay();
|
||||||
|
|
||||||
public override HitRenderer CreateHitRendererWith(List<HitObject> objects) => new ManiaHitRenderer { Objects = objects };
|
public override HitRenderer CreateHitRendererWith(Beatmap beatmap) => new ManiaHitRenderer { Beatmap = beatmap };
|
||||||
|
|
||||||
protected override PlayMode PlayMode => PlayMode.Mania;
|
protected override PlayMode PlayMode => PlayMode.Mania;
|
||||||
|
|
||||||
@ -24,6 +22,8 @@ namespace osu.Game.Modes.Mania
|
|||||||
|
|
||||||
public override ScoreProcessor CreateScoreProcessor(int hitObjectCount) => null;
|
public override ScoreProcessor CreateScoreProcessor(int hitObjectCount) => null;
|
||||||
|
|
||||||
public override HitObjectParser CreateHitObjectParser() => new OsuHitObjectParser();
|
public override HitObjectParser CreateHitObjectParser() => new NullHitObjectParser();
|
||||||
|
|
||||||
|
public override DifficultyCalculator CreateDifficultyCalculator(Beatmap beatmap) => new ManiaDifficultyCalculator(beatmap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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.Graphics.Sprites;
|
using osu.Framework.Graphics.Sprites;
|
||||||
using osu.Framework.Graphics.Textures;
|
using osu.Framework.Graphics.Textures;
|
||||||
using osu.Framework.Graphics.Transformations;
|
using osu.Framework.Graphics.Transforms;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using OpenTK;
|
using OpenTK;
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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
|
||||||
|
|
||||||
namespace osu.Game.Modes.Mania.Objects
|
namespace osu.Game.Modes.Mania.Objects
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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.Game.Modes.Objects;
|
using osu.Game.Modes.Objects;
|
||||||
|
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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 System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using osu.Game.Modes.Objects;
|
using osu.Game.Modes.Objects;
|
||||||
using osu.Game.Modes.Osu.Objects;
|
using osu.Game.Modes.Osu.Objects;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
|
||||||
namespace osu.Game.Modes.Mania.Objects
|
namespace osu.Game.Modes.Mania.Objects
|
||||||
{
|
{
|
||||||
@ -17,11 +18,11 @@ namespace osu.Game.Modes.Mania.Objects
|
|||||||
this.columns = columns;
|
this.columns = columns;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override List<ManiaBaseHit> Convert(List<HitObject> input)
|
public override List<ManiaBaseHit> Convert(Beatmap beatmap)
|
||||||
{
|
{
|
||||||
List<ManiaBaseHit> output = new List<ManiaBaseHit>();
|
List<ManiaBaseHit> output = new List<ManiaBaseHit>();
|
||||||
|
|
||||||
foreach (HitObject i in input)
|
foreach (HitObject i in beatmap.HitObjects)
|
||||||
{
|
{
|
||||||
ManiaBaseHit h = i as ManiaBaseHit;
|
ManiaBaseHit h = i as ManiaBaseHit;
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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
|
||||||
|
|
||||||
namespace osu.Game.Modes.Mania.Objects
|
namespace osu.Game.Modes.Mania.Objects
|
||||||
{
|
{
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
<!--
|
<!--
|
||||||
Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
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
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<configuration>
|
<configuration>
|
||||||
<dllmap os="linux" dll="opengl32.dll" target="libGL.so.1"/>
|
<dllmap os="linux" dll="opengl32.dll" target="libGL.so.1"/>
|
||||||
<dllmap os="linux" dll="glu32.dll" target="libGLU.so.1"/>
|
<dllmap os="linux" dll="glu32.dll" target="libGLU.so.1"/>
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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 System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
// General Information about an assembly is controlled through the following
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Transformations;
|
using osu.Framework.Graphics.Transforms;
|
||||||
using osu.Game.Modes.Taiko.UI;
|
using osu.Game.Modes.Taiko.UI;
|
||||||
using OpenTK.Graphics;
|
using OpenTK.Graphics;
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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.Game.Modes.Mania.Objects;
|
using osu.Game.Modes.Mania.Objects;
|
||||||
using osu.Game.Modes.Objects;
|
using osu.Game.Modes.Objects;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Sprites;
|
using osu.Framework.Graphics.Sprites;
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!--
|
<!--
|
||||||
Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
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
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<configuration>
|
<configuration>
|
||||||
<runtime>
|
<runtime>
|
||||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
<DebugType>pdbonly</DebugType>
|
<DebugType>pdbonly</DebugType>
|
||||||
@ -28,10 +29,11 @@
|
|||||||
<DefineConstants>TRACE</DefineConstants>
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="OpenTK, Version=2.0.0.0, Culture=neutral, PublicKeyToken=bad199fe84eb3df4, processorArchitecture=MSIL">
|
<Reference Include="OpenTK, Version=2.0.0.0, Culture=neutral, PublicKeyToken=bad199fe84eb3df4, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\ppy.OpenTK.2.0.50727.1339\lib\net45\OpenTK.dll</HintPath>
|
<HintPath>$(SolutionDir)\packages\ppy.OpenTK.2.0.50727.1340\lib\net45\OpenTK.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
@ -45,6 +47,7 @@
|
|||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="ManiaDifficultyCalculator.cs" />
|
||||||
<Compile Include="Objects\Drawable\DrawableNote.cs" />
|
<Compile Include="Objects\Drawable\DrawableNote.cs" />
|
||||||
<Compile Include="Objects\HoldNote.cs" />
|
<Compile Include="Objects\HoldNote.cs" />
|
||||||
<Compile Include="Objects\ManiaBaseHit.cs" />
|
<Compile Include="Objects\ManiaBaseHit.cs" />
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!--
|
<!--
|
||||||
Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
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
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<packages>
|
<packages>
|
||||||
<package id="ppy.OpenTK" version="2.0.50727.1339" targetFramework="net45" />
|
<package id="ppy.OpenTK" version="2.0.50727.1340" targetFramework="net45" />
|
||||||
</packages>
|
</packages>
|
@ -1,5 +1,5 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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 System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using OpenTK;
|
using OpenTK;
|
||||||
@ -13,8 +13,8 @@ namespace osu.Game.Modes.Osu.Objects
|
|||||||
private Vector2[] subdivisionBuffer1;
|
private Vector2[] subdivisionBuffer1;
|
||||||
private Vector2[] subdivisionBuffer2;
|
private Vector2[] subdivisionBuffer2;
|
||||||
|
|
||||||
private const float TOLERANCE = 0.25f;
|
private const float tolerance = 0.25f;
|
||||||
private const float TOLERANCE_SQ = TOLERANCE * TOLERANCE;
|
private const float tolerance_sq = tolerance * tolerance;
|
||||||
|
|
||||||
public BezierApproximator(List<Vector2> controlPoints)
|
public BezierApproximator(List<Vector2> controlPoints)
|
||||||
{
|
{
|
||||||
@ -33,10 +33,10 @@ namespace osu.Game.Modes.Osu.Objects
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="controlPoints">The control points to check for flatness.</param>
|
/// <param name="controlPoints">The control points to check for flatness.</param>
|
||||||
/// <returns>Whether the control points are flat enough.</returns>
|
/// <returns>Whether the control points are flat enough.</returns>
|
||||||
private static bool IsFlatEnough(Vector2[] controlPoints)
|
private static bool isFlatEnough(Vector2[] controlPoints)
|
||||||
{
|
{
|
||||||
for (int i = 1; i < controlPoints.Length - 1; i++)
|
for (int i = 1; i < controlPoints.Length - 1; i++)
|
||||||
if ((controlPoints[i - 1] - 2 * controlPoints[i] + controlPoints[i + 1]).LengthSquared > TOLERANCE_SQ * 4)
|
if ((controlPoints[i - 1] - 2 * controlPoints[i] + controlPoints[i + 1]).LengthSquared > tolerance_sq * 4)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -50,7 +50,7 @@ namespace osu.Game.Modes.Osu.Objects
|
|||||||
/// <param name="controlPoints">The control points to split.</param>
|
/// <param name="controlPoints">The control points to split.</param>
|
||||||
/// <param name="l">Output: The control points corresponding to the left half of the curve.</param>
|
/// <param name="l">Output: The control points corresponding to the left half of the curve.</param>
|
||||||
/// <param name="r">Output: The control points corresponding to the right half of the curve.</param>
|
/// <param name="r">Output: The control points corresponding to the right half of the curve.</param>
|
||||||
private void Subdivide(Vector2[] controlPoints, Vector2[] l, Vector2[] r)
|
private void subdivide(Vector2[] controlPoints, Vector2[] l, Vector2[] r)
|
||||||
{
|
{
|
||||||
Vector2[] midpoints = subdivisionBuffer1;
|
Vector2[] midpoints = subdivisionBuffer1;
|
||||||
|
|
||||||
@ -73,12 +73,12 @@ namespace osu.Game.Modes.Osu.Objects
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="controlPoints">The control points describing the bezier curve to be approximated.</param>
|
/// <param name="controlPoints">The control points describing the bezier curve to be approximated.</param>
|
||||||
/// <param name="output">The points representing the resulting piecewise-linear approximation.</param>
|
/// <param name="output">The points representing the resulting piecewise-linear approximation.</param>
|
||||||
private void Approximate(Vector2[] controlPoints, List<Vector2> output)
|
private void approximate(Vector2[] controlPoints, List<Vector2> output)
|
||||||
{
|
{
|
||||||
Vector2[] l = subdivisionBuffer2;
|
Vector2[] l = subdivisionBuffer2;
|
||||||
Vector2[] r = subdivisionBuffer1;
|
Vector2[] r = subdivisionBuffer1;
|
||||||
|
|
||||||
Subdivide(controlPoints, l, r);
|
subdivide(controlPoints, l, r);
|
||||||
|
|
||||||
for (int i = 0; i < count - 1; ++i)
|
for (int i = 0; i < count - 1; ++i)
|
||||||
l[count + i] = r[i + 1];
|
l[count + i] = r[i + 1];
|
||||||
@ -119,13 +119,13 @@ namespace osu.Game.Modes.Osu.Objects
|
|||||||
while (toFlatten.Count > 0)
|
while (toFlatten.Count > 0)
|
||||||
{
|
{
|
||||||
Vector2[] parent = toFlatten.Pop();
|
Vector2[] parent = toFlatten.Pop();
|
||||||
if (IsFlatEnough(parent))
|
if (isFlatEnough(parent))
|
||||||
{
|
{
|
||||||
// If the control points we currently operate on are sufficiently "flat", we use
|
// If the control points we currently operate on are sufficiently "flat", we use
|
||||||
// an extension to De Casteljau's algorithm to obtain a piecewise-linear approximation
|
// an extension to De Casteljau's algorithm to obtain a piecewise-linear approximation
|
||||||
// of the bezier curve represented by our control points, consisting of the same amount
|
// of the bezier curve represented by our control points, consisting of the same amount
|
||||||
// of points as there are control points.
|
// of points as there are control points.
|
||||||
Approximate(parent, output);
|
approximate(parent, output);
|
||||||
freeBuffers.Push(parent);
|
freeBuffers.Push(parent);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -133,7 +133,7 @@ namespace osu.Game.Modes.Osu.Objects
|
|||||||
// If we do not yet have a sufficiently "flat" (in other words, detailed) approximation we keep
|
// If we do not yet have a sufficiently "flat" (in other words, detailed) approximation we keep
|
||||||
// subdividing the curve we are currently operating on.
|
// subdividing the curve we are currently operating on.
|
||||||
Vector2[] rightChild = freeBuffers.Count > 0 ? freeBuffers.Pop() : new Vector2[count];
|
Vector2[] rightChild = freeBuffers.Count > 0 ? freeBuffers.Pop() : new Vector2[count];
|
||||||
Subdivide(parent, leftChild, rightChild);
|
subdivide(parent, leftChild, rightChild);
|
||||||
|
|
||||||
// We re-use the buffer of the parent for one of the children, so that we save one allocation per iteration.
|
// We re-use the buffer of the parent for one of the children, so that we save one allocation per iteration.
|
||||||
for (int i = 0; i < count; ++i)
|
for (int i = 0; i < count; ++i)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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 OpenTK;
|
using OpenTK;
|
||||||
using osu.Framework.MathUtils;
|
using osu.Framework.MathUtils;
|
||||||
@ -10,19 +10,19 @@ namespace osu.Game.Modes.Osu.Objects
|
|||||||
{
|
{
|
||||||
public class CircularArcApproximator
|
public class CircularArcApproximator
|
||||||
{
|
{
|
||||||
private Vector2 A;
|
private Vector2 a;
|
||||||
private Vector2 B;
|
private Vector2 b;
|
||||||
private Vector2 C;
|
private Vector2 c;
|
||||||
|
|
||||||
private int amountPoints;
|
private int amountPoints;
|
||||||
|
|
||||||
private const float TOLERANCE = 0.1f;
|
private const float tolerance = 0.1f;
|
||||||
|
|
||||||
public CircularArcApproximator(Vector2 A, Vector2 B, Vector2 C)
|
public CircularArcApproximator(Vector2 a, Vector2 b, Vector2 c)
|
||||||
{
|
{
|
||||||
this.A = A;
|
this.a = a;
|
||||||
this.B = B;
|
this.b = b;
|
||||||
this.C = C;
|
this.c = c;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -31,9 +31,9 @@ namespace osu.Game.Modes.Osu.Objects
|
|||||||
/// <returns>A list of vectors representing the piecewise-linear approximation.</returns>
|
/// <returns>A list of vectors representing the piecewise-linear approximation.</returns>
|
||||||
public List<Vector2> CreateArc()
|
public List<Vector2> CreateArc()
|
||||||
{
|
{
|
||||||
float aSq = (B - C).LengthSquared;
|
float aSq = (b - c).LengthSquared;
|
||||||
float bSq = (A - C).LengthSquared;
|
float bSq = (a - c).LengthSquared;
|
||||||
float cSq = (A - B).LengthSquared;
|
float cSq = (a - b).LengthSquared;
|
||||||
|
|
||||||
// If we have a degenerate triangle where a side-length is almost zero, then give up and fall
|
// If we have a degenerate triangle where a side-length is almost zero, then give up and fall
|
||||||
// back to a more numerically stable method.
|
// back to a more numerically stable method.
|
||||||
@ -51,9 +51,9 @@ namespace osu.Game.Modes.Osu.Objects
|
|||||||
if (Precision.AlmostEquals(sum, 0))
|
if (Precision.AlmostEquals(sum, 0))
|
||||||
return new List<Vector2>();
|
return new List<Vector2>();
|
||||||
|
|
||||||
Vector2 centre = (s * A + t * B + u * C) / sum;
|
Vector2 centre = (s * a + t * b + u * c) / sum;
|
||||||
Vector2 dA = A - centre;
|
Vector2 dA = a - centre;
|
||||||
Vector2 dC = C - centre;
|
Vector2 dC = c - centre;
|
||||||
|
|
||||||
float r = dA.Length;
|
float r = dA.Length;
|
||||||
|
|
||||||
@ -68,9 +68,9 @@ namespace osu.Game.Modes.Osu.Objects
|
|||||||
|
|
||||||
// Decide in which direction to draw the circle, depending on which side of
|
// Decide in which direction to draw the circle, depending on which side of
|
||||||
// AC B lies.
|
// AC B lies.
|
||||||
Vector2 orthoAC = C - A;
|
Vector2 orthoAtoC = c - a;
|
||||||
orthoAC = new Vector2(orthoAC.Y, -orthoAC.X);
|
orthoAtoC = new Vector2(orthoAtoC.Y, -orthoAtoC.X);
|
||||||
if (Vector2.Dot(orthoAC, B - A) < 0)
|
if (Vector2.Dot(orthoAtoC, b - a) < 0)
|
||||||
{
|
{
|
||||||
dir = -dir;
|
dir = -dir;
|
||||||
thetaRange = 2 * Math.PI - thetaRange;
|
thetaRange = 2 * Math.PI - thetaRange;
|
||||||
@ -79,12 +79,12 @@ namespace osu.Game.Modes.Osu.Objects
|
|||||||
// We select the amount of points for the approximation by requiring the discrete curvature
|
// We select the amount of points for the approximation by requiring the discrete curvature
|
||||||
// to be smaller than the provided tolerance. The exact angle required to meet the tolerance
|
// to be smaller than the provided tolerance. The exact angle required to meet the tolerance
|
||||||
// is: 2 * Math.Acos(1 - TOLERANCE / r)
|
// is: 2 * Math.Acos(1 - TOLERANCE / r)
|
||||||
if (2 * r <= TOLERANCE)
|
if (2 * r <= tolerance)
|
||||||
// This special case is required for extremely short sliders where the radius is smaller than
|
// This special case is required for extremely short sliders where the radius is smaller than
|
||||||
// the tolerance. This is a pathological rather than a realistic case.
|
// the tolerance. This is a pathological rather than a realistic case.
|
||||||
amountPoints = 2;
|
amountPoints = 2;
|
||||||
else
|
else
|
||||||
amountPoints = Math.Max(2, (int)Math.Ceiling(thetaRange / (2 * Math.Acos(1 - TOLERANCE / r))));
|
amountPoints = Math.Max(2, (int)Math.Ceiling(thetaRange / (2 * Math.Acos(1 - tolerance / r))));
|
||||||
|
|
||||||
List<Vector2> output = new List<Vector2>(amountPoints);
|
List<Vector2> output = new List<Vector2>(amountPoints);
|
||||||
|
|
||||||
|
@ -0,0 +1,21 @@
|
|||||||
|
// 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.Containers;
|
||||||
|
using osu.Game.Modes.Objects;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace osu.Game.Modes.Osu.Objects.Drawables.Connections
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Connects hit objects visually, for example with follow points.
|
||||||
|
/// </summary>
|
||||||
|
public abstract class ConnectionRenderer<T> : Container
|
||||||
|
where T : HitObject
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Hit objects to create connections for
|
||||||
|
/// </summary>
|
||||||
|
public abstract IEnumerable<T> HitObjects { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,67 @@
|
|||||||
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
using OpenTK;
|
||||||
|
using OpenTK.Graphics;
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Containers;
|
||||||
|
using osu.Framework.Graphics.Sprites;
|
||||||
|
using osu.Framework.Graphics.Transforms;
|
||||||
|
using osu.Game.Graphics;
|
||||||
|
|
||||||
|
namespace osu.Game.Modes.Osu.Objects.Drawables.Connections
|
||||||
|
{
|
||||||
|
public class FollowPoint : Container
|
||||||
|
{
|
||||||
|
public double StartTime;
|
||||||
|
public double EndTime;
|
||||||
|
public Vector2 EndPosition;
|
||||||
|
|
||||||
|
const float width = 8;
|
||||||
|
|
||||||
|
public FollowPoint()
|
||||||
|
{
|
||||||
|
Origin = Anchor.Centre;
|
||||||
|
Alpha = 0;
|
||||||
|
|
||||||
|
Masking = true;
|
||||||
|
AutoSizeAxes = Axes.Both;
|
||||||
|
CornerRadius = width / 2;
|
||||||
|
EdgeEffect = new EdgeEffect
|
||||||
|
{
|
||||||
|
Type = EdgeEffectType.Glow,
|
||||||
|
Colour = Color4.White.Opacity(0.2f),
|
||||||
|
Radius = 4,
|
||||||
|
};
|
||||||
|
|
||||||
|
Children = new Drawable[]
|
||||||
|
{
|
||||||
|
new Box
|
||||||
|
{
|
||||||
|
Size = new Vector2(width),
|
||||||
|
BlendingMode = BlendingMode.Additive,
|
||||||
|
Origin = Anchor.Centre,
|
||||||
|
Anchor = Anchor.Centre,
|
||||||
|
Alpha = 0.5f,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void LoadComplete()
|
||||||
|
{
|
||||||
|
base.LoadComplete();
|
||||||
|
|
||||||
|
Delay(StartTime);
|
||||||
|
FadeIn(DrawableOsuHitObject.TIME_FADEIN);
|
||||||
|
ScaleTo(1.5f);
|
||||||
|
ScaleTo(1, DrawableOsuHitObject.TIME_FADEIN, EasingTypes.Out);
|
||||||
|
MoveTo(EndPosition, DrawableOsuHitObject.TIME_FADEIN, EasingTypes.Out);
|
||||||
|
|
||||||
|
Delay(EndTime - StartTime);
|
||||||
|
FadeOut(DrawableOsuHitObject.TIME_FADEIN);
|
||||||
|
|
||||||
|
Delay(DrawableOsuHitObject.TIME_FADEIN);
|
||||||
|
Expire(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,97 @@
|
|||||||
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
using OpenTK;
|
||||||
|
using osu.Game.Modes.Osu.Objects.Drawables.Connections;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace osu.Game.Modes.Osu.Objects.Drawables
|
||||||
|
{
|
||||||
|
public class FollowPointRenderer : ConnectionRenderer<OsuHitObject>
|
||||||
|
{
|
||||||
|
private int pointDistance = 32;
|
||||||
|
/// <summary>
|
||||||
|
/// Determines how much space there is between points.
|
||||||
|
/// </summary>
|
||||||
|
public int PointDistance
|
||||||
|
{
|
||||||
|
get { return pointDistance; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (pointDistance == value) return;
|
||||||
|
pointDistance = value;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int preEmpt = 800;
|
||||||
|
/// <summary>
|
||||||
|
/// Follow points to the next hitobject start appearing for this many milliseconds before an hitobject's end time.
|
||||||
|
/// </summary>
|
||||||
|
public int PreEmpt
|
||||||
|
{
|
||||||
|
get { return preEmpt; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (preEmpt == value) return;
|
||||||
|
preEmpt = value;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private IEnumerable<OsuHitObject> hitObjects;
|
||||||
|
public override IEnumerable<OsuHitObject> HitObjects
|
||||||
|
{
|
||||||
|
get { return hitObjects; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
hitObjects = value;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void update()
|
||||||
|
{
|
||||||
|
Clear();
|
||||||
|
if (hitObjects == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
OsuHitObject prevHitObject = null;
|
||||||
|
foreach (var currHitObject in hitObjects)
|
||||||
|
{
|
||||||
|
if (prevHitObject != null && !currHitObject.NewCombo && !(prevHitObject is Spinner) && !(currHitObject is Spinner))
|
||||||
|
{
|
||||||
|
Vector2 startPosition = prevHitObject.EndPosition;
|
||||||
|
Vector2 endPosition = currHitObject.Position;
|
||||||
|
double startTime = prevHitObject.EndTime;
|
||||||
|
double endTime = currHitObject.StartTime;
|
||||||
|
|
||||||
|
Vector2 distanceVector = endPosition - startPosition;
|
||||||
|
int distance = (int)distanceVector.Length;
|
||||||
|
float rotation = (float)Math.Atan2(distanceVector.Y, distanceVector.X);
|
||||||
|
double duration = endTime - startTime;
|
||||||
|
|
||||||
|
for (int d = (int)(PointDistance * 1.5); d < distance - PointDistance; d += PointDistance)
|
||||||
|
{
|
||||||
|
float fraction = ((float)d / distance);
|
||||||
|
Vector2 pointStartPosition = startPosition + (fraction - 0.1f) * distanceVector;
|
||||||
|
Vector2 pointEndPosition = startPosition + fraction * distanceVector;
|
||||||
|
double fadeOutTime = startTime + fraction * duration;
|
||||||
|
double fadeInTime = fadeOutTime - PreEmpt;
|
||||||
|
|
||||||
|
Add(new FollowPoint()
|
||||||
|
{
|
||||||
|
StartTime = fadeInTime,
|
||||||
|
EndTime = fadeOutTime,
|
||||||
|
Position = pointStartPosition,
|
||||||
|
EndPosition = pointEndPosition,
|
||||||
|
Rotation = rotation,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
prevHitObject = currHitObject;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,19 +1,18 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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 System;
|
using System;
|
||||||
using System.ComponentModel;
|
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Transformations;
|
using osu.Framework.Graphics.Transforms;
|
||||||
using osu.Game.Modes.Objects.Drawables;
|
using osu.Game.Modes.Objects.Drawables;
|
||||||
using osu.Game.Modes.Osu.Objects.Drawables.Pieces;
|
using osu.Game.Modes.Osu.Objects.Drawables.Pieces;
|
||||||
using OpenTK;
|
using OpenTK;
|
||||||
|
|
||||||
namespace osu.Game.Modes.Osu.Objects.Drawables
|
namespace osu.Game.Modes.Osu.Objects.Drawables
|
||||||
{
|
{
|
||||||
public class DrawableHitCircle : DrawableOsuHitObject
|
public class DrawableHitCircle : DrawableOsuHitObject, IDrawableHitObjectWithProxiedApproach
|
||||||
{
|
{
|
||||||
private HitCircle osuObject;
|
private OsuHitObject osuObject;
|
||||||
|
|
||||||
public ApproachCircle ApproachCircle;
|
public ApproachCircle ApproachCircle;
|
||||||
private CirclePiece circle;
|
private CirclePiece circle;
|
||||||
@ -23,12 +22,13 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
|
|||||||
private NumberPiece number;
|
private NumberPiece number;
|
||||||
private GlowPiece glow;
|
private GlowPiece glow;
|
||||||
|
|
||||||
public DrawableHitCircle(HitCircle h) : base(h)
|
public DrawableHitCircle(OsuHitObject h) : base(h)
|
||||||
{
|
{
|
||||||
|
Origin = Anchor.Centre;
|
||||||
|
|
||||||
osuObject = h;
|
osuObject = h;
|
||||||
|
|
||||||
Origin = Anchor.Centre;
|
Position = osuObject.StackedPosition;
|
||||||
Position = osuObject.Position;
|
|
||||||
Scale = new Vector2(osuObject.Scale);
|
Scale = new Vector2(osuObject.Scale);
|
||||||
|
|
||||||
Children = new Drawable[]
|
Children = new Drawable[]
|
||||||
@ -49,7 +49,10 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
|
|||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
number = new NumberPiece(),
|
number = new NumberPiece()
|
||||||
|
{
|
||||||
|
Text = h is Spinner ? "S" : (HitObject.ComboIndex + 1).ToString(),
|
||||||
|
},
|
||||||
ring = new RingPiece(),
|
ring = new RingPiece(),
|
||||||
flash = new FlashPiece(),
|
flash = new FlashPiece(),
|
||||||
explode = new ExplodePiece
|
explode = new ExplodePiece
|
||||||
@ -81,18 +84,18 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
|
|||||||
|
|
||||||
double hitOffset = Math.Abs(Judgement.TimeOffset);
|
double hitOffset = Math.Abs(Judgement.TimeOffset);
|
||||||
|
|
||||||
|
OsuJudgementInfo osuJudgement = Judgement as OsuJudgementInfo;
|
||||||
|
|
||||||
if (hitOffset < hit50)
|
if (hitOffset < hit50)
|
||||||
{
|
{
|
||||||
Judgement.Result = HitResult.Hit;
|
Judgement.Result = HitResult.Hit;
|
||||||
|
|
||||||
OsuJudgementInfo osuInfo = Judgement as OsuJudgementInfo;
|
|
||||||
|
|
||||||
if (hitOffset < hit300)
|
if (hitOffset < hit300)
|
||||||
osuInfo.Score = OsuScoreResult.Hit300;
|
osuJudgement.Score = OsuScoreResult.Hit300;
|
||||||
else if (hitOffset < hit100)
|
else if (hitOffset < hit100)
|
||||||
osuInfo.Score = OsuScoreResult.Hit100;
|
osuJudgement.Score = OsuScoreResult.Hit100;
|
||||||
else if (hitOffset < hit50)
|
else if (hitOffset < hit50)
|
||||||
osuInfo.Score = OsuScoreResult.Hit50;
|
osuJudgement.Score = OsuScoreResult.Hit50;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Judgement.Result = HitResult.Miss;
|
Judgement.Result = HitResult.Miss;
|
||||||
@ -124,6 +127,8 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
|
|||||||
base.UpdateState(state);
|
base.UpdateState(state);
|
||||||
|
|
||||||
ApproachCircle.FadeOut();
|
ApproachCircle.FadeOut();
|
||||||
|
|
||||||
|
glow.Delay(osuObject.Duration);
|
||||||
glow.FadeOut(400);
|
glow.FadeOut(400);
|
||||||
|
|
||||||
switch (state)
|
switch (state)
|
||||||
@ -156,5 +161,7 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Drawable ProxiedLayer => ApproachCircle;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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 System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using osu.Game.Modes.Objects;
|
using osu.Game.Modes.Objects;
|
||||||
@ -18,7 +18,7 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public override JudgementInfo CreateJudgementInfo() => new OsuJudgementInfo();
|
public override JudgementInfo CreateJudgementInfo() => new OsuJudgementInfo { MaxScore = OsuScoreResult.Hit300 };
|
||||||
|
|
||||||
protected override void UpdateState(ArmedState state)
|
protected override void UpdateState(ArmedState state)
|
||||||
{
|
{
|
||||||
@ -48,7 +48,37 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
|
|||||||
|
|
||||||
public class OsuJudgementInfo : PositionalJudgementInfo
|
public class OsuJudgementInfo : PositionalJudgementInfo
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The score the user achieved.
|
||||||
|
/// </summary>
|
||||||
public OsuScoreResult Score;
|
public OsuScoreResult Score;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The score which would be achievable on a perfect hit.
|
||||||
|
/// </summary>
|
||||||
|
public OsuScoreResult MaxScore = OsuScoreResult.Hit300;
|
||||||
|
|
||||||
|
public int ScoreValue => scoreToInt(Score);
|
||||||
|
|
||||||
|
public int MaxScoreValue => scoreToInt(MaxScore);
|
||||||
|
|
||||||
|
private int scoreToInt(OsuScoreResult result)
|
||||||
|
{
|
||||||
|
switch (result)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
case OsuScoreResult.Hit50:
|
||||||
|
return 50;
|
||||||
|
case OsuScoreResult.Hit100:
|
||||||
|
return 100;
|
||||||
|
case OsuScoreResult.Hit300:
|
||||||
|
return 300;
|
||||||
|
case OsuScoreResult.SliderTick:
|
||||||
|
return 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public ComboResult Combo;
|
public ComboResult Combo;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,5 +102,7 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
|
|||||||
Hit100,
|
Hit100,
|
||||||
[Description(@"300")]
|
[Description(@"300")]
|
||||||
Hit300,
|
Hit300,
|
||||||
|
[Description(@"10")]
|
||||||
|
SliderTick
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,16 +1,17 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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 System.Collections.Generic;
|
using OpenTK;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Game.Modes.Objects.Drawables;
|
using osu.Game.Modes.Objects.Drawables;
|
||||||
using osu.Game.Modes.Osu.Objects.Drawables.Pieces;
|
using osu.Game.Modes.Osu.Objects.Drawables.Pieces;
|
||||||
using OpenTK;
|
using System.Collections.Generic;
|
||||||
using osu.Framework.Input;
|
using System.Linq;
|
||||||
|
using osu.Framework.Graphics.Containers;
|
||||||
|
|
||||||
namespace osu.Game.Modes.Osu.Objects.Drawables
|
namespace osu.Game.Modes.Osu.Objects.Drawables
|
||||||
{
|
{
|
||||||
class DrawableSlider : DrawableOsuHitObject
|
public class DrawableSlider : DrawableOsuHitObject, IDrawableHitObjectWithProxiedApproach
|
||||||
{
|
{
|
||||||
private Slider slider;
|
private Slider slider;
|
||||||
|
|
||||||
@ -18,6 +19,8 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
|
|||||||
|
|
||||||
private List<ISliderProgress> components = new List<ISliderProgress>();
|
private List<ISliderProgress> components = new List<ISliderProgress>();
|
||||||
|
|
||||||
|
private Container<DrawableSliderTick> ticks;
|
||||||
|
|
||||||
SliderBody body;
|
SliderBody body;
|
||||||
SliderBall ball;
|
SliderBall ball;
|
||||||
|
|
||||||
@ -31,9 +34,10 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
|
|||||||
{
|
{
|
||||||
body = new SliderBody(s)
|
body = new SliderBody(s)
|
||||||
{
|
{
|
||||||
Position = s.Position,
|
Position = s.StackedPosition,
|
||||||
PathWidth = s.Scale * 64,
|
PathWidth = s.Scale * 64,
|
||||||
},
|
},
|
||||||
|
ticks = new Container<DrawableSliderTick>(),
|
||||||
bouncer1 = new SliderBouncer(s, false)
|
bouncer1 = new SliderBouncer(s, false)
|
||||||
{
|
{
|
||||||
Position = s.Curve.PositionAt(1),
|
Position = s.Curve.PositionAt(1),
|
||||||
@ -41,7 +45,7 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
|
|||||||
},
|
},
|
||||||
bouncer2 = new SliderBouncer(s, true)
|
bouncer2 = new SliderBouncer(s, true)
|
||||||
{
|
{
|
||||||
Position = s.Position,
|
Position = s.StackedPosition,
|
||||||
Scale = new Vector2(s.Scale),
|
Scale = new Vector2(s.Scale),
|
||||||
},
|
},
|
||||||
ball = new SliderBall(s)
|
ball = new SliderBall(s)
|
||||||
@ -50,8 +54,10 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
|
|||||||
},
|
},
|
||||||
initialCircle = new DrawableHitCircle(new HitCircle
|
initialCircle = new DrawableHitCircle(new HitCircle
|
||||||
{
|
{
|
||||||
|
//todo: avoid creating this temporary HitCircle.
|
||||||
StartTime = s.StartTime,
|
StartTime = s.StartTime,
|
||||||
Position = s.Position,
|
Position = s.StackedPosition,
|
||||||
|
ComboIndex = s.ComboIndex,
|
||||||
Scale = s.Scale,
|
Scale = s.Scale,
|
||||||
Colour = s.Colour,
|
Colour = s.Colour,
|
||||||
Sample = s.Sample,
|
Sample = s.Sample,
|
||||||
@ -62,6 +68,26 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
|
|||||||
components.Add(ball);
|
components.Add(ball);
|
||||||
components.Add(bouncer1);
|
components.Add(bouncer1);
|
||||||
components.Add(bouncer2);
|
components.Add(bouncer2);
|
||||||
|
|
||||||
|
AddNested(initialCircle);
|
||||||
|
|
||||||
|
var repeatDuration = s.Curve.Length / s.Velocity;
|
||||||
|
foreach (var tick in s.Ticks)
|
||||||
|
{
|
||||||
|
var repeatStartTime = s.StartTime + tick.RepeatIndex * repeatDuration;
|
||||||
|
var fadeInTime = repeatStartTime + (tick.StartTime - repeatStartTime) / 2 - (tick.RepeatIndex == 0 ? TIME_FADEIN : TIME_FADEIN / 2);
|
||||||
|
var fadeOutTime = repeatStartTime + repeatDuration;
|
||||||
|
|
||||||
|
var drawableTick = new DrawableSliderTick(tick)
|
||||||
|
{
|
||||||
|
FadeInTime = fadeInTime,
|
||||||
|
FadeOutTime = fadeOutTime,
|
||||||
|
Position = tick.Position,
|
||||||
|
};
|
||||||
|
|
||||||
|
ticks.Add(drawableTick);
|
||||||
|
AddNested(drawableTick);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Since the DrawableSlider itself is just a container without a size we need to
|
// Since the DrawableSlider itself is just a container without a size we need to
|
||||||
@ -81,7 +107,7 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
|
|||||||
|
|
||||||
if (repeat > currentRepeat)
|
if (repeat > currentRepeat)
|
||||||
{
|
{
|
||||||
if (ball.Tracking)
|
if (repeat < slider.RepeatCount && ball.Tracking)
|
||||||
PlaySample();
|
PlaySample();
|
||||||
currentRepeat = repeat;
|
currentRepeat = repeat;
|
||||||
}
|
}
|
||||||
@ -95,7 +121,8 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
|
|||||||
if (initialCircle.Judgement?.Result != HitResult.Hit)
|
if (initialCircle.Judgement?.Result != HitResult.Hit)
|
||||||
initialCircle.Position = slider.Curve.PositionAt(progress);
|
initialCircle.Position = slider.Curve.PositionAt(progress);
|
||||||
|
|
||||||
components.ForEach(c => c.UpdateProgress(progress, repeat));
|
foreach (var c in components) c.UpdateProgress(progress, repeat);
|
||||||
|
foreach (var t in ticks.Children) t.Tracking = ball.Tracking;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void CheckJudgement(bool userTriggered)
|
protected override void CheckJudgement(bool userTriggered)
|
||||||
@ -105,8 +132,22 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
|
|||||||
|
|
||||||
if (!userTriggered && Time.Current >= HitObject.EndTime)
|
if (!userTriggered && Time.Current >= HitObject.EndTime)
|
||||||
{
|
{
|
||||||
j.Score = sc.Score;
|
var ticksCount = ticks.Children.Count() + 1;
|
||||||
j.Result = sc.Result;
|
var ticksHit = ticks.Children.Count(t => t.Judgement.Result == HitResult.Hit);
|
||||||
|
if (sc.Result == HitResult.Hit)
|
||||||
|
ticksHit++;
|
||||||
|
|
||||||
|
var hitFraction = (double)ticksHit / ticksCount;
|
||||||
|
if (hitFraction == 1 && sc.Score == OsuScoreResult.Hit300)
|
||||||
|
j.Score = OsuScoreResult.Hit300;
|
||||||
|
else if (hitFraction >= 0.5 && sc.Score >= OsuScoreResult.Hit100)
|
||||||
|
j.Score = OsuScoreResult.Hit100;
|
||||||
|
else if (hitFraction > 0)
|
||||||
|
j.Score = OsuScoreResult.Hit50;
|
||||||
|
else
|
||||||
|
j.Score = OsuScoreResult.Miss;
|
||||||
|
|
||||||
|
j.Result = j.Score != OsuScoreResult.Miss ? HitResult.Hit : HitResult.Miss;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -133,6 +174,8 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
|
|||||||
|
|
||||||
FadeOut(800);
|
FadeOut(800);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Drawable ProxiedLayer => initialCircle.ApproachCircle;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal interface ISliderProgress
|
internal interface ISliderProgress
|
||||||
|
120
osu.Game.Modes.Osu/Objects/Drawables/DrawableSliderTick.cs
Normal file
120
osu.Game.Modes.Osu/Objects/Drawables/DrawableSliderTick.cs
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
// 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 osu.Framework.Allocation;
|
||||||
|
using osu.Framework.Audio;
|
||||||
|
using osu.Framework.Audio.Sample;
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Sprites;
|
||||||
|
using osu.Framework.Graphics.Transforms;
|
||||||
|
using osu.Game.Beatmaps.Samples;
|
||||||
|
using osu.Game.Modes.Objects.Drawables;
|
||||||
|
using OpenTK;
|
||||||
|
using OpenTK.Graphics;
|
||||||
|
|
||||||
|
namespace osu.Game.Modes.Osu.Objects.Drawables
|
||||||
|
{
|
||||||
|
public class DrawableSliderTick : DrawableOsuHitObject
|
||||||
|
{
|
||||||
|
private SliderTick sliderTick;
|
||||||
|
|
||||||
|
public double FadeInTime;
|
||||||
|
public double FadeOutTime;
|
||||||
|
|
||||||
|
public bool Tracking;
|
||||||
|
|
||||||
|
public override bool RemoveWhenNotAlive => false;
|
||||||
|
|
||||||
|
public override JudgementInfo CreateJudgementInfo() => new OsuJudgementInfo { MaxScore = OsuScoreResult.SliderTick };
|
||||||
|
|
||||||
|
public DrawableSliderTick(SliderTick sliderTick) : base(sliderTick)
|
||||||
|
{
|
||||||
|
this.sliderTick = sliderTick;
|
||||||
|
|
||||||
|
Size = new Vector2(16) * sliderTick.Scale;
|
||||||
|
|
||||||
|
Masking = true;
|
||||||
|
CornerRadius = Size.X / 2;
|
||||||
|
|
||||||
|
Origin = Anchor.Centre;
|
||||||
|
|
||||||
|
BorderThickness = 2;
|
||||||
|
BorderColour = Color4.White;
|
||||||
|
|
||||||
|
Children = new Drawable[]
|
||||||
|
{
|
||||||
|
new Box
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.Both,
|
||||||
|
Colour = sliderTick.Colour,
|
||||||
|
Alpha = 0.3f,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private SampleChannel sample;
|
||||||
|
|
||||||
|
[BackgroundDependencyLoader]
|
||||||
|
private void load(AudioManager audio)
|
||||||
|
{
|
||||||
|
string sampleSet = (HitObject.Sample?.Set ?? SampleSet.Normal).ToString().ToLower();
|
||||||
|
|
||||||
|
sample = audio.Sample.Get($@"Gameplay/{sampleSet}-slidertick");
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void PlaySample()
|
||||||
|
{
|
||||||
|
sample?.Play();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected override void CheckJudgement(bool userTriggered)
|
||||||
|
{
|
||||||
|
var j = Judgement as OsuJudgementInfo;
|
||||||
|
|
||||||
|
if (Judgement.TimeOffset >= 0)
|
||||||
|
{
|
||||||
|
j.Result = Tracking ? HitResult.Hit : HitResult.Miss;
|
||||||
|
j.Score = Tracking ? OsuScoreResult.SliderTick : OsuScoreResult.Miss;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void UpdatePreemptState()
|
||||||
|
{
|
||||||
|
var animIn = Math.Min(150, sliderTick.StartTime - FadeInTime);
|
||||||
|
|
||||||
|
ScaleTo(0.5f);
|
||||||
|
ScaleTo(1.2f, animIn);
|
||||||
|
FadeIn(animIn);
|
||||||
|
|
||||||
|
Delay(animIn);
|
||||||
|
ScaleTo(1, 150, EasingTypes.Out);
|
||||||
|
|
||||||
|
Delay(-animIn);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void UpdateState(ArmedState state)
|
||||||
|
{
|
||||||
|
if (!IsLoaded) return;
|
||||||
|
|
||||||
|
base.UpdateState(state);
|
||||||
|
|
||||||
|
switch (state)
|
||||||
|
{
|
||||||
|
case ArmedState.Idle:
|
||||||
|
Delay(FadeOutTime - sliderTick.StartTime);
|
||||||
|
FadeOut();
|
||||||
|
break;
|
||||||
|
case ArmedState.Miss:
|
||||||
|
FadeOut(160);
|
||||||
|
FadeColour(Color4.Red, 80);
|
||||||
|
break;
|
||||||
|
case ArmedState.Hit:
|
||||||
|
FadeOut(120, EasingTypes.OutQuint);
|
||||||
|
ScaleTo(Scale * 1.5f, 120, EasingTypes.OutQuint);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
158
osu.Game.Modes.Osu/Objects/Drawables/DrawableSpinner.cs
Normal file
158
osu.Game.Modes.Osu/Objects/Drawables/DrawableSpinner.cs
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
// 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 osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Containers;
|
||||||
|
using osu.Framework.Graphics.Transforms;
|
||||||
|
using osu.Framework.MathUtils;
|
||||||
|
using osu.Game.Modes.Objects.Drawables;
|
||||||
|
using osu.Game.Modes.Osu.Objects.Drawables.Pieces;
|
||||||
|
using OpenTK;
|
||||||
|
using OpenTK.Graphics;
|
||||||
|
|
||||||
|
namespace osu.Game.Modes.Osu.Objects.Drawables
|
||||||
|
{
|
||||||
|
public class DrawableSpinner : DrawableOsuHitObject
|
||||||
|
{
|
||||||
|
private Spinner spinner;
|
||||||
|
|
||||||
|
private SpinnerDisc disc;
|
||||||
|
private SpinnerBackground background;
|
||||||
|
private Container circleContainer;
|
||||||
|
private DrawableHitCircle circle;
|
||||||
|
|
||||||
|
public DrawableSpinner(Spinner s) : base(s)
|
||||||
|
{
|
||||||
|
Origin = Anchor.Centre;
|
||||||
|
Position = s.Position;
|
||||||
|
|
||||||
|
//take up full playfield.
|
||||||
|
Size = new Vector2(512);
|
||||||
|
|
||||||
|
spinner = s;
|
||||||
|
|
||||||
|
Children = new Drawable[]
|
||||||
|
{
|
||||||
|
background = new SpinnerBackground
|
||||||
|
{
|
||||||
|
Alpha = 0,
|
||||||
|
Anchor = Anchor.Centre,
|
||||||
|
Origin = Anchor.Centre,
|
||||||
|
DiscColour = Color4.Black
|
||||||
|
},
|
||||||
|
disc = new SpinnerDisc
|
||||||
|
{
|
||||||
|
Alpha = 0,
|
||||||
|
Anchor = Anchor.Centre,
|
||||||
|
Origin = Anchor.Centre,
|
||||||
|
DiscColour = s.Colour
|
||||||
|
},
|
||||||
|
circleContainer = new Container
|
||||||
|
{
|
||||||
|
AutoSizeAxes = Axes.Both,
|
||||||
|
Anchor = Anchor.Centre,
|
||||||
|
Origin = Anchor.Centre,
|
||||||
|
Children = new []
|
||||||
|
{
|
||||||
|
circle = new DrawableHitCircle(s)
|
||||||
|
{
|
||||||
|
Interactive = false,
|
||||||
|
Position = Vector2.Zero,
|
||||||
|
Anchor = Anchor.Centre,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
background.Scale = scaleToCircle;
|
||||||
|
disc.Scale = scaleToCircle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Contains(Vector2 screenSpacePos) => true;
|
||||||
|
|
||||||
|
protected override void CheckJudgement(bool userTriggered)
|
||||||
|
{
|
||||||
|
if (Time.Current < HitObject.StartTime) return;
|
||||||
|
|
||||||
|
var j = Judgement as OsuJudgementInfo;
|
||||||
|
|
||||||
|
disc.ScaleTo(Interpolation.ValueAt(Math.Sqrt(Progress), scaleToCircle, Vector2.One, 0, 1), 100);
|
||||||
|
|
||||||
|
if (Progress >= 1)
|
||||||
|
disc.Complete = true;
|
||||||
|
|
||||||
|
if (!userTriggered && Time.Current >= HitObject.EndTime)
|
||||||
|
{
|
||||||
|
if (Progress >= 1)
|
||||||
|
{
|
||||||
|
j.Score = OsuScoreResult.Hit300;
|
||||||
|
j.Result = HitResult.Hit;
|
||||||
|
}
|
||||||
|
else if (Progress > .9)
|
||||||
|
{
|
||||||
|
j.Score = OsuScoreResult.Hit100;
|
||||||
|
j.Result = HitResult.Hit;
|
||||||
|
}
|
||||||
|
else if (Progress > .75)
|
||||||
|
{
|
||||||
|
j.Score = OsuScoreResult.Hit50;
|
||||||
|
j.Result = HitResult.Hit;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
j.Score = OsuScoreResult.Miss;
|
||||||
|
if (Time.Current >= HitObject.EndTime)
|
||||||
|
j.Result = HitResult.Miss;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Vector2 scaleToCircle => (circle.Scale * circle.DrawWidth / DrawWidth) * 0.95f;
|
||||||
|
|
||||||
|
private float spinsPerMinuteNeeded = 100 + (5 * 15); //TODO: read per-map OD and place it on the 5
|
||||||
|
|
||||||
|
private float rotationsNeeded => (float)(spinsPerMinuteNeeded * (spinner.EndTime - spinner.StartTime) / 60000f);
|
||||||
|
|
||||||
|
public float Progress => MathHelper.Clamp(disc.RotationAbsolute / 360 / rotationsNeeded, 0, 1);
|
||||||
|
|
||||||
|
protected override void UpdatePreemptState()
|
||||||
|
{
|
||||||
|
base.UpdatePreemptState();
|
||||||
|
|
||||||
|
circleContainer.ScaleTo(1, 400, EasingTypes.OutElastic);
|
||||||
|
|
||||||
|
background.Delay(TIME_PREEMPT - 500);
|
||||||
|
|
||||||
|
background.ScaleTo(scaleToCircle * 1.2f, 400, EasingTypes.OutQuint);
|
||||||
|
background.FadeIn(200);
|
||||||
|
|
||||||
|
background.Delay(400);
|
||||||
|
background.ScaleTo(1, 250, EasingTypes.OutQuint);
|
||||||
|
|
||||||
|
disc.Delay(TIME_PREEMPT - 50);
|
||||||
|
disc.FadeIn(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void UpdateState(ArmedState state)
|
||||||
|
{
|
||||||
|
if (!IsLoaded) return;
|
||||||
|
|
||||||
|
base.UpdateState(state);
|
||||||
|
|
||||||
|
Delay(HitObject.Duration, true);
|
||||||
|
|
||||||
|
FadeOut(160);
|
||||||
|
|
||||||
|
switch (state)
|
||||||
|
{
|
||||||
|
case ArmedState.Hit:
|
||||||
|
ScaleTo(Scale * 1.2f, 320, EasingTypes.Out);
|
||||||
|
break;
|
||||||
|
case ArmedState.Miss:
|
||||||
|
ScaleTo(Scale * 0.8f, 320, EasingTypes.In);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,18 +1,19 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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.Extensions;
|
using osu.Framework.Extensions;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Graphics.Sprites;
|
using osu.Framework.Graphics.Sprites;
|
||||||
using osu.Framework.Graphics.Transformations;
|
using osu.Framework.Graphics.Transforms;
|
||||||
|
using osu.Game.Graphics.Sprites;
|
||||||
using osu.Game.Modes.Objects.Drawables;
|
using osu.Game.Modes.Objects.Drawables;
|
||||||
using OpenTK;
|
using OpenTK;
|
||||||
using OpenTK.Graphics;
|
using OpenTK.Graphics;
|
||||||
|
|
||||||
namespace osu.Game.Modes.Osu.Objects.Drawables
|
namespace osu.Game.Modes.Osu.Objects.Drawables
|
||||||
{
|
{
|
||||||
public class HitExplosion : FlowContainer
|
public class HitExplosion : FillFlowContainer
|
||||||
{
|
{
|
||||||
private readonly OsuJudgementInfo judgement;
|
private readonly OsuJudgementInfo judgement;
|
||||||
private SpriteText line1;
|
private SpriteText line1;
|
||||||
@ -24,13 +25,13 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
|
|||||||
AutoSizeAxes = Axes.Both;
|
AutoSizeAxes = Axes.Both;
|
||||||
Origin = Anchor.Centre;
|
Origin = Anchor.Centre;
|
||||||
|
|
||||||
Direction = FlowDirection.VerticalOnly;
|
Direction = FillDirection.Down;
|
||||||
Spacing = new Vector2(0, 2);
|
Spacing = new Vector2(0, 2);
|
||||||
Position = (h?.EndPosition ?? Vector2.Zero) + judgement.PositionOffset;
|
Position = (h?.StackedEndPosition ?? Vector2.Zero) + judgement.PositionOffset;
|
||||||
|
|
||||||
Children = new Drawable[]
|
Children = new Drawable[]
|
||||||
{
|
{
|
||||||
line1 = new SpriteText
|
line1 = new OsuSpriteText
|
||||||
{
|
{
|
||||||
Anchor = Anchor.TopCentre,
|
Anchor = Anchor.TopCentre,
|
||||||
Origin = Anchor.TopCentre,
|
Origin = Anchor.TopCentre,
|
||||||
@ -38,7 +39,7 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
|
|||||||
Font = @"Venera",
|
Font = @"Venera",
|
||||||
TextSize = 16,
|
TextSize = 16,
|
||||||
},
|
},
|
||||||
line2 = new SpriteText
|
line2 = new OsuSpriteText
|
||||||
{
|
{
|
||||||
Text = judgement.Combo.GetDescription(),
|
Text = judgement.Combo.GetDescription(),
|
||||||
Font = @"Venera",
|
Font = @"Venera",
|
||||||
|
@ -1,14 +1,11 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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 System;
|
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Graphics.Sprites;
|
using osu.Framework.Graphics.Sprites;
|
||||||
using osu.Framework.Graphics.Textures;
|
using osu.Framework.Graphics.Textures;
|
||||||
using osu.Framework.Input;
|
|
||||||
using OpenTK;
|
|
||||||
|
|
||||||
namespace osu.Game.Modes.Osu.Objects.Drawables.Pieces
|
namespace osu.Game.Modes.Osu.Objects.Drawables.Pieces
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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 System;
|
using System;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
@ -14,9 +14,8 @@ namespace osu.Game.Modes.Osu.Objects.Drawables.Pieces
|
|||||||
{
|
{
|
||||||
public class CirclePiece : Container
|
public class CirclePiece : Container
|
||||||
{
|
{
|
||||||
|
|
||||||
private Sprite disc;
|
private Sprite disc;
|
||||||
private Triangles triangles;
|
|
||||||
|
|
||||||
public Func<bool> Hit;
|
public Func<bool> Hit;
|
||||||
|
|
||||||
@ -36,10 +35,11 @@ namespace osu.Game.Modes.Osu.Objects.Drawables.Pieces
|
|||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
Origin = Anchor.Centre
|
Origin = Anchor.Centre
|
||||||
},
|
},
|
||||||
triangles = new Triangles
|
new TrianglesPiece
|
||||||
{
|
{
|
||||||
|
RelativeSizeAxes = Axes.Both,
|
||||||
BlendingMode = BlendingMode.Additive,
|
BlendingMode = BlendingMode.Additive,
|
||||||
RelativeSizeAxes = Axes.Both
|
Alpha = 0.5f,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
@ -21,10 +21,11 @@ namespace osu.Game.Modes.Osu.Objects.Drawables.Pieces
|
|||||||
|
|
||||||
Children = new Drawable[]
|
Children = new Drawable[]
|
||||||
{
|
{
|
||||||
new Triangles
|
new TrianglesPiece
|
||||||
{
|
{
|
||||||
BlendingMode = BlendingMode.Additive,
|
BlendingMode = BlendingMode.Additive,
|
||||||
RelativeSizeAxes = Axes.Both
|
RelativeSizeAxes = Axes.Both,
|
||||||
|
Alpha = 0.2f,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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.Graphics;
|
using osu.Framework.Graphics;
|
||||||
|
@ -1,38 +1,56 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Graphics.Sprites;
|
using osu.Framework.Graphics.Sprites;
|
||||||
using osu.Framework.Graphics.Textures;
|
using osu.Game.Graphics;
|
||||||
|
using osu.Game.Graphics.Sprites;
|
||||||
|
using OpenTK.Graphics;
|
||||||
|
|
||||||
namespace osu.Game.Modes.Osu.Objects.Drawables.Pieces
|
namespace osu.Game.Modes.Osu.Objects.Drawables.Pieces
|
||||||
{
|
{
|
||||||
public class NumberPiece : Container
|
public class NumberPiece : Container
|
||||||
{
|
{
|
||||||
private Sprite number;
|
private SpriteText number;
|
||||||
|
|
||||||
|
public string Text
|
||||||
|
{
|
||||||
|
get { return number.Text; }
|
||||||
|
set { number.Text = value; }
|
||||||
|
}
|
||||||
|
|
||||||
public NumberPiece()
|
public NumberPiece()
|
||||||
{
|
{
|
||||||
Anchor = Anchor.Centre;
|
Anchor = Anchor.Centre;
|
||||||
Origin = Anchor.Centre;
|
Origin = Anchor.Centre;
|
||||||
|
|
||||||
|
Children = new Drawable[]
|
||||||
|
{
|
||||||
|
new CircularContainer
|
||||||
|
{
|
||||||
|
EdgeEffect = new EdgeEffect
|
||||||
|
{
|
||||||
|
Type = EdgeEffectType.Glow,
|
||||||
|
Radius = 60,
|
||||||
|
Colour = Color4.White.Opacity(0.5f),
|
||||||
|
},
|
||||||
Children = new[]
|
Children = new[]
|
||||||
{
|
{
|
||||||
number = new Sprite
|
new Box()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
number = new OsuSpriteText
|
||||||
{
|
{
|
||||||
|
Text = @"1",
|
||||||
|
Font = @"Venera",
|
||||||
|
UseFullGlyphHeight = false,
|
||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
Origin = Anchor.Centre,
|
Origin = Anchor.Centre,
|
||||||
|
TextSize = 40,
|
||||||
Alpha = 1
|
Alpha = 1
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
|
||||||
private void load(TextureStore textures)
|
|
||||||
{
|
|
||||||
number.Texture = textures.Get(@"Play/osu/number");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,11 +1,9 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Graphics.Sprites;
|
using osu.Framework.Graphics.Sprites;
|
||||||
using osu.Framework.Graphics.Textures;
|
|
||||||
using OpenTK;
|
using OpenTK;
|
||||||
using OpenTK.Graphics;
|
using OpenTK.Graphics;
|
||||||
|
|
||||||
|
@ -1,17 +1,16 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Graphics.Sprites;
|
using osu.Framework.Graphics.Sprites;
|
||||||
using osu.Framework.Graphics.Transformations;
|
using osu.Framework.Graphics.Transforms;
|
||||||
using osu.Framework.Input;
|
using osu.Framework.Input;
|
||||||
using OpenTK;
|
|
||||||
using OpenTK.Graphics;
|
using OpenTK.Graphics;
|
||||||
|
|
||||||
namespace osu.Game.Modes.Osu.Objects.Drawables.Pieces
|
namespace osu.Game.Modes.Osu.Objects.Drawables.Pieces
|
||||||
{
|
{
|
||||||
public class SliderBall : Container, ISliderProgress
|
public class SliderBall : CircularContainer, ISliderProgress
|
||||||
{
|
{
|
||||||
private readonly Slider slider;
|
private readonly Slider slider;
|
||||||
private Box follow;
|
private Box follow;
|
||||||
@ -39,7 +38,7 @@ namespace osu.Game.Modes.Osu.Objects.Drawables.Pieces
|
|||||||
Height = width,
|
Height = width,
|
||||||
Alpha = 0,
|
Alpha = 0,
|
||||||
},
|
},
|
||||||
new Container
|
new CircularContainer
|
||||||
{
|
{
|
||||||
Masking = true,
|
Masking = true,
|
||||||
AutoSizeAxes = Axes.Both,
|
AutoSizeAxes = Axes.Both,
|
||||||
@ -48,7 +47,6 @@ namespace osu.Game.Modes.Osu.Objects.Drawables.Pieces
|
|||||||
BorderThickness = 10,
|
BorderThickness = 10,
|
||||||
BorderColour = Color4.White,
|
BorderColour = Color4.White,
|
||||||
Alpha = 1,
|
Alpha = 1,
|
||||||
CornerRadius = width / 2,
|
|
||||||
Children = new[]
|
Children = new[]
|
||||||
{
|
{
|
||||||
new Box
|
new Box
|
||||||
@ -104,7 +102,7 @@ namespace osu.Game.Modes.Osu.Objects.Drawables.Pieces
|
|||||||
{
|
{
|
||||||
base.Update();
|
base.Update();
|
||||||
|
|
||||||
CornerRadius = DrawWidth / 2;
|
if (Time.Current < slider.EndTime)
|
||||||
Tracking = canCurrentlyTrack && lastState != null && Contains(lastState.Mouse.NativeState.Position) && lastState.Mouse.HasMainButtonPressed;
|
Tracking = canCurrentlyTrack && lastState != null && Contains(lastState.Mouse.NativeState.Position) && lastState.Mouse.HasMainButtonPressed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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 System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@ -8,7 +8,7 @@ using osu.Framework.Configuration;
|
|||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Graphics.OpenGL.Textures;
|
using osu.Framework.Graphics.OpenGL.Textures;
|
||||||
using osu.Framework.Graphics.Sprites;
|
using osu.Framework.Graphics.Lines;
|
||||||
using osu.Framework.Graphics.Textures;
|
using osu.Framework.Graphics.Textures;
|
||||||
using osu.Game.Configuration;
|
using osu.Game.Configuration;
|
||||||
using OpenTK;
|
using OpenTK;
|
||||||
|
@ -1,14 +1,8 @@
|
|||||||
//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
//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 System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Graphics.Sprites;
|
|
||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
|
|
||||||
namespace osu.Game.Modes.Osu.Objects.Drawables.Pieces
|
namespace osu.Game.Modes.Osu.Objects.Drawables.Pieces
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
namespace osu.Game.Modes.Osu.Objects.Drawables.Pieces
|
||||||
|
{
|
||||||
|
public class SpinnerBackground : SpinnerDisc
|
||||||
|
{
|
||||||
|
public override bool HandleInput => false;
|
||||||
|
}
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user