Project

General

Profile

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

magiccube / src / main / java / org / distorted / network / RubikScores.java @ 6a083c6a

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 6a083c6a Leszek Koltunski
package org.distorted.network;
21 f0e87514 Leszek Koltunski
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 688f7712 Leszek Koltunski
  private final long[][][] mRecords;
46
  private final int [][][] mSubmitted;
47 286d73ae Leszek Koltunski
48 82ce8e64 Leszek Koltunski
  private String mName, mCountry;
49 c3ffcf58 Leszek Koltunski
  private boolean mNameIsVerified;
50
  private int mNumRuns;
51
  private int mNumPlays;
52 59aee296 Leszek Koltunski
  private int mNumWins;
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 59aee296 Leszek Koltunski
    mNumPlays= -1;
76
    mNumRuns = -1;
77
    mDeviceID= -1;
78
    mNumWins =  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 f0e87514 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
123
124 e06e1b7e Leszek Koltunski
  synchronized boolean thereAreUnsubmittedRecords()
125 f0e87514 Leszek Koltunski
    {
126 9c2f0c91 Leszek Koltunski
    ObjectList list;
127 f0e87514 Leszek Koltunski
    int length;
128
129 e06e1b7e Leszek Koltunski
    for(int object=0; object<NUM_OBJECTS; object++)
130 f0e87514 Leszek Koltunski
      {
131 e06e1b7e Leszek Koltunski
      list = ObjectList.getObject(object);
132
      length = list.getSizes().length;
133 f0e87514 Leszek Koltunski
134 e06e1b7e Leszek Koltunski
      for(int size=0; size<length; size++)
135
        for(int level=0; level<MAX_LEVEL; level++)
136 f0e87514 Leszek Koltunski
          {
137 e06e1b7e Leszek Koltunski
          if( mSubmitted[object][size][level]==0 && mRecords[object][size][level]<NO_RECORD )
138
            {
139
            return true;
140
            }
141 f0e87514 Leszek Koltunski
          }
142
      }
143 c3ffcf58 Leszek Koltunski
144 e06e1b7e Leszek Koltunski
    return false;
145 f0e87514 Leszek Koltunski
    }
146
147
///////////////////////////////////////////////////////////////////////////////////////////////////
148
149 e06e1b7e Leszek Koltunski
  synchronized String getRecordList(String strObj, String strLvl, String strTim)
150 f0e87514 Leszek Koltunski
    {
151 e06e1b7e Leszek Koltunski
    ObjectList list;
152
    StringBuilder builderObj = new StringBuilder();
153
    StringBuilder builderLvl = new StringBuilder();
154
    StringBuilder builderTim = new StringBuilder();
155
    boolean first = true;
156
    int[] sizes;
157
    int length;
158 f0e87514 Leszek Koltunski
159 e06e1b7e Leszek Koltunski
    for(int object=0; object<NUM_OBJECTS; object++)
160 f0e87514 Leszek Koltunski
      {
161 e06e1b7e Leszek Koltunski
      list = ObjectList.getObject(object);
162
      sizes = list.getSizes();
163
      length = sizes.length;
164 f0e87514 Leszek Koltunski
165 e06e1b7e Leszek Koltunski
      for(int size=0; size<length; size++)
166 f0e87514 Leszek Koltunski
        {
167 e06e1b7e Leszek Koltunski
        for(int level=0; level<MAX_LEVEL; level++)
168 f0e87514 Leszek Koltunski
          {
169 e06e1b7e Leszek Koltunski
          if( mSubmitted[object][size][level]==0 && mRecords[object][size][level]<NO_RECORD )
170 f0e87514 Leszek Koltunski
            {
171 e06e1b7e Leszek Koltunski
            if( !first )
172 4c0cd600 Leszek Koltunski
              {
173 e06e1b7e Leszek Koltunski
              builderObj.append(',');
174
              builderLvl.append(',');
175
              builderTim.append(',');
176 4c0cd600 Leszek Koltunski
              }
177
            else
178 f0e87514 Leszek Koltunski
              {
179 e06e1b7e Leszek Koltunski
              first=false;
180 f0e87514 Leszek Koltunski
              }
181 e06e1b7e Leszek Koltunski
182
            builderObj.append(list.name());
183
            builderObj.append("_");
184
            builderObj.append(sizes[size]);
185
            builderLvl.append(level);
186
            builderTim.append(mRecords[object][size][level]);
187 f0e87514 Leszek Koltunski
            }
188
          }
189
        }
190
      }
191 c3ffcf58 Leszek Koltunski
192 e06e1b7e Leszek Koltunski
    return strObj+builderObj.toString()+strLvl+builderLvl.toString()+strTim+builderTim.toString();
193
    }
194 82ce8e64 Leszek Koltunski
195 e06e1b7e Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
196
// Public API
197
///////////////////////////////////////////////////////////////////////////////////////////////////
198
199
  public synchronized long getRecord(int object, int size, int level)
200
    {
201
    int maxsize = ObjectList.getObject(object).getSizes().length;
202
203
    if( object>=0 && object<NUM_OBJECTS && size>=0 && size<maxsize && level>=0 && level<MAX_LEVEL )
204
      {
205
      return mRecords[object][size][level];
206
      }
207
208
    return -1;
209 f0e87514 Leszek Koltunski
    }
210
211
///////////////////////////////////////////////////////////////////////////////////////////////////
212
213 e06e1b7e Leszek Koltunski
  public synchronized boolean isSubmitted(int object, int size, int level)
214 f0e87514 Leszek Koltunski
    {
215 9c2f0c91 Leszek Koltunski
    int maxsize = ObjectList.getObject(object).getSizes().length;
216 f0e87514 Leszek Koltunski
217 e06e1b7e Leszek Koltunski
    if( object>=0 && object<NUM_OBJECTS && size>=0 && size<maxsize && level>=0 && level<MAX_LEVEL )
218 f0e87514 Leszek Koltunski
      {
219 e06e1b7e Leszek Koltunski
      return mSubmitted[object][size][level]==1;
220 f0e87514 Leszek Koltunski
      }
221 e41e7dc3 Leszek Koltunski
222
    return false;
223 f0e87514 Leszek Koltunski
    }
224 714292f1 Leszek Koltunski
225 ee4e7896 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
226
227
  public boolean isVerified()
228
    {
229
    return mNameIsVerified;
230
    }
231
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 String getName()
249 c3ffcf58 Leszek Koltunski
    {
250 e06e1b7e Leszek Koltunski
    return mName;
251
    }
252 1c90c64a Leszek Koltunski
253 e06e1b7e Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
254
255
  public String getCountry()
256
    {
257
    return mCountry;
258 1c90c64a Leszek Koltunski
    }
259
260 286d73ae Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
261
262 e06e1b7e Leszek Koltunski
  public void incrementNumPlays()
263 286d73ae Leszek Koltunski
    {
264 e06e1b7e Leszek Koltunski
    mNumPlays++;
265
    }
266 286d73ae Leszek Koltunski
267 e06e1b7e Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
268 82ce8e64 Leszek Koltunski
269 e06e1b7e Leszek Koltunski
  public void incrementNumRuns()
270
    {
271
    mNumRuns++;
272
    }
273 82ce8e64 Leszek Koltunski
274 e06e1b7e Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
275 82ce8e64 Leszek Koltunski
276 59aee296 Leszek Koltunski
  public int incrementNumWins()
277 e06e1b7e Leszek Koltunski
    {
278 59aee296 Leszek Koltunski
    mNumWins++;
279
    return mNumWins;
280 e06e1b7e Leszek Koltunski
    }
281
282
///////////////////////////////////////////////////////////////////////////////////////////////////
283
284
  public void setName(String newName)
285
    {
286
    mName = newName;
287 82ce8e64 Leszek Koltunski
    }
288
289 d7e539d0 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
290
291 6570171b Leszek Koltunski
  public synchronized boolean isSolved(int object, int size, int level)
292 d7e539d0 Leszek Koltunski
    {
293 9c2f0c91 Leszek Koltunski
    int maxsize = ObjectList.getObject(object).getSizes().length;
294 d7e539d0 Leszek Koltunski
295
    if( object>=0 && object<NUM_OBJECTS && size>=0 && size<maxsize && level>=0 && level<MAX_LEVEL )
296
      {
297
      return mRecords[object][size][level]<NO_RECORD;
298
      }
299
300
    return false;
301
    }
302
303 714292f1 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
304
305 e06e1b7e Leszek Koltunski
  public void setCountry(Context context)
306 714292f1 Leszek Koltunski
    {
307 e06e1b7e Leszek Koltunski
    TelephonyManager tM =((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE));
308 714292f1 Leszek Koltunski
309 e06e1b7e Leszek Koltunski
    if( tM!=null )
310 714292f1 Leszek Koltunski
      {
311 e06e1b7e Leszek Koltunski
      mCountry = tM.getSimCountryIso();
312
313
      if( mCountry==null || mCountry.length()<=1 )
314
        {
315
        mCountry = tM.getNetworkCountryIso();
316
        }
317 714292f1 Leszek Koltunski
      }
318
319 e06e1b7e Leszek Koltunski
    // Special case: Dominicana. Its ISO-3166-alpha-2 country code is 'do' which we can't have here
320
    // because we later on map this to a resource name (the flag) and 'do' is a reserved Java keyword
321
    // and can't be a resource name.
322
323
    if( mCountry.equals("do") ) mCountry = "dm";
324 714292f1 Leszek Koltunski
    }
325 c3ffcf58 Leszek Koltunski
326 c8249cf6 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
327
328
  public void setCountry(String country)
329
    {
330
    mCountry = country;
331
332
    if( mCountry.equals("do") ) mCountry = "dm";  // see above
333
    }
334
335 286d73ae Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
336
337 e06e1b7e Leszek Koltunski
  public static RubikScores getInstance()
338 286d73ae Leszek Koltunski
    {
339 e06e1b7e Leszek Koltunski
    if( mThis==null )
340 286d73ae Leszek Koltunski
      {
341 e06e1b7e Leszek Koltunski
      mThis = new RubikScores();
342 286d73ae Leszek Koltunski
      }
343
344 e06e1b7e Leszek Koltunski
    return mThis;
345 286d73ae Leszek Koltunski
    }
346
347 17f9a695 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
348
349 e06e1b7e Leszek Koltunski
  public synchronized void savePreferences(SharedPreferences.Editor editor)
350 17f9a695 Leszek Koltunski
    {
351 e06e1b7e Leszek Koltunski
    StringBuilder builder = new StringBuilder();
352
    ObjectList list;
353
    int[] sizes;
354
    int length;
355 1c90c64a Leszek Koltunski
356 e06e1b7e Leszek Koltunski
    for(int level=0; level<MAX_LEVEL; level++)
357
      {
358
      builder.setLength(0);
359 1c90c64a Leszek Koltunski
360 e06e1b7e Leszek Koltunski
      for(int object=0; object<NUM_OBJECTS; object++)
361
        {
362
        list = ObjectList.getObject(object);
363
        sizes = list.getSizes();
364
        length = sizes.length;
365 c3ffcf58 Leszek Koltunski
366 e06e1b7e Leszek Koltunski
        for(int size=0; size<length; size++)
367
          {
368
          builder.append(list.name());
369
          builder.append("_");
370
          builder.append(sizes[size]);
371
          builder.append("=");
372
          builder.append(mRecords[object][size][level]);
373
          builder.append(",");
374
          builder.append(mSubmitted[object][size][level]);
375
          builder.append(" ");
376
          }
377
        }
378 c3ffcf58 Leszek Koltunski
379 e06e1b7e Leszek Koltunski
      editor.putString("scores_record"+level, builder.toString());
380
      }
381 c3ffcf58 Leszek Koltunski
382 e06e1b7e Leszek Koltunski
    editor.putString("scores_name"  , mName  );
383
    editor.putBoolean("scores_isVerified", mNameIsVerified);
384
    editor.putInt("scores_numPlays", mNumPlays);
385 59aee296 Leszek Koltunski
    editor.putInt("scores_numRuns" , mNumRuns );
386 e06e1b7e Leszek Koltunski
    editor.putInt("scores_deviceid", mDeviceID);
387 59aee296 Leszek Koltunski
    editor.putInt("scores_review"  , mNumWins );
388 c3ffcf58 Leszek Koltunski
    }
389
390
///////////////////////////////////////////////////////////////////////////////////////////////////
391
392 e06e1b7e Leszek Koltunski
  public synchronized void restorePreferences(SharedPreferences preferences)
393 c3ffcf58 Leszek Koltunski
    {
394 25445dcf Leszek Koltunski
    String recordStr, subStr, nameStr, sizeStr, timeStr, submStr, errorStr="";
395 e06e1b7e Leszek Koltunski
    int start, end, equals, underscore, comma;
396
    int object, sizeIndex, subm;
397
    long time;
398 25445dcf Leszek Koltunski
    boolean thereWasError = false;
399 c3ffcf58 Leszek Koltunski
400 e06e1b7e Leszek Koltunski
    for(int level=0; level<MAX_LEVEL; level++)
401
      {
402
      start = end = 0;
403
      recordStr = preferences.getString("scores_record"+level, "");
404 c3ffcf58 Leszek Koltunski
405 e06e1b7e Leszek Koltunski
      while( end!=-1 )
406
        {
407
        end = recordStr.indexOf(" ", start);
408 4895fff6 Leszek Koltunski
409 e06e1b7e Leszek Koltunski
        if( end==-1 ) subStr = recordStr.substring(start);
410
        else          subStr = recordStr.substring(start,end);
411 4895fff6 Leszek Koltunski
412 e06e1b7e Leszek Koltunski
        start = end+1;
413 4895fff6 Leszek Koltunski
414 e06e1b7e Leszek Koltunski
        underscore = subStr.indexOf("_");
415
        equals = subStr.indexOf("=");
416
        comma = subStr.indexOf(",");
417 4895fff6 Leszek Koltunski
418 e06e1b7e Leszek Koltunski
        if( underscore>=0 && equals>=0 && comma>=0 )
419 4c0cd600 Leszek Koltunski
          {
420 e06e1b7e Leszek Koltunski
          nameStr = subStr.substring(0,underscore);
421
          sizeStr = subStr.substring(underscore+1, equals);
422
          timeStr = subStr.substring(equals+1,comma);
423
          submStr = subStr.substring(comma+1);
424
425
          object = ObjectList.getOrdinal(nameStr);
426
427
          if( object>=0 && object< NUM_OBJECTS )
428 4895fff6 Leszek Koltunski
            {
429 e06e1b7e Leszek Koltunski
            sizeIndex = ObjectList.getSizeIndex(object,Integer.parseInt(sizeStr));
430
            time = Long.parseLong(timeStr);
431
            subm = Integer.parseInt(submStr);
432
433
            if( sizeIndex>=0 && sizeIndex<MAX_NUM_OBJECTS && subm>=0 && subm<=1 )
434
              {
435
              mRecords  [object][sizeIndex][level] = time;
436
              mSubmitted[object][sizeIndex][level] = subm;
437
              }
438
            else
439
              {
440 25445dcf Leszek Koltunski
              errorStr += ("error1: size="+sizeIndex+" subm="+subm+" obj: "+nameStr+" size: "+sizeStr+"\n");
441
              thereWasError= true;
442 e06e1b7e Leszek Koltunski
              }
443
            }
444
          else
445
            {
446 25445dcf Leszek Koltunski
            errorStr += ("error2: object="+object+" obj: "+nameStr+" size: "+sizeStr+"\n");
447
            thereWasError = true;
448 4895fff6 Leszek Koltunski
            }
449 4c0cd600 Leszek Koltunski
          }
450 e06e1b7e Leszek Koltunski
        }
451 4895fff6 Leszek Koltunski
      }
452
453 e06e1b7e Leszek Koltunski
    mName           = preferences.getString("scores_name"  , "" );
454
    mNameIsVerified = preferences.getBoolean("scores_isVerified", false);
455
    mNumPlays       = preferences.getInt("scores_numPlays", 0);
456
    mNumRuns        = preferences.getInt("scores_numRuns" , 0);
457
    mDeviceID       = preferences.getInt("scores_deviceid",-1);
458 59aee296 Leszek Koltunski
    mNumWins        = preferences.getInt("scores_review"  , 0);
459 e06e1b7e Leszek Koltunski
460
    if( mDeviceID==-1 ) mDeviceID = privateGetDeviceID();
461 25445dcf Leszek Koltunski
462
    if( thereWasError ) recordDBError(errorStr);
463
    }
464
465
///////////////////////////////////////////////////////////////////////////////////////////////////
466
467
  public void recordDBError(String message)
468
    {
469
    if( BuildConfig.DEBUG )
470
      {
471
      android.util.Log.e("scores", message);
472
      }
473
    else
474
      {
475
      Exception ex = new Exception(message);
476
      FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();
477
      crashlytics.setCustomKey("scores" , message);
478
      crashlytics.recordException(ex);
479
      }
480 4895fff6 Leszek Koltunski
    }
481
482
///////////////////////////////////////////////////////////////////////////////////////////////////
483
484 e06e1b7e Leszek Koltunski
  public synchronized boolean setRecord(int object, int size, int level, long timeTaken)
485 4895fff6 Leszek Koltunski
    {
486 e06e1b7e Leszek Koltunski
    int maxsize = ObjectList.getObject(object).getSizes().length;
487 4895fff6 Leszek Koltunski
488 e06e1b7e Leszek Koltunski
    if( object>=0 && object<NUM_OBJECTS && size>=0 && size<maxsize && level>=1 && level<=MAX_LEVEL )
489 6570171b Leszek Koltunski
      {
490 e06e1b7e Leszek Koltunski
      if( mRecords[object][size][level-1]> timeTaken )
491 6570171b Leszek Koltunski
        {
492 e06e1b7e Leszek Koltunski
        mRecords  [object][size][level-1] = timeTaken;
493
        mSubmitted[object][size][level-1] = 0;
494
        return true;
495 6570171b Leszek Koltunski
        }
496
      }
497 4895fff6 Leszek Koltunski
498 e06e1b7e Leszek Koltunski
    return false;
499 4895fff6 Leszek Koltunski
    }
500 f0e87514 Leszek Koltunski
  }