Project

General

Profile

« Previous | Next » 

Revision f0e87514

Added by Leszek Koltunski about 4 years ago

Separate scores from StateSolving

View differences:

src/main/java/org/distorted/uistate/RubikStateSolving.java
28 28

  
29 29
import org.distorted.magic.R;
30 30
import org.distorted.magic.RubikActivity;
31
import org.distorted.object.RubikObjectList;
31
import org.distorted.scores.RubikScores;
32 32

  
33 33
import java.util.Timer;
34 34
import java.util.TimerTask;
35 35

  
36
import static android.view.View.INVISIBLE;
37
import static org.distorted.object.RubikObjectList.NUM_OBJECTS;
38
import static org.distorted.object.RubikObjectList.MAX_SIZE;
39
import static org.distorted.uistate.RubikStatePlay.MAX_SCRAMBLE;
40

  
41 36
///////////////////////////////////////////////////////////////////////////////////////////////////
42 37

  
43 38
public class RubikStateSolving extends RubikStateAbstract
44 39
  {
45
  private static final long NO_RECORD = Integer.MAX_VALUE;
46

  
47 40
  private TextView mTime;
48 41
  private Timer mTimer;
49 42
  private long mStartTime;
50 43
  private boolean mRunning;
51

  
52
  private long[][][] mRecords;
44
  private RubikScores mScores;
53 45

  
54 46
///////////////////////////////////////////////////////////////////////////////////////////////////
55 47

  
56 48
  RubikStateSolving()
57 49
    {
58
    mRecords = new long[NUM_OBJECTS][MAX_SIZE][MAX_SCRAMBLE];
59

  
60
    for(int i=0; i<NUM_OBJECTS; i++)
61
      for(int j=0; j<MAX_SIZE; j++)
62
        for(int k=0; k<MAX_SCRAMBLE; k++)
63
          {
64
          mRecords[i][j][k] = NO_RECORD;
65
          }
50
    mScores = new RubikScores();
66 51
    }
67 52

  
68 53
///////////////////////////////////////////////////////////////////////////////////////////////////
......
111 96
    buttonR.setOnClickListener(act);
112 97
    layoutBot.addView(buttonR);
113 98

  
114
    buttonL.setVisibility(INVISIBLE);
99
    buttonL.setVisibility(android.view.View.INVISIBLE);
115 100
    }
116 101

  
117 102
///////////////////////////////////////////////////////////////////////////////////////////////////
118 103

  
119 104
  public void savePreferences(SharedPreferences.Editor editor)
120 105
    {
121
    StringBuilder builder = new StringBuilder();
122
    RubikObjectList list;
123
    int[] sizes;
124
    int length;
125

  
126
    for(int scramble=0; scramble<MAX_SCRAMBLE; scramble++)
127
      {
128
      builder.setLength(0);
129

  
130
      for(int object=0; object<NUM_OBJECTS; object++)
131
        {
132
        list = RubikObjectList.getObject(object);
133
        sizes = list.getSizes();
134
        length = sizes.length;
135

  
136
        for(int size=0; size<length; size++)
137
          {
138
          builder.append(list.name());
139
          builder.append("_");
140
          builder.append(sizes[size]);
141
          builder.append("=");
142
          builder.append(mRecords[object][size][scramble]);
143
          builder.append(" ");
144
          }
145
        }
146

  
147
      editor.putString("record"+scramble, builder.toString());
148
      }
106
    mScores.savePreferences(editor);
149 107
    }
150 108

  
151 109
///////////////////////////////////////////////////////////////////////////////////////////////////
152 110

  
153 111
  public void restorePreferences(SharedPreferences preferences)
154 112
    {
155
    String recordStr, subStr, nameStr, sizeStr, timeStr;
156
    int start, end, equals, underscore;
157
    int object, size, time;
158

  
159
    for(int scramble=0; scramble<MAX_SCRAMBLE; scramble++)
160
      {
161
      start = end = 0;
162
      recordStr = preferences.getString("record"+scramble, "");
163

  
164
      //android.util.Log.e("solving", scramble+" record string: "+recordStr);
165

  
166
      while( end!=-1 )
167
        {
168
        end = recordStr.indexOf(" ", start);
169

  
170
        if( end==-1 ) subStr = recordStr.substring(start);
171
        else          subStr = recordStr.substring(start,end);
172

  
173
        start = end+1;
174

  
175
        underscore = subStr.indexOf("_");
176
        equals = subStr.indexOf("=");
177

  
178
        if( underscore>=0 && equals>=0 )
179
          {
180
          nameStr = subStr.substring(0,underscore);
181
          sizeStr = subStr.substring(underscore+1, equals);
182
          timeStr = subStr.substring(equals+1);
183

  
184
          object = RubikObjectList.getOrdinal(nameStr);
185
          size   = RubikObjectList.getSize(object,Integer.parseInt(sizeStr));
186
          time   = Integer.parseInt(timeStr);
187

  
188
          if( object>=0 && object< NUM_OBJECTS && size>=0 && size<MAX_SIZE )
189
            {
190
            mRecords[object][size][scramble] = time;
191

  
192
            if( time<Integer.MAX_VALUE )
193
              {
194
              android.util.Log.e("solv", "Set record for: object="+object+" size="+size+" scramble="+scramble+" time: "+time);
195
              }
196
            }
197
          else
198
            {
199
            android.util.Log.e("solv", "error: object="+object+" size="+size);
200
            }
201
          }
202
        }
203
      }
113
    mScores.restorePreferences(preferences);
204 114
    }
205 115

  
206 116
///////////////////////////////////////////////////////////////////////////////////////////////////
......
251 161
      int object  = play.getObject();
252 162
      int size    = play.getSize();
253 163
      int scramble= play.getPicker();
254
      int maxsize = RubikObjectList.getObject(object).getSizes().length;
255

  
256
      if( object>=0 && object<NUM_OBJECTS && size>=0 && size<maxsize && scramble>=1 && scramble<=MAX_SCRAMBLE )
257
        {
258
        if( mRecords[object][size][scramble-1]> timeTaken )
259
          {
260
          mRecords[object][size][scramble-1] = timeTaken;
261
          android.util.Log.e("solv","new record!");
262
          }
263
        }
264 164

  
165
      mScores.newRecord(object, size, scramble, timeTaken);
265 166
      return timeTaken;
266 167
      }
267 168

  

Also available in: Unified diff