Revision f0e87514
Added by Leszek Koltunski about 4 years ago
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
Separate scores from StateSolving