Project

General

Profile

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

magiccube / src / main / java / org / distorted / network / RubikScores.java @ 3f7a4363

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