Project

General

Profile

« Previous | Next » 

Revision 7ac0ee88

Added by Leszek Koltunski over 2 years ago

Simplify ObjectList: now there's just one object per size.

View differences:

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