commit c49fa2800f9f9ddb1912a6cfade4d57affb04b42 Author: Victor Date: Thu Nov 15 17:49:04 2018 +0200 Initial diff --git a/build.xml b/build.xml new file mode 100644 index 0000000..5be38e3 --- /dev/null +++ b/build.xml @@ -0,0 +1,53 @@ + + Builds, tests, and runs the project OsuReplayDiff. + + + diff --git a/nbproject/build-impl.xml b/nbproject/build-impl.xml new file mode 100644 index 0000000..c438a80 --- /dev/null +++ b/nbproject/build-impl.xml @@ -0,0 +1,1420 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + java -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + Must select one file in the IDE or set profile.class + This target only works when run from inside the NetBeans IDE. + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + Must select some files in the IDE or set test.includes + + + + + Must select one file in the IDE or set run.class + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + Must select some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + Must select one file in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nbproject/configs/Run_as_WebStart.properties b/nbproject/configs/Run_as_WebStart.properties new file mode 100644 index 0000000..670fff0 --- /dev/null +++ b/nbproject/configs/Run_as_WebStart.properties @@ -0,0 +1,2 @@ +# Do not modify this property in this configuration. It can be re-generated. +$label=Run as WebStart diff --git a/nbproject/configs/Run_in_Browser.properties b/nbproject/configs/Run_in_Browser.properties new file mode 100644 index 0000000..f2a5a65 --- /dev/null +++ b/nbproject/configs/Run_in_Browser.properties @@ -0,0 +1,2 @@ +# Do not modify this property in this configuration. It can be re-generated. +$label=Run in Browser diff --git a/nbproject/genfiles.properties b/nbproject/genfiles.properties new file mode 100644 index 0000000..f90d9d2 --- /dev/null +++ b/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=d513bdc6 +build.xml.script.CRC32=94a4c251 +build.xml.stylesheet.CRC32=8064a381@1.78.0.48 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=d513bdc6 +nbproject/build-impl.xml.script.CRC32=f86c884f +nbproject/build-impl.xml.stylesheet.CRC32=05530350@1.79.0.48 diff --git a/nbproject/jfx-impl.xml b/nbproject/jfx-impl.xml new file mode 100644 index 0000000..a178f19 --- /dev/null +++ b/nbproject/jfx-impl.xml @@ -0,0 +1,4007 @@ + + + + + JavaFX-specific Ant calls + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${cssfileslist} + + + + + + + + + + + + + + + + + + + + + + + + self.addMappedName( + (source.indexOf("jfxrt.jar") >= 0) || + (source.indexOf("deploy.jar") >= 0) || + (source.indexOf("javaws.jar") >= 0) || + (source.indexOf("plugin.jar") >= 0) + ? "" : source + ); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nbproject/private/configs/Run_as_WebStart.properties b/nbproject/private/configs/Run_as_WebStart.properties new file mode 100644 index 0000000..86ae865 --- /dev/null +++ b/nbproject/private/configs/Run_as_WebStart.properties @@ -0,0 +1,2 @@ +# Do not modify this property in this configuration. It can be re-generated. +javafx.run.as=webstart diff --git a/nbproject/private/configs/Run_in_Browser.properties b/nbproject/private/configs/Run_in_Browser.properties new file mode 100644 index 0000000..f4e8549 --- /dev/null +++ b/nbproject/private/configs/Run_in_Browser.properties @@ -0,0 +1,2 @@ +# Do not modify this property in this configuration. It can be re-generated. +javafx.run.as=embedded diff --git a/nbproject/private/private.properties b/nbproject/private/private.properties new file mode 100644 index 0000000..8240c4a --- /dev/null +++ b/nbproject/private/private.properties @@ -0,0 +1,11 @@ +auxiliary.org-netbeans-modules-projectapi.issue214819_5f_fx_5f_enabled=true +compile.on.save=true +do.depend=false +do.jar=true +# No need to modify this property unless customizing JavaFX Ant task infrastructure +endorsed.javafx.ant.classpath=. +javac.debug=true +javadoc.preview=true +javafx.run.inbrowser= +javafx.run.inbrowser.path=C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe +user.properties.file=C:\\Users\\aNNiMON\\AppData\\Roaming\\NetBeans\\dev\\build.properties diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml new file mode 100644 index 0000000..6807a2b --- /dev/null +++ b/nbproject/private/private.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/nbproject/private/retriever/catalog.xml b/nbproject/private/retriever/catalog.xml new file mode 100644 index 0000000..015ebc9 --- /dev/null +++ b/nbproject/private/retriever/catalog.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/nbproject/private/retriever/www.oracle.com/technetwork/java/javase/overview/index.html b/nbproject/private/retriever/www.oracle.com/technetwork/java/javase/overview/index.html new file mode 100644 index 0000000..fe93f72 --- /dev/null +++ b/nbproject/private/retriever/www.oracle.com/technetwork/java/javase/overview/index.html @@ -0,0 +1,1142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Java SE | Oracle Technology Network | Oracle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + + + + + + + + + + + + +
+
+
+ + + + + + + + + + +
+
+ +

Java SE at a Glance

 
 

Java Platform, Standard Edition (Java SE) lets you develop and deploy Java applications on desktops and servers, as well as in today's demanding embedded environments. Java offers the rich user interface, performance, versatility, portability, and security that today's applicationsrequire.


Auto-update Notice & End of Public Updates for Oracle JDK 7

Coincident with the January 2015 CPU release users with the auto-update feature enabled were migrated from Oracle JRE 7 to Oracle JRE 8. Also, please note the April 2015 CPU release was the last Oracle JDK 7 publicly available update. For more information, and details on how to receive longer term support for Oracle JDK 7, please see the Oracle Java SE Support Roadmap.
 

 

What's New

Java Platform, Standard Edition 8 Update 51 (Java SE 8u51) is Now Available
This latest release of the Java Platform includes important security fixes. Oracle strongly recommends that all Java SE 8 users upgrade to this release.
arrow Download  arrow  Release Notes

Java SE 8 is Now Available
The Java Platform, Standard Edition 8 (Java SE 8) is a major feature release. It contains new features and enhancements in many functional areas. Java SE 8 delivers enhanced developer productivity and significant application performance increases through reduced boilerplate code, improved collections and annotations, simpler parallel programming models and more efficient use of modern, multi-core processors. See what's new in JDK 8 for more details.
arrow Download  arrow  Release Notes

Security of the Java Platform
A description of security information provided by role. For developers, system administrators, home users, and security professionals.

Java RIA Security Checklist
Recently announced changes scheduled for Java 7 update 51 (January 2014) have established that the default security slider will require code signatures and the Permissions Manifest attribute. This checklist is intended to provide best practices to help development teams track work necessary to accommodate user prompts.

LiveConnect changes in 7u45 
Java 7 update 45 (October 2013) introduces a new warning to users of LiveConnect applications. LiveConnect is a technology for Rich Internet Applications that allows JavaScript on a web page to make calls into an RIA, allowing the two to work together and load content. RIAs that do not use LiveConnect are unaffected by this change. Read More

Oracle Releases New Diagnostic, Monitoring, Security and Deployment Capabilities for Java SE 7 (Press Release)  Video

Java Mission Control 
Java Flight Recorder and Java Mission Control together create a complete tool chain to continuously collect low level and detailed runtime information enabling after-the-fact incident analysis.
Release Notes   Demo   White Paper

Advanced Management Console 
Provides system administrators an effective control over diverse Java versions running on desktops in the enterprise enabling a more secure environment and enhanced application experience and availability. Documentation 

Deployment Rule Set 
Deployment rule set allows a desktop administrator to control the level of Java client compatibility and default prompts across an organization. Documentation 

Java API Documentation Updater Tool 

Java Usage Tracking and Visualization with Oracle Fusion Middleware 

Server JRE 
Starting with Java SE 7u21, a Server Java Runtime Environment (Server JRE) package is available for deploying Java applications on servers. Learn More

Java Applet & Web Start - Code Signing 
Starting with Java SE 7u21 all Java Applets and Web Start Applications are encouraged to be signed with a trusted certificate. Learn More

Archive of Technical Articles

 

Updates

Java SE 8u51 Released
Java SE 8u51 is the latest Critical Patch Update, containing security fixes.

arrow Release Notes  arrow  Download


communityProducts and Training
 

Oracle Java SE Advanced & Suite 
Expert monitoring, diagnostics, and centralized management for enterprise and ISV Java-based applications.

Oracle Java SE Support

Access Oracle Premier Support for the components and features included with Java SE.

Training & Certification:


Learn More about Java Software

Java can reduce costs, drive innovation, and improve application services.



community Community

JavaOne
JavaOne 2014 has concluded, but the Learning Lives On

Did you miss a JavaOne keynote or session? You can find those here. And 'Save the Date' for Oracle OpenWorld 2015 October 25–29, 2015!

Java 8 Event Kit
Access the "Create the Future with Java 8 Event Kit" - run your own Java 8 event using the resources designed for Java User Groups (JUGs). The kit includes a fully scripted technical presentation, intro video, promotional tools and more. Learn More

Adopt a JSR Program
This program is intended to encourage JUG members to get involved in a Java Specification Request (JSR) and to evangelise that JSR to their JUG and the wider Java community in order to increase grass roots participation. Learn More

Java.net 
- The Source for Java Technology Collaboration

Java Embedded Community

JavaFX Community

NightHacking LogoNighthacking.com
The NightHacking Java 8 Tour is the inaugural leg of the Java 8 Tour event where the evangelism team will be crossing the globe to speak at conferences and Java User Groups to spread the word about the new Java 8 release.


 


Participate
 

Make the Future Java Outreach Program
Together, we can inspire future technologists to learn more about Java and the opportunities it brings. The Make the Future Java program offers resources, tool kits and promotional items you can use for Java outreach within your local community.

Join a Java User Group (JUG)
Java User Groups (JUGs) are volunteer organizations that strive to distribute Java-related knowledge around the world. They provide a meeting place for Java users to get information, share resources and solutions, increase networking, expand Java Technology expertise, and above all, drink beer, eat pizza and have fun. Find a JUG and become a part of the Java community today!

Java ForumsI Code Java
Read about and share ideas and suggestions about Java technology on the discussion forums. Start with the New to Java or the more advanced Java Programming category.

Gimme Java - Show your true colors!
These Java designs are yours to take and use. Post on your Website, put them on t-shirts or coffee mugs—use them just about anywhere except on a Java product—and let the world know about your passion for Java.

 

 

Java SE Site Map

+ +
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + +
Left Curve +
Java SDKs and Tools
+
Right Curve
+ +
+ + + +
Left Curve
Java Resources
Right Curve
+ + + + July 2015 Java Sidebar Banner
+
+ + + + + VTS OnDemand RHS Banner

+ + + Java SE Advanced Best Practices WebCast
+
+ + + + + Duke's Choice RHS Banner
+
+ + + + + JavaOne 2014 Replay banner

+ + +
+
+ + +
+ + +
+ + + + + + + + + + + + +
+ + + + + + + + + + + + + diff --git a/nbproject/project.properties b/nbproject/project.properties new file mode 100644 index 0000000..97554c7 --- /dev/null +++ b/nbproject/project.properties @@ -0,0 +1,118 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +application.title=OsuReplayDiff +application.vendor=aNNiMON +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +compile.on.save=true +compile.on.save.unsupported.javafx=true +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/OsuReplayDiff.jar +dist.javadoc.dir=${dist.dir}/javadoc +endorsed.classpath= +excludes= +file.reference.commons-compress-1.9.jar=commons-compress-1.9.jar +file.reference.xz-1.5.jar=xz-1.5.jar +includes=** +# Non-JavaFX jar file creation is deactivated in JavaFX 2.0+ projects +jar.archive.disabled=true +jar.compress=false +javac.classpath=\ + ${javafx.classpath.extension}:\ + ${file.reference.commons-compress-1.9.jar}:\ + ${file.reference.xz-1.5.jar} +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.external.vm=false +javac.processorpath=\ + ${javac.classpath} +javac.source=1.8 +javac.target=1.8 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +javafx.application.implementation.version=1.0 +javafx.binarycss=false +javafx.classpath.extension=\ + ${java.home}/lib/javaws.jar:\ + ${java.home}/lib/deploy.jar:\ + ${java.home}/lib/plugin.jar +javafx.deploy.allowoffline=true +# If true, application update mode is set to 'background', if false, update mode is set to 'eager' +javafx.deploy.backgroundupdate=false +javafx.deploy.embedJNLP=true +javafx.deploy.includeDT=true +# Set true to prevent creation of temporary copy of deployment artifacts before each run (disables concurrent runs) +javafx.disable.concurrent.runs=false +# Set true to enable multiple concurrent runs of the same WebStart or Run-in-Browser project +javafx.enable.concurrent.external.runs=false +# This is a JavaFX project +javafx.enabled=true +javafx.fallback.class=com.javafx.main.NoJavaFXFallback +# Main class for JavaFX +javafx.main.class=com.annimon.osureplaydiff.Main +javafx.preloader.class= +# This project does not use Preloader +javafx.preloader.enabled=false +javafx.preloader.jar.filename= +javafx.preloader.jar.path= +javafx.preloader.project.path= +javafx.preloader.type=none +# Set true for GlassFish only. Rebases manifest classpaths of JARs in lib dir. Not usable with signed JARs. +javafx.rebase.libs=false +javafx.run.height=600 +javafx.run.width=800 +# Pre-JavaFX 2.0 WebStart is deactivated in JavaFX 2.0+ projects +jnlp.enabled=false +# Main class for Java launcher +main.class=com.javafx.main.Main +# For improved security specify narrower Codebase manifest attribute to prevent RIAs from being repurposed +manifest.custom.codebase=* +# Specify Permissions manifest attribute to override default (choices: sandbox, all-permissions) +manifest.custom.permissions= +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=false +platform.active=default_platform +run.classpath=\ + ${dist.jar}:\ + ${javac.classpath}:\ + ${build.classes.dir} +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test diff --git a/nbproject/project.xml b/nbproject/project.xml new file mode 100644 index 0000000..05ec100 --- /dev/null +++ b/nbproject/project.xml @@ -0,0 +1,25 @@ + + + org.netbeans.modules.java.j2seproject + + + + + + + + + + + + + OsuReplayDiff + + + + + + + + + diff --git a/src/com/annimon/osureplaydiff/FXMLDocumentController.java b/src/com/annimon/osureplaydiff/FXMLDocumentController.java new file mode 100644 index 0000000..8ea8509 --- /dev/null +++ b/src/com/annimon/osureplaydiff/FXMLDocumentController.java @@ -0,0 +1,237 @@ +/* + */ +package com.annimon.osureplaydiff; + +import itdelatrisu.opsu.Options; +import itdelatrisu.opsu.beatmap.Beatmap; +import itdelatrisu.opsu.beatmap.BeatmapParser; +import itdelatrisu.opsu.beatmap.HitObject; +import itdelatrisu.opsu.replay.Replay; +import itdelatrisu.opsu.replay.ReplayFrame; +import itdelatrisu.opsu.skins.Skin; +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.util.Arrays; +import java.util.Map; +import java.util.ResourceBundle; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.geometry.Point2D; +import javafx.scene.canvas.Canvas; +import javafx.scene.canvas.GraphicsContext; +import javafx.scene.control.Label; +import javafx.scene.control.Slider; +import javafx.scene.paint.Color; + +/** + * + * @author aNNiMON + */ +public class FXMLDocumentController implements Initializable { + + private static final int WIDTH = 512, HEIGHT = 384; + + @FXML + private Slider slider; + + @FXML + private Canvas canvas; + + private GraphicsContext gc; + private Beatmap beatmap; + private Skin skin; + + private int[][] indices; + private HitObject[] hits; + private ReplayFrame[] framesA, framesB; + + @FXML + private void handleButtonAction(ActionEvent event) { + final String songDir = "D:\\GAMES\\osu\\Songs\\332340 Loz Contreras - Sarajevo (Blackmill Remix)"; + beatmap = BeatmapParser.parseFile( + new File(songDir + "\\Loz Contreras - Sarajevo (Blackmill Remix) (aNNiMON) [Hard].osu"), + new File(songDir), true); + + skin = Options.getSkin(); + + + Replay replayA = new Replay(new File("E://MierivaL - Loz Contreras - Sarajevo (Blackmill Remix) [Hard] (2015-07-09) Osu.osr")); + Replay replayB = new Replay(new File("E://aNNiMON - Loz Contreras - Sarajevo (Blackmill Remix) [Hard] (2015-07-10) Osu.osr")); + try { + replayA.load(); + replayB.load(); + //System.out.println(replay.toString()); + } catch (IOException ex) { } + + final HitObject[] hits = beatmap.objects; + final ReplayFrame[] framesA = replayA.frames; + final ReplayFrame[] framesB = replayB.frames; + Arrays.sort(framesA, (a, b) -> Integer.compare(a.getTime(), b.getTime())); + Arrays.sort(framesB, (a, b) -> Integer.compare(a.getTime(), b.getTime())); + + indices = new int[3][beatmap.endTime]; + int hitIndex = 0; + int frameIndexA1 = 0; + int frameIndexB1 = 0; + final int HIT_TIME = 200; + while (hits[hitIndex].getTime() < HIT_TIME) frameIndexA1++; + while (framesA[frameIndexA1].getTime() < 0) frameIndexA1++; + while (framesB[frameIndexB1].getTime() < 0) frameIndexB1++; + for (int time = 0; time < beatmap.endTime; time++) { + if ( (hitIndex < hits.length) && (time == hits[hitIndex].getTime() - HIT_TIME) ) hitIndex++; + + if (frameIndexA1 < framesA.length - 1) { + if (time == framesA[frameIndexA1].getTime()) { + frameIndexA1++; + while ( (frameIndexA1 < framesA.length) && + (framesA[frameIndexA1 - 1].getTime() == framesA[frameIndexA1].getTime()) ) frameIndexA1++; + } + + } + + if (frameIndexB1 < framesB.length - 1) { + if (time == framesB[frameIndexB1].getTime()) { + frameIndexB1++; + while ( (frameIndexB1 < framesB.length - 1) && + (framesB[frameIndexB1 - 1].getTime() == framesB[frameIndexB1].getTime()) ) frameIndexB1++; + } + } + + indices[0][time] = hitIndex - 1; + indices[1][time] = frameIndexA1; + indices[2][time] = frameIndexB1; + } + + this.hits = hits; + this.framesA = framesA; + this.framesB = framesB; + + final int DIV = 1; + slider.setMax(beatmap.endTime / DIV); +// slider.setMax(frames[frames.length - 1].getTime()); + slider.valueProperty().addListener((ov, oldValue, newValue) -> { + final int time = newValue.intValue(); + draw(time * DIV); + }); + draw(0); + } + + @Override + public void initialize(URL url, ResourceBundle rb) { + gc = canvas.getGraphicsContext2D(); + } + + private void draw(int time) { + final int hitIndex = indices[0][time], indexA = indices[1][time], indexB = indices[2][time]; + final HitObject hit = (hitIndex == -1) ? null : hits[hitIndex]; + final ReplayFrame frameA1 = framesA[indexA]; + final ReplayFrame frameA2 = (indexA == framesA.length - 1) ? framesA[indexA] : framesA[indexA + 1]; + final ReplayFrame frameB1 = framesB[indexB]; + final ReplayFrame frameB2 = (indexB == framesB.length - 1) ? framesB[indexB] : framesB[indexB + 1]; + + final int playerSize = 10, hitSize = 25; + gc.setFill(Color.WHITE); + gc.fillRect(0, 0, WIDTH, HEIGHT); + + if (hit != null) { + gc.setStroke(skin.getComboColors()[hit.getComboIndex()]); + gc.setFill(skin.getComboColors()[hit.getComboIndex()]); + if (hit.isCircle()) { + circle(hit.getX(), hit.getY(), hitSize); + } else if (hit.isSpinner()) { + circle(WIDTH / 2, HEIGHT / 2, HEIGHT / 2); + } else if (hit.isSlider()) { + float[] x = hit.getSliderX(); + float[] y = hit.getSliderY(); + final int length = x.length; + gc.setLineWidth(hitSize); + + gc.beginPath(); + gc.moveTo(hit.getX(), hit.getY()); + for (int i = 1; i < length - 1; i+=2) { + gc.bezierCurveTo(x[i-1], y[i-1], x[i], y[i], x[i+1], y[i+1]); + } + gc.stroke(); + } + } + + final float ax = (frameA1.getX() + frameA2.getX()) / 2; + final float ay = (frameA1.getY() + frameA2.getY()) / 2; + final float bx = (frameB1.getX() + frameB2.getX()) / 2; + final float by = (frameB1.getY() + frameB2.getY()) / 2; + gc.setFill(Color.BLUE); + circle(ax, ay, playerSize); + gc.setFill(Color.GREEN); + circle(bx, by, playerSize); + + gc.setStroke(Color.BLACK); + gc.setLineWidth(1); + if (frameA1.isKeyPressed()) { + gc.strokeText(frameA1.keyAsString(), frameA1.getX(), frameA1.getY()); + } + if (frameB1.isKeyPressed()) { + gc.strokeText(frameB1.keyAsString(), frameB1.getX(), frameB1.getY()); + } + } + + private void circle(double cx, double cy, double size) { + final double rad = size / 2; + gc.fillOval(cx - rad, cy - rad, size, size); + } + + /*private ReplayFrame findByTime(int time, ReplayFrame[] frames) { + final int length = frames.length; + + int indexA = 0, indexB = length - 1; + while (indexA < indexB) { + final int midIndex = indexA + (indexB - indexA) / 2; + final ReplayFrame midFrame = frames[midIndex]; + final int midTime = midFrame.getTime(); + if (time <= midTime) indexB = midIndex; + else indexA = midIndex + 1; + } + + if (indexB >= length - 1) return frames[indexB]; + + final ReplayFrame frameA = frames[indexB]; + final ReplayFrame frameB = frames[indexB + 1]; + + final int timeDiff = (frameA.getTimeDiff() + frameB.getTimeDiff()) / 2; + final float x = (frameA.getX() + frameB.getX()) / 2; + final float y = (frameA.getY() + frameB.getY()) / 2; + final int keys = frameA.getKeys(); + return new ReplayFrame(timeDiff, time, x, y, keys); + } + + private HitObject findHitObjectByTime(int time) { + final int length = beatmap.objects.length; + + int indexA = 0, indexB = length - 1; + while (indexA < indexB) { + final int midIndex = indexA + (indexB - indexA) / 2; + final HitObject midObject = beatmap.objects[midIndex]; + if (midObject == null) { + int index = midIndex; + while (index > 0 && beatmap.objects[index] == null) { + index--; + } + return beatmap.objects[index]; + } + if (midObject.isCircle()) { + if (time <= midObject.getTime()) indexB = midIndex; + else indexA = midIndex + 1; + } else { + if (time < midObject.getTime()) indexB = midIndex; + else if (time > midObject.getEndTime()) indexA = midIndex + 1; + else { + indexB = midIndex; + break; + } + } + } + + return beatmap.objects[indexB]; + }*/ +} diff --git a/src/com/annimon/osureplaydiff/Main.java b/src/com/annimon/osureplaydiff/Main.java new file mode 100644 index 0000000..abf5117 --- /dev/null +++ b/src/com/annimon/osureplaydiff/Main.java @@ -0,0 +1,32 @@ +package com.annimon.osureplaydiff; + +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.stage.Stage; + +/** + * + * @author aNNiMON + */ +public class Main extends Application { + + @Override + public void start(Stage stage) throws Exception { + Parent root = FXMLLoader.load(getClass().getResource("main.fxml")); + + Scene scene = new Scene(root); + + stage.setScene(scene); + stage.show(); + } + + /** + * @param args the command line arguments + */ + public static void main(String[] args) { + launch(args); + } + +} diff --git a/src/com/annimon/osureplaydiff/main.fxml b/src/com/annimon/osureplaydiff/main.fxml new file mode 100644 index 0000000..230401d --- /dev/null +++ b/src/com/annimon/osureplaydiff/main.fxml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + +