Revision 7ac0ee88
Added by Leszek Koltunski over 2 years ago
src/main/java/org/distorted/network/RubikScores.java | ||
---|---|---|
27 | 27 |
|
28 | 28 |
import com.google.firebase.crashlytics.FirebaseCrashlytics; |
29 | 29 |
|
30 |
import static org.distorted.objectlib.main.ObjectList.MAX_NUM_OBJECTS; |
|
31 | 30 |
import static org.distorted.objectlib.main.ObjectList.NUM_OBJECTS; |
32 | 31 |
import static org.distorted.objectlib.main.ObjectList.MAX_LEVEL; |
33 | 32 |
|
... | ... | |
43 | 42 |
public static final long NO_RECORD = Long.MAX_VALUE; |
44 | 43 |
private static RubikScores mThis; |
45 | 44 |
|
46 |
private final long[][][] mRecords;
|
|
47 |
private final int [][][] mSubmitted;
|
|
45 |
private final long[][] mRecords; |
|
46 |
private final int [][] mSubmitted; |
|
48 | 47 |
|
49 | 48 |
private String mName, mCountry; |
50 | 49 |
private boolean mNameIsVerified; |
... | ... | |
57 | 56 |
|
58 | 57 |
private RubikScores() |
59 | 58 |
{ |
60 |
mRecords = new long[NUM_OBJECTS][MAX_NUM_OBJECTS][MAX_LEVEL];
|
|
61 |
mSubmitted = new int [NUM_OBJECTS][MAX_NUM_OBJECTS][MAX_LEVEL];
|
|
59 |
mRecords = new long[NUM_OBJECTS][MAX_LEVEL]; |
|
60 |
mSubmitted = new int [NUM_OBJECTS][MAX_LEVEL]; |
|
62 | 61 |
|
63 | 62 |
for(int i=0; i<NUM_OBJECTS; i++) |
64 |
for(int j=0; j<MAX_NUM_OBJECTS; j++) |
|
65 |
for(int k=0; k<MAX_LEVEL; k++) |
|
66 |
{ |
|
67 |
mRecords[i][j][k] = NO_RECORD; |
|
68 |
mSubmitted[i][j][k] = 0; |
|
69 |
} |
|
63 |
for(int j=0; j<MAX_LEVEL; j++) |
|
64 |
{ |
|
65 |
mRecords[i][j] = NO_RECORD; |
|
66 |
mSubmitted[i][j] = 0; |
|
67 |
} |
|
70 | 68 |
|
71 | 69 |
mName = ""; |
72 | 70 |
mCountry = "un"; |
... | ... | |
106 | 104 |
mNameIsVerified = true; |
107 | 105 |
|
108 | 106 |
for(int i=0; i<NUM_OBJECTS; i++) |
109 |
for(int j=0; j<MAX_NUM_OBJECTS; j++) |
|
110 |
for(int k=0; k<MAX_LEVEL; k++) |
|
111 |
{ |
|
112 |
mSubmitted[i][j][k]=1; |
|
113 |
} |
|
107 |
for(int j=0; j<MAX_LEVEL; j++) |
|
108 |
{ |
|
109 |
mSubmitted[i][j]=1; |
|
110 |
} |
|
114 | 111 |
} |
115 | 112 |
|
116 | 113 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
124 | 121 |
|
125 | 122 |
synchronized boolean thereAreUnsubmittedRecords() |
126 | 123 |
{ |
127 |
ObjectList list; |
|
128 |
int length; |
|
129 |
|
|
130 | 124 |
for(int object=0; object<NUM_OBJECTS; object++) |
131 | 125 |
{ |
132 |
list = ObjectList.getObject(object); |
|
133 |
length = list.getSizes().length; |
|
134 |
|
|
135 |
for(int size=0; size<length; size++) |
|
136 |
for(int level=0; level<MAX_LEVEL; level++) |
|
137 |
{ |
|
138 |
if( mSubmitted[object][size][level]==0 && mRecords[object][size][level]<NO_RECORD ) |
|
139 |
{ |
|
140 |
return true; |
|
141 |
} |
|
142 |
} |
|
126 |
for(int level=0; level<MAX_LEVEL; level++) |
|
127 |
{ |
|
128 |
if( mSubmitted[object][level]==0 && mRecords[object][level]<NO_RECORD ) return true; |
|
129 |
} |
|
143 | 130 |
} |
144 | 131 |
|
145 | 132 |
return false; |
... | ... | |
149 | 136 |
|
150 | 137 |
synchronized String getRecordList(String strObj, String strLvl, String strTim) |
151 | 138 |
{ |
152 |
ObjectList list; |
|
153 | 139 |
StringBuilder builderObj = new StringBuilder(); |
154 | 140 |
StringBuilder builderLvl = new StringBuilder(); |
155 | 141 |
StringBuilder builderTim = new StringBuilder(); |
156 | 142 |
boolean first = true; |
157 |
int[] sizes; |
|
158 |
int length; |
|
159 | 143 |
|
160 | 144 |
for(int object=0; object<NUM_OBJECTS; object++) |
161 | 145 |
{ |
162 |
list = ObjectList.getObject(object); |
|
163 |
sizes = list.getSizes(); |
|
164 |
length = sizes.length; |
|
146 |
String name = ObjectList.getObject(object).name(); |
|
165 | 147 |
|
166 |
for(int size=0; size<length; size++)
|
|
148 |
for(int level=0; level<MAX_LEVEL; level++)
|
|
167 | 149 |
{ |
168 |
for(int level=0; level<MAX_LEVEL; level++)
|
|
150 |
if( mSubmitted[object][level]==0 && mRecords[object][level]<NO_RECORD )
|
|
169 | 151 |
{ |
170 |
if( mSubmitted[object][size][level]==0 && mRecords[object][size][level]<NO_RECORD )
|
|
152 |
if( !first )
|
|
171 | 153 |
{ |
172 |
if( !first ) |
|
173 |
{ |
|
174 |
builderObj.append(','); |
|
175 |
builderLvl.append(','); |
|
176 |
builderTim.append(','); |
|
177 |
} |
|
178 |
else |
|
179 |
{ |
|
180 |
first=false; |
|
181 |
} |
|
182 |
|
|
183 |
builderObj.append(list.name()); |
|
184 |
builderObj.append("_"); |
|
185 |
builderObj.append(sizes[size]); |
|
186 |
builderLvl.append(level); |
|
187 |
builderTim.append(mRecords[object][size][level]); |
|
154 |
builderObj.append(','); |
|
155 |
builderLvl.append(','); |
|
156 |
builderTim.append(','); |
|
157 |
} |
|
158 |
else |
|
159 |
{ |
|
160 |
first=false; |
|
188 | 161 |
} |
162 |
|
|
163 |
builderObj.append(name); |
|
164 |
builderLvl.append(level); |
|
165 |
builderTim.append(mRecords[object][level]); |
|
189 | 166 |
} |
190 | 167 |
} |
191 | 168 |
} |
... | ... | |
197 | 174 |
// Public API |
198 | 175 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
199 | 176 |
|
200 |
public synchronized long getRecord(int object, int size, int level)
|
|
177 |
public synchronized long getRecord(int obj, int level) |
|
201 | 178 |
{ |
202 |
int maxsize = ObjectList.getObject(object).getSizes().length; |
|
203 |
|
|
204 |
if( object>=0 && object<NUM_OBJECTS && size>=0 && size<maxsize && level>=0 && level<MAX_LEVEL ) |
|
205 |
{ |
|
206 |
return mRecords[object][size][level]; |
|
207 |
} |
|
208 |
|
|
209 |
return -1; |
|
179 |
return (obj>=0 && obj<NUM_OBJECTS && level>=0 && level<MAX_LEVEL) ? mRecords[obj][level] : -1; |
|
210 | 180 |
} |
211 | 181 |
|
212 | 182 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
213 | 183 |
|
214 |
public synchronized boolean isSubmitted(int object, int size, int level)
|
|
184 |
public synchronized boolean isSubmitted(int obj, int level) |
|
215 | 185 |
{ |
216 |
int maxsize = ObjectList.getObject(object).getSizes().length; |
|
217 |
|
|
218 |
if( object>=0 && object<NUM_OBJECTS && size>=0 && size<maxsize && level>=0 && level<MAX_LEVEL ) |
|
219 |
{ |
|
220 |
return mSubmitted[object][size][level]==1; |
|
221 |
} |
|
222 |
|
|
223 |
return false; |
|
186 |
return obj>=0 && obj<NUM_OBJECTS && level>=0 && level<MAX_LEVEL && mSubmitted[obj][level]==1; |
|
224 | 187 |
} |
225 | 188 |
|
226 | 189 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
289 | 252 |
|
290 | 253 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
291 | 254 |
|
292 |
public synchronized boolean isSolved(int object, int size, int level)
|
|
255 |
public synchronized boolean isSolved(int obj, int level) |
|
293 | 256 |
{ |
294 |
int maxsize = ObjectList.getObject(object).getSizes().length; |
|
295 |
|
|
296 |
if( object>=0 && object<NUM_OBJECTS && size>=0 && size<maxsize && level>=0 && level<MAX_LEVEL ) |
|
297 |
{ |
|
298 |
return mRecords[object][size][level]<NO_RECORD; |
|
299 |
} |
|
300 |
|
|
301 |
return false; |
|
257 |
return obj>=0 && obj<NUM_OBJECTS && level>=0 && level<MAX_LEVEL && mRecords[obj][level]<NO_RECORD; |
|
302 | 258 |
} |
303 | 259 |
|
304 | 260 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
350 | 306 |
public synchronized void savePreferences(SharedPreferences.Editor editor) |
351 | 307 |
{ |
352 | 308 |
StringBuilder builder = new StringBuilder(); |
353 |
ObjectList list; |
|
354 |
int[] sizes; |
|
355 |
int length; |
|
309 |
String name; |
|
356 | 310 |
|
357 | 311 |
for(int level=0; level<MAX_LEVEL; level++) |
358 | 312 |
{ |
... | ... | |
360 | 314 |
|
361 | 315 |
for(int object=0; object<NUM_OBJECTS; object++) |
362 | 316 |
{ |
363 |
list = ObjectList.getObject(object); |
|
364 |
sizes = list.getSizes(); |
|
365 |
length = sizes.length; |
|
366 |
|
|
367 |
for(int size=0; size<length; size++) |
|
368 |
{ |
|
369 |
builder.append(list.name()); |
|
370 |
builder.append("_"); |
|
371 |
builder.append(sizes[size]); |
|
372 |
builder.append("="); |
|
373 |
builder.append(mRecords[object][size][level]); |
|
374 |
builder.append(","); |
|
375 |
builder.append(mSubmitted[object][size][level]); |
|
376 |
builder.append(" "); |
|
377 |
} |
|
317 |
name = ObjectList.getObject(object).name(); |
|
318 |
builder.append(name); |
|
319 |
builder.append("="); |
|
320 |
builder.append(mRecords[object][level]); |
|
321 |
builder.append(","); |
|
322 |
builder.append(mSubmitted[object][level]); |
|
323 |
builder.append(" "); |
|
378 | 324 |
} |
379 | 325 |
|
380 | 326 |
editor.putString("scores_record"+level, builder.toString()); |
... | ... | |
393 | 339 |
public synchronized void restorePreferences(SharedPreferences preferences) |
394 | 340 |
{ |
395 | 341 |
String recordStr, subStr, nameStr, sizeStr, timeStr, submStr, errorStr=""; |
396 |
int start, end, equals, underscore, comma; |
|
397 |
int object, sizeIndex, subm; |
|
342 |
int start, end, equals, underscore, comma, object, subm; |
|
398 | 343 |
long time; |
399 | 344 |
boolean thereWasError = false; |
400 | 345 |
|
... | ... | |
427 | 372 |
|
428 | 373 |
if( object>=0 && object< NUM_OBJECTS ) |
429 | 374 |
{ |
430 |
sizeIndex = ObjectList.getSizeIndex(object,Integer.parseInt(sizeStr)); |
|
431 | 375 |
time = Long.parseLong(timeStr); |
432 | 376 |
subm = Integer.parseInt(submStr); |
433 | 377 |
|
434 |
if( sizeIndex>=0 && sizeIndex<MAX_NUM_OBJECTS && subm>=0 && subm<=1 )
|
|
378 |
if( subm>=0 && subm<=1 ) |
|
435 | 379 |
{ |
436 |
mRecords [object][sizeIndex][level] = time;
|
|
437 |
mSubmitted[object][sizeIndex][level] = subm;
|
|
380 |
mRecords [object][level] = time; |
|
381 |
mSubmitted[object][level] = subm; |
|
438 | 382 |
} |
439 | 383 |
else |
440 | 384 |
{ |
441 |
errorStr += ("error1: size="+sizeIndex+" subm="+subm+" obj: "+nameStr+" size: "+sizeStr+"\n");
|
|
385 |
errorStr += ("error1: subm="+subm+" obj: "+nameStr+" size: "+sizeStr+"\n"); |
|
442 | 386 |
thereWasError= true; |
443 | 387 |
} |
444 | 388 |
} |
... | ... | |
482 | 426 |
|
483 | 427 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
484 | 428 |
|
485 |
public synchronized boolean setRecord(int object, int size, int level, long timeTaken)
|
|
429 |
public synchronized boolean setRecord(int object, int level, long timeTaken) |
|
486 | 430 |
{ |
487 |
int maxsize = ObjectList.getObject(object).getSizes().length; |
|
488 |
|
|
489 |
if( object>=0 && object<NUM_OBJECTS && size>=0 && size<maxsize && level>=1 && level<=MAX_LEVEL ) |
|
431 |
if( object>=0 && object<NUM_OBJECTS && level>=1 && level<=MAX_LEVEL && mRecords[object][level-1]>timeTaken ) |
|
490 | 432 |
{ |
491 |
if( mRecords[object][size][level-1]> timeTaken ) |
|
492 |
{ |
|
493 |
mRecords [object][size][level-1] = timeTaken; |
|
494 |
mSubmitted[object][size][level-1] = 0; |
|
495 |
return true; |
|
496 |
} |
|
433 |
mRecords [object][level-1] = timeTaken; |
|
434 |
mSubmitted[object][level-1] = 0; |
|
435 |
return true; |
|
497 | 436 |
} |
498 | 437 |
|
499 | 438 |
return false; |
Also available in: Unified diff
Simplify ObjectList: now there's just one object per size.