Project

General

Profile

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

magiccube / src / main / java / org / distorted / objects / RubikObject.java @ 50a82b23

1 a7d8c3cd Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2021 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6 f05e0259 Leszek Koltunski
// Magic Cube is proprietary software licensed under an EULA which you should have received      //
7
// along with the code. If not, check https://distorted.org/magic/License-Magic-Cube.html        //
8 a7d8c3cd Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
9
10
package org.distorted.objects;
11
12 314e9ff0 Leszek Koltunski
import java.io.InputStream;
13 f611dc3e Leszek Koltunski
import java.util.Locale;
14 314e9ff0 Leszek Koltunski
15
import android.app.Activity;
16
import android.content.res.Resources;
17 84d746d7 Leszek Koltunski
import android.graphics.Bitmap;
18
import android.graphics.drawable.BitmapDrawable;
19 eb985085 Leszek Koltunski
import android.graphics.drawable.Drawable;
20 314e9ff0 Leszek Koltunski
import android.widget.ImageButton;
21
import android.widget.ImageView;
22
23 bd9776f6 Leszek Koltunski
import androidx.appcompat.content.res.AppCompatResources;
24
25 84d746d7 Leszek Koltunski
import org.distorted.external.RubikFiles;
26 90288e23 Leszek Koltunski
import org.distorted.main.R;
27 eb9263dd leszek
import org.distorted.objectlib.metadata.ListObjects;
28 920cbdf9 leszek
import org.distorted.objectlib.metadata.Metadata;
29 71897466 Leszek Koltunski
import org.distorted.objectlib.patterns.RubikPatternList;
30 b42c8399 leszek
import org.distorted.solvers.ImplementedSolversList;
31 a7d8c3cd Leszek Koltunski
32 d433b50e Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
33
34 a7d8c3cd Leszek Koltunski
public class RubikObject
35
{
36 1ba56d95 Leszek Koltunski
  public static final int FAST_SCRAMBLES = 80;
37
38 84d746d7 Leszek Koltunski
  private final String mLowerName, mUpperName;
39 6e3fcb91 Leszek Koltunski
  private final int mIconID;
40 a7d8c3cd Leszek Koltunski
  private final String[][] mPatterns;
41 bd9776f6 Leszek Koltunski
  private final int mPrice;
42 7ee8337b leszek
  private final int mSolverOrdinal;
43
  private final int mObjectOrdinal;
44
  private final boolean mIsLocal;
45 ff4a2a13 leszek
  private final int mCategory, mYear;
46
  private final float mDifficulty;
47
  private final String mAuthor;
48 a7d8c3cd Leszek Koltunski
49 73709b89 Leszek Koltunski
  private boolean mIsFree;
50 84d746d7 Leszek Koltunski
  private int mJsonID, mMeshID, mExtrasID;
51 0effd5a9 leszek
  private int mObjectVersion, mExtrasVersion;
52 84d746d7 Leszek Koltunski
  private int mNumScramble;
53 fcf7320f Leszek Koltunski
  private int mExtrasOrdinal;
54 f12e4de9 Leszek Koltunski
55 a7d8c3cd Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
56
57 eb9263dd leszek
  RubikObject(ListObjects type)
58 a7d8c3cd Leszek Koltunski
    {
59 920cbdf9 leszek
    Metadata meta = type.getMetadata();
60 7ee8337b leszek
    mObjectOrdinal= type.ordinal();
61 d36d8517 Leszek Koltunski
62 84d746d7 Leszek Koltunski
    mUpperName   = type.name();
63 5e048300 Leszek Koltunski
    mLowerName   = type.name().toLowerCase(Locale.ENGLISH);
64 920cbdf9 leszek
    mNumScramble = meta.numScrambles();
65
    mPrice       = meta.price();
66 e9e744f7 Leszek Koltunski
    mIsFree      = mPrice==0;
67 920cbdf9 leszek
    mIconID      = meta.icon();
68 eb9263dd leszek
    mJsonID      = meta.objectJson();
69
    mMeshID      = meta.mesh();
70
    mExtrasID    = meta.extrasJson();
71 ff4a2a13 leszek
    mDifficulty  = meta.getDifficulty();
72
    mCategory    = meta.getCategory();
73
    mYear        = meta.getYearOfInvention();
74
    mAuthor      = meta.getAuthor();
75 7ee8337b leszek
    mIsLocal     = false;
76 a7d8c3cd Leszek Koltunski
77 7ee8337b leszek
    int patternOrdinal  = RubikPatternList.getOrdinal(mObjectOrdinal);
78 a7d8c3cd Leszek Koltunski
    mPatterns = RubikPatternList.getPatterns(patternOrdinal);
79 f12e4de9 Leszek Koltunski
80 7ee8337b leszek
    mSolverOrdinal = ImplementedSolversList.getSolverOrdinal(mObjectOrdinal);
81 fcf7320f Leszek Koltunski
    mExtrasOrdinal = -1;
82
83 920cbdf9 leszek
    mObjectVersion = meta.objectVersion();
84
    mExtrasVersion = meta.extrasVersion();
85 804293f0 Leszek Koltunski
    }
86 84d746d7 Leszek Koltunski
87 314e9ff0 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
88
89
  RubikObject(RubikObjectList.DownloadedObject object)
90
    {
91 7bb30586 leszek
    if( RubikObjectList.SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "new downloaded RubikObject "+object.shortName+" added");
92 84d746d7 Leszek Koltunski
93
    mLowerName     = object.shortName;
94 f611dc3e Leszek Koltunski
    mUpperName     = object.shortName.toUpperCase(Locale.ENGLISH);
95 84d746d7 Leszek Koltunski
    mNumScramble   = object.numScrambles;
96 e9e744f7 Leszek Koltunski
    mPrice         = object.price;
97
    mIsFree        = mPrice==0;
98 0effd5a9 leszek
    mObjectVersion = object.objectVersion;
99
    mExtrasVersion = object.extrasVersion;
100 ff4a2a13 leszek
    mDifficulty    = object.difficulty;
101
    mCategory      = object.category;
102
    mYear          = object.year;
103
    mAuthor        = object.author;
104 84d746d7 Leszek Koltunski
105 d36d8517 Leszek Koltunski
    mPatterns      = null;
106
    mExtrasOrdinal = -1;
107 b42c8399 leszek
    mSolverOrdinal = -1;
108 7ee8337b leszek
    mObjectOrdinal = -1;
109
    mIsLocal       = true;
110 314e9ff0 Leszek Koltunski
111 84d746d7 Leszek Koltunski
    mMeshID        =  0;
112 b525bc12 leszek
    mJsonID        = object.object ? -1 : 0;
113
    mExtrasID      = object.extras ? -1 : 0;
114
    mIconID        = object.icon   ? -1 : 0;
115 314e9ff0 Leszek Koltunski
    }
116 804293f0 Leszek Koltunski
117 314e9ff0 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
118
119 84d746d7 Leszek Koltunski
  public boolean updateObject(RubikObjectList.DownloadedObject object)
120 314e9ff0 Leszek Koltunski
    {
121 84d746d7 Leszek Koltunski
    boolean changed = false;
122 314e9ff0 Leszek Koltunski
123 0effd5a9 leszek
    if( object.objectVersion>mObjectVersion )
124 84d746d7 Leszek Koltunski
      {
125 7bb30586 leszek
      if( RubikObjectList.SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "Updating RubikObject's "+object.shortName+" main JSON");
126 84d746d7 Leszek Koltunski
127 0effd5a9 leszek
      mObjectVersion= object.objectVersion;
128
      mNumScramble  = object.numScrambles;
129 84d746d7 Leszek Koltunski
      mMeshID =  0;
130
      mJsonID = -1;
131
      changed = true;
132
      }
133
134 0effd5a9 leszek
    if( object.extrasVersion>mExtrasVersion )
135 84d746d7 Leszek Koltunski
      {
136 7bb30586 leszek
      if( RubikObjectList.SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "Updating RubikObject's "+object.shortName+" extras JSON");
137 84d746d7 Leszek Koltunski
138 0effd5a9 leszek
      mExtrasVersion = object.extrasVersion;
139 84d746d7 Leszek Koltunski
      mExtrasID = -1;
140
      changed = true;
141
      }
142
143
    return changed;
144 314e9ff0 Leszek Koltunski
    }
145 84d746d7 Leszek Koltunski
146 eb985085 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
147
148 8f200211 leszek
  private Drawable createIconDrawable(Activity act)
149 eb985085 Leszek Koltunski
    {
150 84d746d7 Leszek Koltunski
    if( mIconID>0 )
151
      {
152 8f200211 leszek
      return AppCompatResources.getDrawable(act,mIconID);
153 84d746d7 Leszek Koltunski
      }
154
    else
155
      {
156
      RubikFiles files = RubikFiles.getInstance();
157
      Bitmap bmp = files.getIcon(act,mLowerName+".png");
158 8f200211 leszek
      if( bmp==null ) return AppCompatResources.getDrawable(act,R.drawable.unknown_icon);
159
      else            return new BitmapDrawable(act.getResources(), bmp);
160 84d746d7 Leszek Koltunski
      }
161 eb985085 Leszek Koltunski
    }
162
163 804293f0 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
164
165 fcf7320f Leszek Koltunski
  public void setExtrasOrdinal(int ordinal)
166 804293f0 Leszek Koltunski
    {
167 fcf7320f Leszek Koltunski
    mExtrasOrdinal = ordinal;
168 804293f0 Leszek Koltunski
    }
169
170
///////////////////////////////////////////////////////////////////////////////////////////////////
171
172 fcf7320f Leszek Koltunski
  public int getExtrasOrdinal()
173 804293f0 Leszek Koltunski
    {
174 fcf7320f Leszek Koltunski
    return mExtrasOrdinal;
175 f12e4de9 Leszek Koltunski
    }
176
177 a7d8c3cd Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
178
// PUBLIC API
179
180 84d746d7 Leszek Koltunski
  public String getLowerName()
181
    {
182
    return mLowerName;
183
    }
184
185
///////////////////////////////////////////////////////////////////////////////////////////////////
186
187
  public String getUpperName()
188 a7d8c3cd Leszek Koltunski
    {
189 84d746d7 Leszek Koltunski
    return mUpperName;
190 a7d8c3cd Leszek Koltunski
    }
191
192
///////////////////////////////////////////////////////////////////////////////////////////////////
193
194 804293f0 Leszek Koltunski
  public int getNumScramble()
195 a7d8c3cd Leszek Koltunski
    {
196 804293f0 Leszek Koltunski
    return mNumScramble;
197 a7d8c3cd Leszek Koltunski
    }
198
199 298f3977 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
200 e9e744f7 Leszek Koltunski
201
  public int getPrice()
202
    {
203
    return mPrice;
204
    }
205
206
///////////////////////////////////////////////////////////////////////////////////////////////////
207 298f3977 Leszek Koltunski
208
  public boolean isFree()
209
    {
210 7bb30586 leszek
    return (!RubikObjectList.USE_IAP || mIsFree);
211 298f3977 Leszek Koltunski
    }
212
213 73709b89 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
214
215
  public void markFree()
216
    {
217 e9e744f7 Leszek Koltunski
    mIsFree=true;
218 73709b89 Leszek Koltunski
    }
219
220 a7d8c3cd Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
221
222 0effd5a9 leszek
  public int getObjectVersion()
223 eb985085 Leszek Koltunski
    {
224 0effd5a9 leszek
    return mObjectVersion;
225 eb985085 Leszek Koltunski
    }
226
227
///////////////////////////////////////////////////////////////////////////////////////////////////
228
229 0effd5a9 leszek
  public int getExtrasVersion()
230 eb985085 Leszek Koltunski
    {
231 0effd5a9 leszek
    return mExtrasVersion;
232 eb985085 Leszek Koltunski
    }
233
234
///////////////////////////////////////////////////////////////////////////////////////////////////
235
236
  public void setIconTo(Activity act,ImageButton button)
237 314e9ff0 Leszek Koltunski
    {
238 8f200211 leszek
    Drawable icon = createIconDrawable(act);
239
    button.setBackground(icon);
240 314e9ff0 Leszek Koltunski
    }
241
242
///////////////////////////////////////////////////////////////////////////////////////////////////
243
244 eb985085 Leszek Koltunski
  public void setIconTo(Activity act,ImageView view)
245 314e9ff0 Leszek Koltunski
    {
246 8f200211 leszek
    Drawable icon = createIconDrawable(act);
247
    view.setImageDrawable(icon);
248 314e9ff0 Leszek Koltunski
    }
249
250
///////////////////////////////////////////////////////////////////////////////////////////////////
251
252
  public InputStream getObjectStream(Activity act)
253 a7d8c3cd Leszek Koltunski
    {
254 84d746d7 Leszek Koltunski
    if( mJsonID>0 )
255 314e9ff0 Leszek Koltunski
      {
256
      Resources res = act.getResources();
257
      return res.openRawResource(mJsonID);
258
      }
259 84d746d7 Leszek Koltunski
    if( mJsonID<0 )
260
      {
261
      RubikFiles files = RubikFiles.getInstance();
262
      return files.openFile(act,mLowerName+"_object.json");
263
      }
264
265 314e9ff0 Leszek Koltunski
    return null;
266 a7d8c3cd Leszek Koltunski
    }
267
268
///////////////////////////////////////////////////////////////////////////////////////////////////
269
270 314e9ff0 Leszek Koltunski
  public InputStream getMeshStream(Activity act)
271 a7d8c3cd Leszek Koltunski
    {
272 84d746d7 Leszek Koltunski
    if( mMeshID>0 )
273 314e9ff0 Leszek Koltunski
      {
274
      Resources res = act.getResources();
275
      return res.openRawResource(mMeshID);
276
      }
277 84d746d7 Leszek Koltunski
278 314e9ff0 Leszek Koltunski
    return null;
279 a7d8c3cd Leszek Koltunski
    }
280
281
///////////////////////////////////////////////////////////////////////////////////////////////////
282
283 314e9ff0 Leszek Koltunski
  public InputStream getExtrasStream(Activity act)
284 a7d8c3cd Leszek Koltunski
    {
285 84d746d7 Leszek Koltunski
    if( mExtrasID>0 )
286 314e9ff0 Leszek Koltunski
      {
287
      Resources res = act.getResources();
288
      return res.openRawResource(mExtrasID);
289
      }
290 84d746d7 Leszek Koltunski
    if( mExtrasID<0 )
291
      {
292
      RubikFiles files = RubikFiles.getInstance();
293
      return files.openFile(act,mLowerName+"_extras.json");
294
      }
295
296 314e9ff0 Leszek Koltunski
    return null;
297 a7d8c3cd Leszek Koltunski
    }
298
299 ff4a2a13 leszek
///////////////////////////////////////////////////////////////////////////////////////////////////
300
301
  public int getCategory()
302
    {
303
    return mCategory;
304
    }
305
306
///////////////////////////////////////////////////////////////////////////////////////////////////
307
308
  public float getDifficulty()
309
    {
310
    return mDifficulty;
311
    }
312
313
///////////////////////////////////////////////////////////////////////////////////////////////////
314
315
  public int getYearOfInvention()
316
    {
317
    return mYear;
318
    }
319
320
///////////////////////////////////////////////////////////////////////////////////////////////////
321
322
  public String getAuthor()
323
    {
324
    return mAuthor;
325
    }
326
327 804293f0 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
328
329 314e9ff0 Leszek Koltunski
  public boolean hasExtras()
330 804293f0 Leszek Koltunski
    {
331 314e9ff0 Leszek Koltunski
    return mExtrasID!=0;
332 804293f0 Leszek Koltunski
    }
333
334 b42c8399 leszek
///////////////////////////////////////////////////////////////////////////////////////////////////
335
336
  public boolean hasSolver()
337
    {
338
    return mSolverOrdinal>=0;
339
    }
340
341
///////////////////////////////////////////////////////////////////////////////////////////////////
342
343
  public int getSolverOrdinal()
344
    {
345
    return mSolverOrdinal;
346
    }
347
348 7ee8337b leszek
///////////////////////////////////////////////////////////////////////////////////////////////////
349
350
  public int getObjectOrdinal()
351
    {
352
    return mObjectOrdinal;
353
    }
354
355
///////////////////////////////////////////////////////////////////////////////////////////////////
356
357
  public boolean isLocal()
358
    {
359
    return mIsLocal;
360
    }
361
362 b42c8399 leszek
///////////////////////////////////////////////////////////////////////////////////////////////////
363
364
  public boolean hasPatterns()
365
    {
366
    return mPatterns!=null;
367
    }
368
369 a7d8c3cd Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
370
371
  public String[][] getPatterns()
372
    {
373
    return mPatterns;
374
    }
375
}