Project

General

Profile

Download (15.4 KB) Statistics
| Branch: | Tag: | Revision:

magiccube / src / main / java / org / distorted / scores / RubikScores.java @ e314f6ae

1 f0e87514 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2020 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6
// Magic Cube is free software: you can redistribute it and/or modify                            //
7
// it under the terms of the GNU General Public License as published by                          //
8
// the Free Software Foundation, either version 2 of the License, or                             //
9
// (at your option) any later version.                                                           //
10
//                                                                                               //
11
// Magic Cube is distributed in the hope that it will be useful,                                 //
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
14
// GNU General Public License for more details.                                                  //
15
//                                                                                               //
16
// You should have received a copy of the GNU General Public License                             //
17
// along with Magic Cube.  If not, see <http://www.gnu.org/licenses/>.                           //
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19
20
package org.distorted.scores;
21
22 82ce8e64 Leszek Koltunski
import android.content.Context;
23 f0e87514 Leszek Koltunski
import android.content.SharedPreferences;
24 82ce8e64 Leszek Koltunski
import android.telephony.TelephonyManager;
25 1c90c64a Leszek Koltunski
26 25445dcf Leszek Koltunski
import com.google.firebase.crashlytics.FirebaseCrashlytics;
27
28
import org.distorted.main.BuildConfig;
29 9c2f0c91 Leszek Koltunski
import org.distorted.objects.ObjectList;
30 f0e87514 Leszek Koltunski
31 82ce8e64 Leszek Koltunski
import java.util.UUID;
32
33 9c2f0c91 Leszek Koltunski
import static org.distorted.objects.ObjectList.MAX_NUM_OBJECTS;
34
import static org.distorted.objects.ObjectList.NUM_OBJECTS;
35
import static org.distorted.objects.ObjectList.MAX_LEVEL;
36 f0e87514 Leszek Koltunski
37
///////////////////////////////////////////////////////////////////////////////////////////////////
38 82ce8e64 Leszek Koltunski
// hold my own scores, and some other statistics.
39 f0e87514 Leszek Koltunski
40
public class RubikScores
41
  {
42 1c90c64a Leszek Koltunski
  public static final long NO_RECORD = Long.MAX_VALUE;
43 714292f1 Leszek Koltunski
  private static RubikScores mThis;
44
45 f0e87514 Leszek Koltunski
  private long[][][] mRecords;
46 286d73ae Leszek Koltunski
  private int [][][] mSubmitted;
47
48 82ce8e64 Leszek Koltunski
  private String mName, mCountry;
49 c3ffcf58 Leszek Koltunski
  private boolean mNameIsVerified;
50
  private int mNumRuns;
51
  private int mNumPlays;
52 e06e1b7e Leszek Koltunski
  private int mNumReviews;
53 82ce8e64 Leszek Koltunski
  private int mDeviceID;
54 f0e87514 Leszek Koltunski
55
///////////////////////////////////////////////////////////////////////////////////////////////////
56
57 714292f1 Leszek Koltunski
  private RubikScores()
58 f0e87514 Leszek Koltunski
    {
59 82d6e038 Leszek Koltunski
    mRecords   = new long[NUM_OBJECTS][MAX_NUM_OBJECTS][MAX_LEVEL];
60
    mSubmitted = new int [NUM_OBJECTS][MAX_NUM_OBJECTS][MAX_LEVEL];
61 f0e87514 Leszek Koltunski
62
    for(int i=0; i<NUM_OBJECTS; i++)
63 82d6e038 Leszek Koltunski
      for(int j=0; j<MAX_NUM_OBJECTS; j++)
64 85b09df4 Leszek Koltunski
        for(int k=0; k<MAX_LEVEL; k++)
65 f0e87514 Leszek Koltunski
          {
66 286d73ae Leszek Koltunski
          mRecords[i][j][k]   = NO_RECORD;
67
          mSubmitted[i][j][k] = 0;
68 f0e87514 Leszek Koltunski
          }
69 c3ffcf58 Leszek Koltunski
70 f895e77a Leszek Koltunski
    mName = "";
71 82ce8e64 Leszek Koltunski
    mCountry = "un";
72
73 c3ffcf58 Leszek Koltunski
    mNameIsVerified = false;
74 82ce8e64 Leszek Koltunski
75 e06e1b7e Leszek Koltunski
    mNumPlays   = -1;
76
    mNumRuns    = -1;
77
    mDeviceID   = -1;
78
    mNumReviews =  0;
79 f0e87514 Leszek Koltunski
    }
80
81 17f9a695 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
82
83
  private int privateGetDeviceID()
84
    {
85
    int id;
86
87
    try
88
      {
89
      String s = UUID.randomUUID().toString();
90 874c37b1 Leszek Koltunski
      id = s.hashCode();
91 17f9a695 Leszek Koltunski
      }
92
    catch(Exception ex)
93
      {
94
      id = 0;
95
      android.util.Log.e("scores", "Exception in getDeviceID()");
96
      }
97
98
    return id<0 ? -id : id;
99
    }
100
101
///////////////////////////////////////////////////////////////////////////////////////////////////
102 e06e1b7e Leszek Koltunski
103
  synchronized void successfulSubmit()
104
    {
105
    mNameIsVerified = true;
106
107
    for(int i=0; i<NUM_OBJECTS; i++)
108
      for(int j=0; j<MAX_NUM_OBJECTS; j++)
109
        for(int k=0; k<MAX_LEVEL; k++)
110
          {
111
          mSubmitted[i][j][k]=1;
112
          }
113
    }
114
115 714292f1 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
116
117 e06e1b7e Leszek Koltunski
  int getDeviceID()
118 714292f1 Leszek Koltunski
    {
119 e06e1b7e Leszek Koltunski
    return mDeviceID;
120
    }
121 714292f1 Leszek Koltunski
122 e06e1b7e Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
123
124
  boolean isVerified()
125
    {
126
    return mNameIsVerified;
127 714292f1 Leszek Koltunski
    }
128
129 f0e87514 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
130
131 e06e1b7e Leszek Koltunski
  synchronized boolean thereAreUnsubmittedRecords()
132 f0e87514 Leszek Koltunski
    {
133 9c2f0c91 Leszek Koltunski
    ObjectList list;
134 f0e87514 Leszek Koltunski
    int length;
135
136 e06e1b7e Leszek Koltunski
    for(int object=0; object<NUM_OBJECTS; object++)
137 f0e87514 Leszek Koltunski
      {
138 e06e1b7e Leszek Koltunski
      list = ObjectList.getObject(object);
139
      length = list.getSizes().length;
140 f0e87514 Leszek Koltunski
141 e06e1b7e Leszek Koltunski
      for(int size=0; size<length; size++)
142
        for(int level=0; level<MAX_LEVEL; level++)
143 f0e87514 Leszek Koltunski
          {
144 e06e1b7e Leszek Koltunski
          if( mSubmitted[object][size][level]==0 && mRecords[object][size][level]<NO_RECORD )
145
            {
146
            return true;
147
            }
148 f0e87514 Leszek Koltunski
          }
149
      }
150 c3ffcf58 Leszek Koltunski
151 e06e1b7e Leszek Koltunski
    return false;
152 f0e87514 Leszek Koltunski
    }
153
154
///////////////////////////////////////////////////////////////////////////////////////////////////
155
156 e06e1b7e Leszek Koltunski
  synchronized String getRecordList(String strObj, String strLvl, String strTim)
157 f0e87514 Leszek Koltunski
    {
158 e06e1b7e Leszek Koltunski
    ObjectList list;
159
    StringBuilder builderObj = new StringBuilder();
160
    StringBuilder builderLvl = new StringBuilder();
161
    StringBuilder builderTim = new StringBuilder();
162
    boolean first = true;
163
    int[] sizes;
164
    int length;
165 f0e87514 Leszek Koltunski
166 e06e1b7e Leszek Koltunski
    for(int object=0; object<NUM_OBJECTS; object++)
167 f0e87514 Leszek Koltunski
      {
168 e06e1b7e Leszek Koltunski
      list = ObjectList.getObject(object);
169
      sizes = list.getSizes();
170
      length = sizes.length;
171 f0e87514 Leszek Koltunski
172 e06e1b7e Leszek Koltunski
      for(int size=0; size<length; size++)
173 f0e87514 Leszek Koltunski
        {
174 e06e1b7e Leszek Koltunski
        for(int level=0; level<MAX_LEVEL; level++)
175 f0e87514 Leszek Koltunski
          {
176 e06e1b7e Leszek Koltunski
          if( mSubmitted[object][size][level]==0 && mRecords[object][size][level]<NO_RECORD )
177 f0e87514 Leszek Koltunski
            {
178 e06e1b7e Leszek Koltunski
            if( !first )
179 4c0cd600 Leszek Koltunski
              {
180 e06e1b7e Leszek Koltunski
              builderObj.append(',');
181
              builderLvl.append(',');
182
              builderTim.append(',');
183 4c0cd600 Leszek Koltunski
              }
184
            else
185 f0e87514 Leszek Koltunski
              {
186 e06e1b7e Leszek Koltunski
              first=false;
187 f0e87514 Leszek Koltunski
              }
188 e06e1b7e Leszek Koltunski
189
            builderObj.append(list.name());
190
            builderObj.append("_");
191
            builderObj.append(sizes[size]);
192
            builderLvl.append(level);
193
            builderTim.append(mRecords[object][size][level]);
194 f0e87514 Leszek Koltunski
            }
195
          }
196
        }
197
      }
198 c3ffcf58 Leszek Koltunski
199 e06e1b7e Leszek Koltunski
    return strObj+builderObj.toString()+strLvl+builderLvl.toString()+strTim+builderTim.toString();
200
    }
201 82ce8e64 Leszek Koltunski
202 e06e1b7e Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
203
// Public API
204
///////////////////////////////////////////////////////////////////////////////////////////////////
205
206
  public synchronized long getRecord(int object, int size, int level)
207
    {
208
    int maxsize = ObjectList.getObject(object).getSizes().length;
209
210
    if( object>=0 && object<NUM_OBJECTS && size>=0 && size<maxsize && level>=0 && level<MAX_LEVEL )
211
      {
212
      return mRecords[object][size][level];
213
      }
214
215
    return -1;
216 f0e87514 Leszek Koltunski
    }
217
218
///////////////////////////////////////////////////////////////////////////////////////////////////
219
220 e06e1b7e Leszek Koltunski
  public synchronized boolean isSubmitted(int object, int size, int level)
221 f0e87514 Leszek Koltunski
    {
222 9c2f0c91 Leszek Koltunski
    int maxsize = ObjectList.getObject(object).getSizes().length;
223 f0e87514 Leszek Koltunski
224 e06e1b7e Leszek Koltunski
    if( object>=0 && object<NUM_OBJECTS && size>=0 && size<maxsize && level>=0 && level<MAX_LEVEL )
225 f0e87514 Leszek Koltunski
      {
226 e06e1b7e Leszek Koltunski
      return mSubmitted[object][size][level]==1;
227 f0e87514 Leszek Koltunski
      }
228 e41e7dc3 Leszek Koltunski
229
    return false;
230 f0e87514 Leszek Koltunski
    }
231 714292f1 Leszek Koltunski
232 c3ffcf58 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
233
234 e06e1b7e Leszek Koltunski
  public int getNumPlays()
235 c3ffcf58 Leszek Koltunski
    {
236 e06e1b7e Leszek Koltunski
    return mNumPlays;
237 c3ffcf58 Leszek Koltunski
    }
238
239
///////////////////////////////////////////////////////////////////////////////////////////////////
240
241 e06e1b7e Leszek Koltunski
  public int getNumRuns()
242 c3ffcf58 Leszek Koltunski
    {
243 e06e1b7e Leszek Koltunski
    return mNumRuns;
244 c3ffcf58 Leszek Koltunski
    }
245
246
///////////////////////////////////////////////////////////////////////////////////////////////////
247
248 e06e1b7e Leszek Koltunski
  public int getNumReviews()
249 c3ffcf58 Leszek Koltunski
    {
250 e06e1b7e Leszek Koltunski
    return mNumReviews;
251 c3ffcf58 Leszek Koltunski
    }
252
253
///////////////////////////////////////////////////////////////////////////////////////////////////
254
255 e06e1b7e Leszek Koltunski
  public String getName()
256 c3ffcf58 Leszek Koltunski
    {
257 e06e1b7e Leszek Koltunski
    return mName;
258
    }
259 1c90c64a Leszek Koltunski
260 e06e1b7e Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
261
262
  public String getCountry()
263
    {
264
    return mCountry;
265 1c90c64a Leszek Koltunski
    }
266
267 286d73ae Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
268
269 e06e1b7e Leszek Koltunski
  public void incrementNumPlays()
270 286d73ae Leszek Koltunski
    {
271 e06e1b7e Leszek Koltunski
    mNumPlays++;
272
    }
273 286d73ae Leszek Koltunski
274 e06e1b7e Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
275 82ce8e64 Leszek Koltunski
276 e06e1b7e Leszek Koltunski
  public void incrementNumRuns()
277
    {
278
    mNumRuns++;
279
    }
280 82ce8e64 Leszek Koltunski
281 e06e1b7e Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
282 82ce8e64 Leszek Koltunski
283 e06e1b7e Leszek Koltunski
  public void incrementNumReviews()
284
    {
285
    mNumReviews++;
286
    }
287
288
///////////////////////////////////////////////////////////////////////////////////////////////////
289
290
  public void setName(String newName)
291
    {
292
    mName = newName;
293 82ce8e64 Leszek Koltunski
    }
294
295 874c37b1 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
296
297
  public void setCountry(String country)
298
    {
299
    mCountry = country;
300
301
    if( mCountry.equals("do") ) mCountry = "dm";  // see above
302
    }
303
304 d7e539d0 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
305
306 6570171b Leszek Koltunski
  public synchronized boolean isSolved(int object, int size, int level)
307 d7e539d0 Leszek Koltunski
    {
308 9c2f0c91 Leszek Koltunski
    int maxsize = ObjectList.getObject(object).getSizes().length;
309 d7e539d0 Leszek Koltunski
310
    if( object>=0 && object<NUM_OBJECTS && size>=0 && size<maxsize && level>=0 && level<MAX_LEVEL )
311
      {
312
      return mRecords[object][size][level]<NO_RECORD;
313
      }
314
315
    return false;
316
    }
317
318 714292f1 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
319
320 e06e1b7e Leszek Koltunski
  public void setCountry(Context context)
321 714292f1 Leszek Koltunski
    {
322 e06e1b7e Leszek Koltunski
    TelephonyManager tM =((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE));
323 714292f1 Leszek Koltunski
324 e06e1b7e Leszek Koltunski
    if( tM!=null )
325 714292f1 Leszek Koltunski
      {
326 e06e1b7e Leszek Koltunski
      mCountry = tM.getSimCountryIso();
327
328
      if( mCountry==null || mCountry.length()<=1 )
329
        {
330
        mCountry = tM.getNetworkCountryIso();
331
        }
332 714292f1 Leszek Koltunski
      }
333
334 e06e1b7e Leszek Koltunski
    // Special case: Dominicana. Its ISO-3166-alpha-2 country code is 'do' which we can't have here
335
    // because we later on map this to a resource name (the flag) and 'do' is a reserved Java keyword
336
    // and can't be a resource name.
337
338
    if( mCountry.equals("do") ) mCountry = "dm";
339 714292f1 Leszek Koltunski
    }
340 c3ffcf58 Leszek Koltunski
341 286d73ae Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
342
343 e06e1b7e Leszek Koltunski
  public static RubikScores getInstance()
344 286d73ae Leszek Koltunski
    {
345 e06e1b7e Leszek Koltunski
    if( mThis==null )
346 286d73ae Leszek Koltunski
      {
347 e06e1b7e Leszek Koltunski
      mThis = new RubikScores();
348 286d73ae Leszek Koltunski
      }
349
350 e06e1b7e Leszek Koltunski
    return mThis;
351 286d73ae Leszek Koltunski
    }
352
353 17f9a695 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
354
355 e06e1b7e Leszek Koltunski
  public synchronized void savePreferences(SharedPreferences.Editor editor)
356 17f9a695 Leszek Koltunski
    {
357 e06e1b7e Leszek Koltunski
    StringBuilder builder = new StringBuilder();
358
    ObjectList list;
359
    int[] sizes;
360
    int length;
361 1c90c64a Leszek Koltunski
362 e06e1b7e Leszek Koltunski
    for(int level=0; level<MAX_LEVEL; level++)
363
      {
364
      builder.setLength(0);
365 1c90c64a Leszek Koltunski
366 e06e1b7e Leszek Koltunski
      for(int object=0; object<NUM_OBJECTS; object++)
367
        {
368
        list = ObjectList.getObject(object);
369
        sizes = list.getSizes();
370
        length = sizes.length;
371 c3ffcf58 Leszek Koltunski
372 e06e1b7e Leszek Koltunski
        for(int size=0; size<length; size++)
373
          {
374
          builder.append(list.name());
375
          builder.append("_");
376
          builder.append(sizes[size]);
377
          builder.append("=");
378
          builder.append(mRecords[object][size][level]);
379
          builder.append(",");
380
          builder.append(mSubmitted[object][size][level]);
381
          builder.append(" ");
382
          }
383
        }
384 c3ffcf58 Leszek Koltunski
385 e06e1b7e Leszek Koltunski
      editor.putString("scores_record"+level, builder.toString());
386
      }
387 c3ffcf58 Leszek Koltunski
388 e06e1b7e Leszek Koltunski
    editor.putString("scores_name"  , mName  );
389
    editor.putBoolean("scores_isVerified", mNameIsVerified);
390
    editor.putInt("scores_numPlays", mNumPlays);
391
    editor.putInt("scores_numRuns" , mNumRuns);
392
    editor.putInt("scores_deviceid", mDeviceID);
393
    editor.putInt("scores_review"  , mNumReviews);
394 c3ffcf58 Leszek Koltunski
    }
395
396
///////////////////////////////////////////////////////////////////////////////////////////////////
397
398 e06e1b7e Leszek Koltunski
  public synchronized void restorePreferences(SharedPreferences preferences)
399 c3ffcf58 Leszek Koltunski
    {
400 25445dcf Leszek Koltunski
    String recordStr, subStr, nameStr, sizeStr, timeStr, submStr, errorStr="";
401 e06e1b7e Leszek Koltunski
    int start, end, equals, underscore, comma;
402
    int object, sizeIndex, subm;
403
    long time;
404 25445dcf Leszek Koltunski
    boolean thereWasError = false;
405 c3ffcf58 Leszek Koltunski
406 e06e1b7e Leszek Koltunski
    for(int level=0; level<MAX_LEVEL; level++)
407
      {
408
      start = end = 0;
409
      recordStr = preferences.getString("scores_record"+level, "");
410 c3ffcf58 Leszek Koltunski
411 e06e1b7e Leszek Koltunski
      while( end!=-1 )
412
        {
413
        end = recordStr.indexOf(" ", start);
414 4895fff6 Leszek Koltunski
415 e06e1b7e Leszek Koltunski
        if( end==-1 ) subStr = recordStr.substring(start);
416
        else          subStr = recordStr.substring(start,end);
417 4895fff6 Leszek Koltunski
418 e06e1b7e Leszek Koltunski
        start = end+1;
419 4895fff6 Leszek Koltunski
420 e06e1b7e Leszek Koltunski
        underscore = subStr.indexOf("_");
421
        equals = subStr.indexOf("=");
422
        comma = subStr.indexOf(",");
423 4895fff6 Leszek Koltunski
424 e06e1b7e Leszek Koltunski
        if( underscore>=0 && equals>=0 && comma>=0 )
425 4c0cd600 Leszek Koltunski
          {
426 e06e1b7e Leszek Koltunski
          nameStr = subStr.substring(0,underscore);
427
          sizeStr = subStr.substring(underscore+1, equals);
428
          timeStr = subStr.substring(equals+1,comma);
429
          submStr = subStr.substring(comma+1);
430
431
          object = ObjectList.getOrdinal(nameStr);
432
433
          if( object>=0 && object< NUM_OBJECTS )
434 4895fff6 Leszek Koltunski
            {
435 e06e1b7e Leszek Koltunski
            sizeIndex = ObjectList.getSizeIndex(object,Integer.parseInt(sizeStr));
436
            time = Long.parseLong(timeStr);
437
            subm = Integer.parseInt(submStr);
438
439
            if( sizeIndex>=0 && sizeIndex<MAX_NUM_OBJECTS && subm>=0 && subm<=1 )
440
              {
441
              mRecords  [object][sizeIndex][level] = time;
442
              mSubmitted[object][sizeIndex][level] = subm;
443
              }
444
            else
445
              {
446 25445dcf Leszek Koltunski
              errorStr += ("error1: size="+sizeIndex+" subm="+subm+" obj: "+nameStr+" size: "+sizeStr+"\n");
447
              thereWasError= true;
448 e06e1b7e Leszek Koltunski
              }
449
            }
450
          else
451
            {
452 25445dcf Leszek Koltunski
            errorStr += ("error2: object="+object+" obj: "+nameStr+" size: "+sizeStr+"\n");
453
            thereWasError = true;
454 4895fff6 Leszek Koltunski
            }
455 4c0cd600 Leszek Koltunski
          }
456 e06e1b7e Leszek Koltunski
        }
457 4895fff6 Leszek Koltunski
      }
458
459 e06e1b7e Leszek Koltunski
    mName           = preferences.getString("scores_name"  , "" );
460
    mNameIsVerified = preferences.getBoolean("scores_isVerified", false);
461
    mNumPlays       = preferences.getInt("scores_numPlays", 0);
462
    mNumRuns        = preferences.getInt("scores_numRuns" , 0);
463
    mDeviceID       = preferences.getInt("scores_deviceid",-1);
464 a4259b7f Leszek Koltunski
    mNumReviews     = preferences.getInt("scores_review"  ,-3);
465 e06e1b7e Leszek Koltunski
466
    if( mDeviceID==-1 ) mDeviceID = privateGetDeviceID();
467 25445dcf Leszek Koltunski
468
    if( thereWasError ) recordDBError(errorStr);
469
    }
470
471
///////////////////////////////////////////////////////////////////////////////////////////////////
472
473
  public void recordDBError(String message)
474
    {
475
    if( BuildConfig.DEBUG )
476
      {
477
      android.util.Log.e("scores", message);
478
      }
479
    else
480
      {
481
      Exception ex = new Exception(message);
482
      FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();
483
      crashlytics.setCustomKey("scores" , message);
484
      crashlytics.recordException(ex);
485
      }
486 4895fff6 Leszek Koltunski
    }
487
488
///////////////////////////////////////////////////////////////////////////////////////////////////
489
490 e06e1b7e Leszek Koltunski
  public synchronized boolean setRecord(int object, int size, int level, long timeTaken)
491 4895fff6 Leszek Koltunski
    {
492 e06e1b7e Leszek Koltunski
    int maxsize = ObjectList.getObject(object).getSizes().length;
493 4895fff6 Leszek Koltunski
494 e06e1b7e Leszek Koltunski
    if( object>=0 && object<NUM_OBJECTS && size>=0 && size<maxsize && level>=1 && level<=MAX_LEVEL )
495 6570171b Leszek Koltunski
      {
496 e06e1b7e Leszek Koltunski
      if( mRecords[object][size][level-1]> timeTaken )
497 6570171b Leszek Koltunski
        {
498 e06e1b7e Leszek Koltunski
        mRecords  [object][size][level-1] = timeTaken;
499
        mSubmitted[object][size][level-1] = 0;
500
        return true;
501 6570171b Leszek Koltunski
        }
502
      }
503 4895fff6 Leszek Koltunski
504 e06e1b7e Leszek Koltunski
    return false;
505 4895fff6 Leszek Koltunski
    }
506 f0e87514 Leszek Koltunski
  }