diff --git a/ArcadeReader.java b/ArcadeReader.java index c9617f3..b6857cc 100644 --- a/ArcadeReader.java +++ b/ArcadeReader.java @@ -1,13 +1,111 @@ import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Base64; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; +import java.awt.image.BufferedImage; public class ArcadeReader { - public static String fileToBase64String(Path file) { + /* + * Important data we would like to know for all games: + * Score + * Rank (Probably implementation-specific) + * Note accuracy [List] + * Marvelous + * Perfect + * Great + * Good + * Bad + * OK + * Miss + * Difficulty + * Song Name / Title + * Percentage (Can be EX Score, a percentage accuracy or survival percent) + * Max Combo + * Other (Not used by the auto detecter, used for storing misc. data.) + * + * Notes about Readers: + * Love Live + * - Does not use: Marvelous, OK + * Project Diva + * - Does not use: Marvelous, OK + * - Fail condition is MISSxTAKE + * DDR + * - Does not use: Max Combo (Cannot calculate in combo carryover mode), Bad + * - Fail condition is E rank. + * Pop'n Music + * - Does not use: Marvelous, Bad, OK + * - Stores number of bars filled in Percentage. + * - Fail condition is <17 in the meter (max is 24) + * Sound Voltex + * - Sound Voltex uses the note accuracy list slots as follows: + * Early: + * Error - Marvelous + * Near - Perfect + * Critical - Great + * S-Critical - Good + * Critical - Bad + * Near - OK + * Error - Miss + * - Sound Voltex stores EX score in Percentage. + * - Max Combo is Max Chain + * - Sound Voltex will store additional data about accuracy of note types as such: + * {"chip":{"scritical":0,"critical":0,"near":0,"error":0},"long":{"scritical":0,"error":0},"vol":{"scritical":0,"error":0},"gauge":,"gauge_pct":100} + * //Also storing what type of clear gauge was met and the % of the gauge. + * - Fail condition is <70% normal gauge. + * IIDX + * - Not going to support right now. + * + */ + public static void retrieveData(BufferedImage img) { + new LoveLiveReader().interpretBoxes(); + } +} +class Box{ + int x,y,w,h; + boolean ja_required; + final static int BOX_THRESHOLD=8; //How many pixels outside the specified region the score can be. + Box(int x,int y,int w, int h) { + this.x=x; + this.y=y; + this.w=w; + this.h=h; + } + boolean insideBox(int x,int y) { + return this.x-BOX_THRESHOLD<=x&&this.x+this.w+BOX_THRESHOLD>=x&&this.y-BOX_THRESHOLD<=y&&this.y+this.h+BOX_THRESHOLD>=y; + } +} +class LoveLiveReader extends Reader{ + LoveLiveReader(){ + readRegions.add(new Box(10,10,24,24)); + readRegions.add(new Box(10,40,24,24)); + readRegions.add(new Box(10,70,24,24)); + } + void interpretBoxes(){ + String dataString = readAllBoxes(); + System.out.println(dataString); + } +} +abstract class Reader{ + int score; + int rank; + int[] notes = new int[7]; + int difficulty; + String title; + int pct; + int maxcombo; + String other; + List readRegions = new ArrayList<>(); + String readAllBoxes() { try { - return Base64.getEncoder().encodeToString(Files.readAllBytes(file)); - } catch(IOException e) { + Process p = Runtime.getRuntime().exec("cat testBoxes.txt"); + InputStreamReader result = new InputStreamReader(p.getInputStream()); + StringBuilder sb = new StringBuilder(); + while (result.ready()) { + sb.append((char)result.read()); + } + result.close(); + return sb.toString(); + } catch (IOException e) { e.printStackTrace(); } return ""; diff --git a/sigPlace.java b/sigPlace.java index 5cabab7..a060432 100644 --- a/sigPlace.java +++ b/sigPlace.java @@ -48,7 +48,7 @@ public class sigPlace { "%FOOTER", Paths.get(REFDIR,"FOOTER.html")) )); public static void main(String[] args) { - System.out.println(ArcadeReader.fileToBase64String(Paths.get("sdvx.jpg"))); + ArcadeReader.retrieveData(null); /* Path secretFile = Paths.get(".clientsecret"); List data; try { @@ -577,4 +577,4 @@ public class sigPlace { } } -} \ No newline at end of file +}