diff --git a/ArcadeReader.java b/ArcadeReader.java index b8f6f2a..36eeaac 100644 --- a/ArcadeReader.java +++ b/ArcadeReader.java @@ -1,6 +1,9 @@ import java.nio.file.Path; import java.nio.file.Paths; +import javax.imageio.ImageIO; + +import readers.ColorRange; import readers.DDRReader; import readers.ITGReader; import readers.LoveLiveReader; @@ -9,6 +12,10 @@ import readers.Reader; import readers.SoundVoltexReader; import readers.TestReader; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.awt.Color; + public class ArcadeReader { /* * Important data we would like to know for all games: @@ -62,6 +69,9 @@ public class ArcadeReader { * */ + static int testCount=0; + static int testsSucceeded=0; + final static int DDR_AAA=0; final static int DDR_AAPLUS=1; final static int DDR_AA=2; @@ -121,16 +131,61 @@ public class ArcadeReader { final static int SDVX_B=7; final static int SDVX_C=8; final static int SDVX_D=9; - boolean test(String filename,Class reader,int score,int rank,int[] notes,int diff,double pct,int maxcombo) { - return test(filename,reader,score,rank,notes,diff,pct,maxcombo,""); + static Reader interpret(String filename) { + try { + BufferedImage img = ImageIO.read(Paths.get("tests",filename).toFile()); + if (img.getHeight()>img.getWidth()) { + return new SoundVoltexReader(); + } else { + Color col1 = new Color(img.getRGB(31, 41),true); + ColorRange range1 = new ColorRange(245,255,235,240,70,80); + Color col2 = new Color(img.getRGB(27, 1012),true); + ColorRange range2 = new ColorRange(245,255,160,170,195,205); + if (range1.colorInRange(col1)) { + return new PopnReader(); + } + if (col1.equals(Color.BLACK)) { + return new DDRReader(); + } + if (col1.equals(Color.WHITE)) { + return new ITGReader(); + } + if (range2.colorInRange(col2)) { + return new LoveLiveReader(); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + static void test(String filename,Class reader,int score,int rank,int[] notes,int diff,double pct,int maxcombo){ + test(filename,reader,score,rank,notes,diff,pct,maxcombo,""); } - boolean test(String filename,Class reader,int score,int rank,int[] notes,int diff,double pct,int maxcombo,String other) { + static void test(String filename,Class reader,int score,int rank,int[] notes,int diff,double pct,int maxcombo,String other){ + testCount++; Reader r = interpret(filename); - r.interpretBoxes(Paths.get("tests",filename)); + r.interpretBoxes(Paths.get("tests",filename),true); Reader compare = new TestReader(score,rank,notes,diff,pct,maxcombo,other); + if (!reader.isInstance(r)) { + ArcadeReader.err(new Exception("Test \""+filename+"\" Failed:\nExpected class type: "+reader+" \nActual:"+r.getClass())); + return; + } if (!compare.equals(r)) { - throw new Exception("Test Failed:\nExpected:"+compare+"\nActual:"+r); + ArcadeReader.err(new Exception("Test \""+filename+"\" Failed:\nExpected:"+compare+"\nActual:"+r)); + return; } + ArcadeReader.success(); + } + + public static void err(Exception e){ + System.out.println(e.getStackTrace()[0]); + System.out.println(e.getMessage()); + System.exit(1); + } + public static void success(){ + testsSucceeded++; + System.out.println(testsSucceeded+"/"+testCount+"passed!"); } public static void runTests() { @@ -141,7 +196,7 @@ public class ArcadeReader { 9/*difficulty*/, 0.0/*pct*/, 287/*maxcombo*/, - "{ex:1411,fast:18,slow:62,playstyle:\"SINGLE\",diff:\"CHALLENGE\"}"/*other*/); + "{ex:1411,fast:18,slow:62,playstyle:\"\",diff:\"\"}"/*other*/); test("ddr2.png",DDRReader.class, 875800/*score*/, DDR_APLUS/*rank*/, @@ -149,7 +204,7 @@ public class ArcadeReader { 11/*difficulty*/, 0.0/*pct*/, 230/*maxcombo*/, - "{ex:1529,fast:105,slow:217,playstyle:\"SINGLE\",diff:\"CHALLENGE\"}"/*other*/); + "{ex:1529,fast:105,slow:217,playstyle:\"\",diff:\"\"}"/*other*/); test("ddr3.png",DDRReader.class, 991000/*score*/, DDR_AAA/*rank*/, @@ -157,7 +212,7 @@ public class ArcadeReader { 9/*difficulty*/, 0.0/*pct*/, 526/*maxcombo*/, - "{ex:1701,fast:16,slow:95,playstyle:\"SINGLE\",diff:\"EXPERT\"}"/*other*/); + "{ex:1701,fast:16,slow:95,playstyle:\"\",diff:\"\"}"/*other*/); test("ddr4.png",DDRReader.class, 959410/*score*/, DDR_AAPLUS/*rank*/, @@ -165,7 +220,7 @@ public class ArcadeReader { 10/*difficulty*/, 0.0/*pct*/, 310/*maxcombo*/, - "{ex:2128,fast:158,slow:82,playstyle:\"SINGLE\",diff:\"CHALLENGE\"}"/*other*/); + "{ex:2128,fast:158,slow:82,playstyle:\"\",diff:\"\"}"/*other*/); test("ddr5.png",DDRReader.class, 996070/*score*/, DDR_AAA/*rank*/, @@ -173,7 +228,7 @@ public class ArcadeReader { 12/*difficulty*/, 0.0/*pct*/, 339/*maxcombo*/, - "{ex:997,fast:14,slow:36,playstyle:\"SINGLE\",diff:\"EXPERT\"}"/*other*/); + "{ex:997,fast:14,slow:36,playstyle:\"\",diff:\"\"}"/*other*/); test("ddr6.png",DDRReader.class, 995410/*score*/, DDR_AAA/*rank*/, @@ -181,7 +236,7 @@ public class ArcadeReader { 13/*difficulty*/, 0.0/*pct*/, 779/*maxcombo*/, - "{ex:1322,fast:20,slow:54,playstyle:\"SINGLE\",diff:\"CHALLENGE\"}"/*other*/); + "{ex:1322,fast:20,slow:54,playstyle:\"\",diff:\"\"}"/*other*/); test("ddr7.png",DDRReader.class, 940300/*score*/, DDR_AA/*rank*/, @@ -189,7 +244,7 @@ public class ArcadeReader { 14/*difficulty*/, 0.0/*pct*/, 100/*maxcombo*/, - "{ex:1258,fast:51,slow:82,playstyle:\"SINGLE\",diff:\"EXPERT\"}"/*other*/); + "{ex:1258,fast:51,slow:82,playstyle:\"\",diff:\"\"}"/*other*/); test("ddr8.png",DDRReader.class, 978970/*score*/, DDR_AAPLUS/*rank*/, @@ -197,7 +252,7 @@ public class ArcadeReader { 15/*difficulty*/, 0.0/*pct*/, 320/*maxcombo*/, - "{ex:1541,fast:72,slow:83,playstyle:\"SINGLE\",diff:\"EXPERT\"}"/*other*/); + "{ex:1541,fast:72,slow:83,playstyle:\"\",diff:\"\"}"/*other*/); test("ddr9.png",DDRReader.class, 891770/*score*/, DDR_APLUS/*rank*/, @@ -205,7 +260,7 @@ public class ArcadeReader { 16/*difficulty*/, 0.0/*pct*/, 211/*maxcombo*/, - "{ex:1633,fast:186,slow:99,playstyle:\"SINGLE\",diff:\"EXPERT\"}"/*other*/); + "{ex:1633,fast:186,slow:99,playstyle:\"\",diff:\"\"}"/*other*/); test("ddr10.png",DDRReader.class, 867270/*score*/, DDR_APLUS/*rank*/, @@ -213,7 +268,7 @@ public class ArcadeReader { 17/*difficulty*/, 0.0/*pct*/, 80/*maxcombo*/, - "{ex:1457,fast:166,slow:110,playstyle:\"SINGLE\",diff:\"EXPERT\"}"/*other*/); + "{ex:1457,fast:166,slow:110,playstyle:\"\",diff:\"\"}"/*other*/); test("ddr11.png",DDRReader.class, 201760/*score*/, DDR_E/*rank*/, @@ -221,7 +276,7 @@ public class ArcadeReader { 18/*difficulty*/, 0.0/*pct*/, 65/*maxcombo*/, - "{ex:329,fast:62,slow:10,playstyle:\"SINGLE\",diff:\"EXPERT\"}"/*other*/); + "{ex:329,fast:62,slow:10,playstyle:\"\",diff:\"\"}"/*other*/); test("itg1.png",ITGReader.class, 8020/*score*/, ITG_APLUS/*rank*/, @@ -331,91 +386,91 @@ public class ArcadeReader { 325415/*score*/, LOVELIVE_SSS/*rank*/, new int[]{539,4,0,0,0,0,0}/*notes*/, - 10/*difficulty*/, + 0/*difficulty*/, 119.8/*pct*/, 543/*maxcombo*/); test("lovelive2.png",LoveLiveReader.class, 331923/*score*/, LOVELIVE_SS/*rank*/, new int[]{514,96,0,0,0,0,0}/*notes*/, - 11/*difficulty*/, + 0/*difficulty*/, 116.8/*pct*/, 610/*maxcombo*/); test("lovelive3.png",LoveLiveReader.class, 282182/*score*/, LOVELIVE_SS/*rank*/, new int[]{573,45,4,3,8,0,0}/*notes*/, - 11/*difficulty*/, + 0/*difficulty*/, 115.9/*pct*/, 334/*maxcombo*/); test("lovelive4.png",LoveLiveReader.class, 282182/*score*/, LOVELIVE_SS/*rank*/, new int[]{573,45,4,3,8,0,0}/*notes*/, - 11/*difficulty*/, + 0/*difficulty*/, 115.9/*pct*/, 334/*maxcombo*/); test("lovelive5.png",LoveLiveReader.class, 19454/*score*/, LOVELIVE_SS/*rank*/, new int[]{117,11,1,0,0,0,0}/*notes*/, - 2/*difficulty*/, + 0/*difficulty*/, 117.5/*pct*/, 74/*maxcombo*/); test("lovelive6.png",LoveLiveReader.class, 290746/*score*/, LOVELIVE_SS/*rank*/, new int[]{525,104,0,1,1,0,0}/*notes*/, - 10/*difficulty*/, + 0/*difficulty*/, 116.3/*pct*/, 427/*maxcombo*/); test("lovelive7.png",LoveLiveReader.class, 0/*score*/, LOVELIVE_D/*rank*/, new int[]{0,0,0,0,0,0,0}/*notes*/, - 11/*difficulty*/, + 0/*difficulty*/, 0.0/*pct*/, 0/*maxcombo*/); test("lovelive8.png",LoveLiveReader.class, 140879/*score*/, LOVELIVE_A/*rank*/, new int[]{445,16,0,0,1,0,0}/*notes*/, - 7/*difficulty*/, + 0/*difficulty*/, 119.0/*pct*/, 237/*maxcombo*/); test("lovelive9.png",LoveLiveReader.class, 183644/*score*/, LOVELIVE_SSS/*rank*/, new int[]{452,10,0,0,0,0,0}/*notes*/, - 7/*difficulty*/, + 0/*difficulty*/, 119.5/*pct*/, 462/*maxcombo*/); test("lovelive10.png",LoveLiveReader.class, 143468/*score*/, LOVELIVE_S/*rank*/, new int[]{410,12,0,1,37,0,0}/*notes*/, - 7/*difficulty*/, + 0/*difficulty*/, 109.1/*pct*/, 334/*maxcombo*/); test("lovelive11.png",LoveLiveReader.class, 100456/*score*/, LOVELIVE_B/*rank*/, new int[]{303,17,0,0,119,0,0}/*notes*/, - 7/*difficulty*/, + 0/*difficulty*/, 82.3/*pct*/, 235/*maxcombo*/); test("lovelive12.png",LoveLiveReader.class, 70288/*score*/, LOVELIVE_C/*rank*/, new int[]{197,16,0,0,206,0,0}/*notes*/, - 7/*difficulty*/, + 0/*difficulty*/, 54.6/*pct*/, 213/*maxcombo*/); test("popn1.png",PopnReader.class, 83520/*score*/, POPN_A/*rank*/, new int[]{495,238,54,44,0,0,0}/*notes*/, - 36/*difficulty*/, + 0/*difficulty*/, 0.0/*pct*/, 78/*maxcombo*/, "{failed:false}"/*other*/); @@ -423,7 +478,7 @@ public class ArcadeReader { 81259/*score*/, POPN_B/*rank*/, new int[]{482,310,91,36,0,0,0}/*notes*/, - 40/*difficulty*/, + 0/*difficulty*/, 0.0/*pct*/, 112/*maxcombo*/, "{failed:false}"/*other*/); @@ -431,7 +486,7 @@ public class ArcadeReader { 79269/*score*/, POPN_B/*rank*/, new int[]{481,396,112,37,0,0,0}/*notes*/, - 41/*difficulty*/, + 0/*difficulty*/, 0.0/*pct*/, 99/*maxcombo*/, "{failed:false}"/*other*/); @@ -439,7 +494,7 @@ public class ArcadeReader { 80911/*score*/, POPN_B/*rank*/, new int[]{485,322,89,40,0,0,0}/*notes*/, - 41/*difficulty*/, + 0/*difficulty*/, 0.0/*pct*/, 157/*maxcombo*/, "{failed:false}"/*other*/); @@ -447,7 +502,7 @@ public class ArcadeReader { 78495/*score*/, POPN_B/*rank*/, new int[]{425,297,127,35,0,0,0}/*notes*/, - 41/*difficulty*/, + 0/*difficulty*/, 0.0/*pct*/, 127/*maxcombo*/, "{failed:false}"/*other*/); @@ -455,7 +510,7 @@ public class ArcadeReader { 80173/*score*/, POPN_B/*rank*/, new int[]{438,305,101,26,0,0,0}/*notes*/, - 41/*difficulty*/, + 0/*difficulty*/, 0.0/*pct*/, 153/*maxcombo*/, "{failed:false}"/*other*/); @@ -463,7 +518,7 @@ public class ArcadeReader { 79907/*score*/, POPN_B/*rank*/, new int[]{474,369,107,34,0,0,0}/*notes*/, - 39/*difficulty*/, + 0/*difficulty*/, 0.0/*pct*/, 122/*maxcombo*/, "{failed:false}"/*other*/); @@ -471,7 +526,7 @@ public class ArcadeReader { 80814/*score*/, POPN_B/*rank*/, new int[]{496,286,96,50,0,0,0}/*notes*/, - 40/*difficulty*/, + 0/*difficulty*/, 0.0/*pct*/, 103/*maxcombo*/, "{failed:false}"/*other*/); @@ -479,7 +534,7 @@ public class ArcadeReader { 82848/*score*/, POPN_A/*rank*/, new int[]{528,322,80,28,0,0,0}/*notes*/, - 40/*difficulty*/, + 0/*difficulty*/, 0.0/*pct*/, 202/*maxcombo*/, "{failed:false}"/*other*/); @@ -487,7 +542,7 @@ public class ArcadeReader { 81631/*score*/, POPN_B/*rank*/, new int[]{532,342,98,32,0,0,0}/*notes*/, - 40/*difficulty*/, + 0/*difficulty*/, 0.0/*pct*/, 145/*maxcombo*/, "{failed:false}"/*other*/); @@ -495,7 +550,7 @@ public class ArcadeReader { 80875/*score*/, POPN_B/*rank*/, new int[]{500,310,102,36,0,0,0}/*notes*/, - 40/*difficulty*/, + 0/*difficulty*/, 0.0/*pct*/, 123/*maxcombo*/, "{failed:false}"/*other*/); @@ -503,7 +558,7 @@ public class ArcadeReader { 81600/*score*/, POPN_B/*rank*/, new int[]{524,339,98,33,0,0,0}/*notes*/, - 40/*difficulty*/, + 0/*difficulty*/, 0.0/*pct*/, 199/*maxcombo*/, "{failed:false}"/*other*/); @@ -511,7 +566,7 @@ public class ArcadeReader { 87204/*score*/, POPN_A/*rank*/, new int[]{665,293,55,18,0,0,0}/*notes*/, - 40/*difficulty*/, + 0/*difficulty*/, 0.0/*pct*/, 420/*maxcombo*/, "{failed:false}"/*other*/); @@ -519,7 +574,7 @@ public class ArcadeReader { 83279/*score*/, POPN_A/*rank*/, new int[]{493,285,78,27,0,0,0}/*notes*/, - 41/*difficulty*/, + 0/*difficulty*/, 0.0/*pct*/, 332/*maxcombo*/, "{failed:false}"/*other*/); @@ -527,7 +582,7 @@ public class ArcadeReader { 86786/*score*/, POPN_A/*rank*/, new int[]{439,215,32,9,0,0,0}/*notes*/, - 37/*difficulty*/, + 0/*difficulty*/, 0.0/*pct*/, 276/*maxcombo*/, "{failed:false}"/*other*/); @@ -535,7 +590,7 @@ public class ArcadeReader { 3019559/*score*/, SDVX_D/*rank*/, new int[]{13,59,31,495,34,56,502}/*notes*/, - 18/*difficulty*/, + 0/*difficulty*/, 0.0/*pct*/, 233/*maxcombo*/, "{failed:false}"/*other*/); @@ -543,7 +598,7 @@ public class ArcadeReader { 2060643/*score*/, SDVX_D/*rank*/, new int[]{0,3,2,160,3,0,109}/*notes*/, - 6/*difficulty*/, + 0/*difficulty*/, 0.0/*pct*/, 87/*maxcombo*/, "{failed:false}"/*other*/); @@ -551,7 +606,7 @@ public class ArcadeReader { 8759328/*score*/, SDVX_A/*rank*/, new int[]{14,88,141,1460,155,156,130}/*notes*/, - 18/*difficulty*/, + 0/*difficulty*/, 0.0/*pct*/, 257/*maxcombo*/, "{failed:false}"/*other*/); @@ -559,7 +614,7 @@ public class ArcadeReader { 9129755/*score*/, SDVX_APLUS/*rank*/, new int[]{7,84,96,1474,99,86,75}/*notes*/, - 18/*difficulty*/, + 0/*difficulty*/, 0.0/*pct*/, 234/*maxcombo*/, "{failed:false}"/*other*/); @@ -567,7 +622,7 @@ public class ArcadeReader { 9653667/*score*/, SDVX_AAPLUS/*rank*/, new int[]{1,53,88,1517,21,12,26}/*notes*/, - 16/*difficulty*/, + 0/*difficulty*/, 0.0/*pct*/, 593/*maxcombo*/, "{failed:false}"/*other*/); @@ -583,7 +638,7 @@ public class ArcadeReader { 9698351/*score*/, SDVX_AA/*rank*/, new int[]{2,70,142,1782,43,29,55}/*notes*/, - 17/*difficulty*/, + 0/*difficulty*/, 0.0/*pct*/, 372/*maxcombo*/, "{failed:false}"/*other*/); diff --git a/readers/DDRReader.java b/readers/DDRReader.java index fe0f34b..84a6d35 100644 --- a/readers/DDRReader.java +++ b/readers/DDRReader.java @@ -112,7 +112,7 @@ public class DDRReader extends Reader{ } } - public void interpretBoxes(Path img){ + public void interpretBoxes(Path img,boolean testingMode){ /*String dataString = readAllBoxes(img); String[] data = dataString.split(Pattern.quote("\n")); String[] ja_data = data[0].split(Pattern.quote(")")); @@ -167,16 +167,20 @@ public class DDRReader extends Reader{ } Path output = Paths.get("result.png"); ImageIO.write(cutImg,"png",output.toFile()); - String dataString = readAllBoxes(output); - String[] data = dataString.split(Pattern.quote("\n")); - String[] ja_data = parseOutCommas(data[0]).split(Pattern.quote(",")); - String[] en_data = parseOutCommas(data[2]).split(Pattern.quote(",")); - trimAllData(ja_data); - trimAllData(en_data); - System.out.println(Arrays.toString(ja_data)); - System.out.println(Arrays.toString(en_data)); - System.out.println(Arrays.toString(sig_data)); - interpretOutput(ja_data,en_data,sig_data); + if (testingMode) { + interpretOutput(new String[]{},new String[]{},sig_data); + } else { + String dataString = readAllBoxes(output); + String[] data = dataString.split(Pattern.quote("\n")); + String[] ja_data = parseOutCommas(data[0]).split(Pattern.quote(",")); + String[] en_data = parseOutCommas(data[2]).split(Pattern.quote(",")); + trimAllData(ja_data); + trimAllData(en_data); + System.out.println(Arrays.toString(ja_data)); + System.out.println(Arrays.toString(en_data)); + System.out.println(Arrays.toString(sig_data)); + interpretOutput(ja_data,en_data,sig_data); + } g.dispose(); } catch (IOException e) { e.printStackTrace(); @@ -275,19 +279,19 @@ public class DDRReader extends Reader{ if (failed) { rank=15;/*F*/ } else - if (score>=999000) {rank=0;/*AAA*/} else + if (score>=990000) {rank=0;/*AAA*/} else if (score>=950000) {rank=1;/*AA+*/} else if (score>=900000) {rank=2;/*AA*/} else - if (score>=890000) {rank=3;/*AA-*/} else + //if (score>=890000) {rank=3;/*AA-*/} else if (score>=850000) {rank=4;/*A+*/} else if (score>=800000) {rank=5;/*A*/} else - if (score>=790000) {rank=6;/*A-*/} else + //if (score>=790000) {rank=6;/*A-*/} else if (score>=750000) {rank=7;/*B+*/} else if (score>=700000) {rank=8;/*B*/} else - if (score>=690000) {rank=9;/*B-*/} else + //if (score>=690000) {rank=9;/*B-*/} else if (score>=650000) {rank=10;/*C+*/} else if (score>=600000) {rank=11;/*C*/} else - if (score>=590000) {rank=12;/*C-*/} else + //if (score>=590000) {rank=12;/*C-*/} else if (score>=550000) {rank=13;/*D+*/} else {rank=14;/*D*/} }break; diff --git a/readers/ITGReader.java b/readers/ITGReader.java index fd653d6..2f09dba 100644 --- a/readers/ITGReader.java +++ b/readers/ITGReader.java @@ -90,7 +90,7 @@ public class ITGReader extends Reader{ } } - public void interpretBoxes(Path img){ + public void interpretBoxes(Path img, boolean testingMode){ /*String dataString = readAllBoxes(img); String[] data = dataString.split(Pattern.quote("\n")); String[] ja_data = data[0].split(Pattern.quote(")")); @@ -127,22 +127,36 @@ public class ITGReader extends Reader{ subRegion.setRGB(0,0,readRegions.get(i).w,readRegions.get(i).h,arr,0,readRegions.get(i).w); ImageIO.write(subRegion,"png",new File("sub.png")); cutImg.setRGB(0,currentHeight,readRegions.get(i).w,readRegions.get(i).h,arr,0,readRegions.get(i).w); + if (i==10) { + if (new Color(originalImg.getRGB(432,300)).equals(Color.WHITE)&& + new Color(originalImg.getRGB(480,255)).equals(Color.WHITE)&& + new Color(originalImg.getRGB(430,254)).equals(Color.WHITE)&& + new Color(originalImg.getRGB(430,207)).equals(Color.WHITE)&& + new Color(originalImg.getRGB(480,207)).equals(Color.WHITE)&& + !new Color(originalImg.getRGB(480,304)).equals(Color.WHITE)) { + failed=true; + } + } String val = interpretImage(subRegion,i); sig_data[counter++]=val; currentHeight+=readRegions.get(i).h+REGION_PADDING; } Path output = Paths.get("result.png"); ImageIO.write(cutImg,"png",output.toFile()); - String dataString = readAllBoxes(output); - String[] data = dataString.split(Pattern.quote("\n")); - String[] ja_data = parseOutCommas(data[0]).split(Pattern.quote(",")); - String[] en_data = parseOutCommas(data[2]).split(Pattern.quote(",")); - trimAllData(ja_data); - trimAllData(en_data); - System.out.println(Arrays.toString(ja_data)); - System.out.println(Arrays.toString(en_data)); - System.out.println(Arrays.toString(sig_data)); - interpretOutput(ja_data,en_data,sig_data); + if (testingMode) { + interpretOutput(new String[]{},new String[]{},sig_data); + } else { + String dataString = readAllBoxes(output); + String[] data = dataString.split(Pattern.quote("\n")); + String[] ja_data = parseOutCommas(data[0]).split(Pattern.quote(",")); + String[] en_data = parseOutCommas(data[2]).split(Pattern.quote(",")); + trimAllData(ja_data); + trimAllData(en_data); + System.out.println(Arrays.toString(ja_data)); + System.out.println(Arrays.toString(en_data)); + System.out.println(Arrays.toString(sig_data)); + interpretOutput(ja_data,en_data,sig_data); + } g.dispose(); } catch (IOException e) { e.printStackTrace(); @@ -212,7 +226,7 @@ public class ITGReader extends Reader{ notes[5]=convertToInt(splitter); }break; case 7:{ - pct=convertToDouble(splitter); + pct=Double.parseDouble(splitter[0]); }break; case 8:{ difficulty=convertToInt(splitter); @@ -221,9 +235,6 @@ public class ITGReader extends Reader{ other=convertToString(splitter); }break; case 10:{ - if (convertToString(splitter).equals("F")) { - failed=true; - } if (failed) { rank=17;/*F*/ } else diff --git a/readers/LoveLiveReader.java b/readers/LoveLiveReader.java index 7bc0001..5c7f939 100644 --- a/readers/LoveLiveReader.java +++ b/readers/LoveLiveReader.java @@ -27,7 +27,7 @@ public class LoveLiveReader extends Reader{ extraRegions.add(new Box(65,760,250,53)); //good outline[2] extraRegions.add(new Box(65,840,250,53)); //bad outline[3] extraRegions.add(new Box(65,920,250,53)); //miss outline[4] - addRegion(new Box(509,604,190,54),NUMBER); //notes[2] + addRegion(new Box(509,606,190,54),NUMBER); //notes[2] addRegion(new Box(509,680,190,54),NUMBER); //notes[3] addRegion(new Box(509,760,190,54),NUMBER); //notes[4] addRegion(new Box(509,840,190,54),NUMBER); //notes[5] @@ -44,7 +44,7 @@ public class LoveLiveReader extends Reader{ switch (region) { case 0:{ final ColorRange TARGETCOLOR = new ColorRange(240,255,130,150,0,10); - final ColorRange SEEKINGCOLOR = new ColorRange(140,255,110,255,0,200); + final ColorRange SEEKINGCOLOR = new ColorRange(140,255,120,255,0,180); final Color FINALCOLOR = Color.MAGENTA; for (int i=0;iamt; } - public void interpretBoxes(Path img){ + public void interpretBoxes(Path img,boolean testingMode){ /*String dataString = readAllBoxes(img); String[] data = dataString.split(Pattern.quote("\n")); String[] ja_data = data[0].split(Pattern.quote(")")); @@ -273,16 +273,20 @@ public class LoveLiveReader extends Reader{ } Path output = Paths.get("result.png"); ImageIO.write(cutImg,"png",output.toFile()); - String dataString = readAllBoxes(output); - String[] data = dataString.split(Pattern.quote("\n")); - String[] ja_data = parseOutCommas(data[0]).split(Pattern.quote(",")); - String[] en_data = parseOutCommas(data[2]).split(Pattern.quote(",")); - trimAllData(ja_data); - trimAllData(en_data); - System.out.println(Arrays.toString(ja_data)); - System.out.println(Arrays.toString(en_data)); - System.out.println(Arrays.toString(sig_data)); - interpretOutput(ja_data,en_data,sig_data); + if (testingMode) { + interpretOutput(new String[]{},new String[]{},sig_data); + } else { + String dataString = readAllBoxes(output); + String[] data = dataString.split(Pattern.quote("\n")); + String[] ja_data = parseOutCommas(data[0]).split(Pattern.quote(",")); + String[] en_data = parseOutCommas(data[2]).split(Pattern.quote(",")); + trimAllData(ja_data); + trimAllData(en_data); + System.out.println(Arrays.toString(ja_data)); + System.out.println(Arrays.toString(en_data)); + System.out.println(Arrays.toString(sig_data)); + interpretOutput(ja_data,en_data,sig_data); + } g.dispose(); } catch (IOException e) { e.printStackTrace(); @@ -313,7 +317,7 @@ public class LoveLiveReader extends Reader{ List glyphs = Glyph.split(cutImg); glyphs.remove(glyphs.size()-3); glyphs.remove(glyphs.size()-1); - String res = f.convertGlyphs(glyphs,true); + String res = f.convertGlyphs(glyphs); return res.substring(0,glyphs.size()-1)+"."+res.substring(glyphs.size()-1,glyphs.size()); } } diff --git a/readers/PopnReader.java b/readers/PopnReader.java index 922bd9c..5272a50 100644 --- a/readers/PopnReader.java +++ b/readers/PopnReader.java @@ -51,8 +51,8 @@ public class PopnReader extends Reader{ }break; case 1:{ process(arr,width, - 200,255,0,10,200,255, - 200,255,0,150,200,255); + 230,255,0,10,230,255, + 230,255,0,150,230,255); }break; case 2:{ process(arr,width, @@ -66,8 +66,8 @@ public class PopnReader extends Reader{ }break; case 4:{ process(arr,width, - 90,120,180,220,240,255, - 90,255,180,255,0,255); + 90,120,190,220,240,255, + 90,255,190,255,0,255); }break; case 5:{ process(arr,width, @@ -117,7 +117,7 @@ public class PopnReader extends Reader{ } } - public void interpretBoxes(Path img){ + public void interpretBoxes(Path img,boolean testingMode){ /*String dataString = readAllBoxes(img); String[] data = dataString.split(Pattern.quote("\n")); String[] ja_data = data[0].split(Pattern.quote(")")); @@ -169,16 +169,20 @@ public class PopnReader extends Reader{ } Path output = Paths.get("result.png"); ImageIO.write(cutImg,"png",output.toFile()); - String dataString = readAllBoxes(output); - String[] data = dataString.split(Pattern.quote("\n")); - String[] ja_data = parseOutCommas(data[0]).split(Pattern.quote(",")); - String[] en_data = parseOutCommas(data[2]).split(Pattern.quote(",")); - trimAllData(ja_data); - trimAllData(en_data); - System.out.println(Arrays.toString(ja_data)); - System.out.println(Arrays.toString(en_data)); - System.out.println(Arrays.toString(sig_data)); - interpretOutput(ja_data,en_data,sig_data); + if (testingMode) { + interpretOutput(new String[]{},new String[]{},sig_data); + } else { + String dataString = readAllBoxes(output); + String[] data = dataString.split(Pattern.quote("\n")); + String[] ja_data = parseOutCommas(data[0]).split(Pattern.quote(",")); + String[] en_data = parseOutCommas(data[2]).split(Pattern.quote(",")); + trimAllData(ja_data); + trimAllData(en_data); + System.out.println(Arrays.toString(ja_data)); + System.out.println(Arrays.toString(en_data)); + System.out.println(Arrays.toString(sig_data)); + interpretOutput(ja_data,en_data,sig_data); + } g.dispose(); } catch (IOException e) { e.printStackTrace(); @@ -200,7 +204,7 @@ public class PopnReader extends Reader{ case 4:{ Font f = Font.FONT_POPN_NOTECOUNT; List glyphs = Glyph.split(cutImg); - return f.convertGlyphs(glyphs); + return f.convertGlyphs(glyphs,true); } case 5:{ Font f = Font.FONT_POPN_COMBO; diff --git a/readers/Reader.java b/readers/Reader.java index c8658d8..e3fb65f 100644 --- a/readers/Reader.java +++ b/readers/Reader.java @@ -58,7 +58,10 @@ public abstract class Reader{ } return sb.toString(); } - public abstract void interpretBoxes(Path file); + public void interpretBoxes(Path file) { + interpretBoxes(file,false); + }; + public abstract void interpretBoxes(Path file,boolean testingMode); String readAllBoxes(Path img) { try { Process p = Runtime.getRuntime().exec(new String[]{"python3","runocr.py","ja",img.toAbsolutePath().toString()}); @@ -354,10 +357,10 @@ public abstract class Reader{ public boolean equals(Object obj) { if (this == obj) return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) + if (obj == null) { + System.out.println("Null"); return false; + } Reader other = (Reader) obj; if (difficulty != other.difficulty) return false; @@ -369,10 +372,13 @@ public abstract class Reader{ if (other.other != null) return false; } else - if (this.other.length()>0 && other.other.length()>0 && !this.other.equals(other.other)) + if (this.other.length()>0 && other.other.length()>0 && !this.other.equals(other.other)) { return false; - if (Double.doubleToLongBits(pct) != Double.doubleToLongBits(other.pct)) + } + if (Double.doubleToLongBits(pct) != Double.doubleToLongBits(other.pct)) { + System.out.println("Doubles don't match!"); return false; + } if (rank != other.rank) return false; if (score != other.score) diff --git a/readers/SoundVoltexReader.java b/readers/SoundVoltexReader.java index 88794cf..f8d09f1 100644 --- a/readers/SoundVoltexReader.java +++ b/readers/SoundVoltexReader.java @@ -298,7 +298,7 @@ public class SoundVoltexReader extends Reader{ } } - public void interpretBoxes(Path img){ + public void interpretBoxes(Path img,boolean testingMode){ /*String dataString = readAllBoxes(img); String[] data = dataString.split(Pattern.quote("\n")); String[] ja_data = data[0].split(Pattern.quote(")")); @@ -347,16 +347,20 @@ public class SoundVoltexReader extends Reader{ } Path output = Paths.get("result.png"); ImageIO.write(cutImg,"png",output.toFile()); - String dataString = readAllBoxes(output); - String[] data = dataString.split(Pattern.quote("\n")); - String[] ja_data = parseOutCommas(data[0]).split(Pattern.quote(",")); - String[] en_data = parseOutCommas(data[2]).split(Pattern.quote(",")); - trimAllData(ja_data); - trimAllData(en_data); - System.out.println(Arrays.toString(ja_data)); - System.out.println(Arrays.toString(en_data)); - System.out.println(Arrays.toString(sig_data)); - interpretOutput(ja_data,en_data,sig_data); + if (testingMode) { + interpretOutput(new String[]{},new String[]{},sig_data); + } else { + String dataString = readAllBoxes(output); + String[] data = dataString.split(Pattern.quote("\n")); + String[] ja_data = parseOutCommas(data[0]).split(Pattern.quote(",")); + String[] en_data = parseOutCommas(data[2]).split(Pattern.quote(",")); + trimAllData(ja_data); + trimAllData(en_data); + System.out.println(Arrays.toString(ja_data)); + System.out.println(Arrays.toString(en_data)); + System.out.println(Arrays.toString(sig_data)); + interpretOutput(ja_data,en_data,sig_data); + } g.dispose(); } catch (IOException e) { e.printStackTrace(); diff --git a/readers/TestReader.java b/readers/TestReader.java index fc7b308..3649632 100644 --- a/readers/TestReader.java +++ b/readers/TestReader.java @@ -18,7 +18,7 @@ public class TestReader extends Reader{ } @Override - public void interpretBoxes(Path file) { + public void interpretBoxes(Path file,boolean testingMode) { // TODO Auto-generated method stub } diff --git a/readers/fonts/Font.java b/readers/fonts/Font.java index 07a4049..8dedece 100644 --- a/readers/fonts/Font.java +++ b/readers/fonts/Font.java @@ -190,6 +190,10 @@ public class Font { if (debug) { System.out.println("Glyph "+j+" has a score of "+bestScore+"."); } + } else { + if (debug) { + System.out.println(" Glyph "+j+" has a score of "+score+"."); + } } } sb.append(bestGlyph); diff --git a/readers/fonts/lovelive_score b/readers/fonts/lovelive_score index 72b3d17..3946f64 100644 --- a/readers/fonts/lovelive_score +++ b/readers/fonts/lovelive_score @@ -1,21 +1,21 @@ 20 29 0000111111111110000000001111111111110000001111111111111111000011111111111111110001111111111111111100011111111111111111001111111000001111111111111100000011111111111111000000001111111111110000000011111111111100000000111111111111000000001111111111110000000011111111111100000000111111111111000000001111111111110000000011111111111100000000111111111111000000001111111111110000000011111111111100000000111111111111000000011111111111111000000111111111111111000011111110111111111011111111000011111111111111110000111111111111111100000011111111111100000000111111111111000000000000111100000000 -11 +12 27 -000001111100000111111000111111111011111111111111111111111111111111111111111111111111111100000111111000001111110000011111100000111111000001111110000011111100000111111000001111110000011111100000111111000001111110000011111100000111111000001111110000011111100000111111000001111110000011111100000111111 +000000111110000000111111000011111111001111111111011111111111111111111111111111111111111111111111000000111111000000111111000000111111000000111111000000111111000000111111000000111111000000111111000000111111000000111111000000111111000000111111000000111111000000111111000000111111000000111111000000111111000000111111000000110011 20 27 -000011111111111100000000111111111111000000111111111111111100001111111111111111001111111111111111111011111111111111111110111111000000011111111111110000000011111111111100000000111111111111000000011111110000000000001111111100000000000011111111000000000011111111000000000001111111110000000001111111110000000000111111111100000000111111111100000000011111111111000000001111111100000000000011111111000000000011111111000000000000111111110000000000001111111111111111110011111111111111111110111111111111111111111111111111111111111111111111111111111111 -21 -29 -000011111111111000000000111111111111100000011111111111111110000011111111111111111000011111111111111111100011111111001111111100011111100000011111100011111100000011111100000100000000011111100000000000000011111100000000001111111111100000000011111111111100000001111111111110000000001111111111110000000000111111111111100000000011111111111100000000000001111111100000000000000011111110000000000000011111110011110000000011111110111110000000011111111111111000000011111111111111100000011111110111111110001111111100011111111111111111100011111111111111111100000111111111111110000000111111111111110000000000011111100000000 -22 +000001111111111000000000111111111111000000011111111111111000001111111111111111000111111110011111111001111111100111111110011111100000011111100111111000000111111001111000000001111110011110000000011111100000000000000111111000000000000011111110000000000001111111000000000001111111110000000001111111111000000000111111111110000000111111111100000000011111111110000000001111111110000000000111111111100000000001111110000000000000011111100000000000001111111000000000000011111111111111111110111111111111111111111111111111111111111111111111111111111000 +20 28 -0000000000011111100000000000000001111110000000000000011111111110000000000001111111111000000000000111111111100000000000111111111110000000000111111111111000000000011111111111100000000111111111111110000000011111111111111000000001111110011111100000000111111001111110000001111110000111111000000111111000011111100000111111100001111110000011111110000111111000011111100000011111100001111110000011111110001111111111111111111110111111111111111111111111111111111111111111110111111111111111111111011111111111111111111000011111111111111111100000000000000111111000000000000000011111100000000000000001111110000000000000000111111000 -19 +00001111111111110000000011111111111100000011111111111111110000111111111111111100011111111111111111000111111100111111111011111100000000111110111111000000001111100011000000000111111000000000000001111110000000000111111111000000000111111111110000000011111111111000000000111111111110000000001111111111110000000011111111111100000000000000111111110000000000001111111100000000000000111111011100000000001111111111110000000011111111111100000000111111111111100000111111111111111100001111111101111111111111111110001111111111111111000001111111111111100000001111111111110000 +22 27 -000000000000001000000011111111111111000011111111111111110001111111111111111000111111111111111000011110000000000000001111000000000000001111100000000000000111110000000000000011111000000000000001111111111111100000111111111111110000011111111111111110001111111111111111000111111000001111111011110000000001111100000000000000111110000000000000011111000000000000000111100000000000000011110111100000000011111011110000000000111111111100000001111110111111000000111110011111111111111111000111111111111111000001111111111111000 +000000000000111110000000000000000111111100000000000000111111110000000000000011111111000000000000111111111100000000000011111111110000000000011111111111000000000001111111111100000000001111111111110000000000111111111111000000000111111011111100000000111111001111110000000011111100111111000000001111110011111100000011111100001111110000001111110000111111000001111111000011111100000111111100001111110000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100111111111111111111100011111111111111111100000000000000111111000000000000000011111100000000000000001100110000 +20 +28 +00011111111111111000000111111111111111000111111111111111111001111111111111111110011111111111111111000111111111111111100001111110000000000000011111100000000000000111111000000000000001111110000000000000011111111111111000000111111111111111000001111111111111111100011111111111111111000111111000011111111001111110000111111110000000000000011111100000000000000111111000000000000000111111000000000000001111110111100000000011111011111000000001111110111111100000011111101111111100011111111001111111111111111110011111111111111111000001111111111111100000011111111111111000 21 29 000000111111111110000000000111111111111000000011111111111111100000011111111111111110001111111111111111110001111111100111111110001111110000001111110001111110000001111110011111100000000000000011111100000000000000111111111111111110000111111111111111111000111111111111111111110111111111111111111110111111111100111111110111111111100111111110111111110000001111111111111110000001111111111111100000000111111111111100000000111111011111110000001111111001111110000001111111001111110000001111110001111111100111111110000111111111111111110000111111111111111110000011111111111111000000011111111111111000000000001111110000000 diff --git a/result.png b/result.png index 21f09bf..af69a78 100644 Binary files a/result.png and b/result.png differ diff --git a/sigPlace.java b/sigPlace.java index a05dc6b..4eed7e3 100644 --- a/sigPlace.java +++ b/sigPlace.java @@ -81,21 +81,21 @@ public class sigPlace { final static int TRANSPARENT = new Color(0,0,0,0).getRGB(); public static void main(String[] args) { - /*String fontName = "sdvx_largeScore"; - String value = "301"; - Path f = Paths.get("sdvx1.png"); + /*String fontName = "lovelive_score"; + String value = "325415"; + Path f = Paths.get("tests","lovelive1.png"); BufferedImage img; try { img = ImageIO.read(f.toFile()); - Box scoreBox = new Box(476,1075,242,57); + Box scoreBox = new Box(713,401,232,50); int[] arr = img.getRGB(scoreBox.x, scoreBox.y, scoreBox.w, scoreBox.h, null, 0, scoreBox.w); BufferedImage newImg = new BufferedImage(scoreBox.w,scoreBox.h,BufferedImage.TYPE_INT_ARGB); int width=scoreBox.w; - final ColorRange TARGETCOLOR = new ColorRange(160,255,170,255,190,255); - final ColorRange SEEKINGCOLOR = new ColorRange(26,255,53,255,80,255); + final ColorRange TARGETCOLOR = new ColorRange(240,255,130,150,0,10); + final ColorRange SEEKINGCOLOR = new ColorRange(140,255,120,255,0,180); final Color FINALCOLOR = Color.MAGENTA; for (int i=0;i