Project

General

Profile

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

magiccube / src / main / java / org / distorted / objects / RubikObject.java @ 7bb30586

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 a7d8c3cd Leszek Koltunski
import org.distorted.dmesh.ObjectMesh;
26 84d746d7 Leszek Koltunski
import org.distorted.external.RubikFiles;
27 a7d8c3cd Leszek Koltunski
import org.distorted.jsons.ObjectJson;
28 90288e23 Leszek Koltunski
import org.distorted.main.R;
29 a7d8c3cd Leszek Koltunski
import org.distorted.objectlib.main.ObjectType;
30 71897466 Leszek Koltunski
import org.distorted.objectlib.patterns.RubikPatternList;
31 b42c8399 leszek
import org.distorted.solvers.ImplementedSolversList;
32 a7d8c3cd Leszek Koltunski
33 d433b50e Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
34
35 a7d8c3cd Leszek Koltunski
public class RubikObject
36
{
37 1ba56d95 Leszek Koltunski
  public static final int FAST_SCRAMBLES = 80;
38
39 84d746d7 Leszek Koltunski
  private final String mLowerName, mUpperName;
40 6e3fcb91 Leszek Koltunski
  private final int mIconID;
41 a7d8c3cd Leszek Koltunski
  private final String[][] mPatterns;
42 bd9776f6 Leszek Koltunski
  private final int mPrice;
43 7ee8337b leszek
  private final int mSolverOrdinal;
44
  private final int mObjectOrdinal;
45
  private final boolean mIsLocal;
46 a7d8c3cd Leszek Koltunski
47 73709b89 Leszek Koltunski
  private boolean mIsFree;
48 84d746d7 Leszek Koltunski
  private int mJsonID, mMeshID, mExtrasID;
49 0effd5a9 leszek
  private int mObjectVersion, mExtrasVersion;
50 84d746d7 Leszek Koltunski
  private int mNumScramble;
51 fcf7320f Leszek Koltunski
  private int mExtrasOrdinal;
52 f12e4de9 Leszek Koltunski
53 a7d8c3cd Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
54
55 d433b50e Leszek Koltunski
  RubikObject(ObjectType type)
56 a7d8c3cd Leszek Koltunski
    {
57 7ee8337b leszek
    mObjectOrdinal= type.ordinal();
58 d36d8517 Leszek Koltunski
59 84d746d7 Leszek Koltunski
    mUpperName   = type.name();
60 5e048300 Leszek Koltunski
    mLowerName   = type.name().toLowerCase(Locale.ENGLISH);
61 a7d8c3cd Leszek Koltunski
    mNumScramble = type.getNumScramble();
62 e9e744f7 Leszek Koltunski
    mPrice       = type.getPrice();
63
    mIsFree      = mPrice==0;
64 314e9ff0 Leszek Koltunski
    mIconID      = type.getIconID();
65 7ee8337b leszek
    mJsonID      = ObjectJson.getObjectJsonID(mObjectOrdinal);
66
    mMeshID      = ObjectMesh.getMeshID(mObjectOrdinal);
67
    mExtrasID    = ObjectJson.getExtrasJsonID(mObjectOrdinal);
68
    mIsLocal     = false;
69 a7d8c3cd Leszek Koltunski
70 7ee8337b leszek
    int patternOrdinal  = RubikPatternList.getOrdinal(mObjectOrdinal);
71 a7d8c3cd Leszek Koltunski
    mPatterns = RubikPatternList.getPatterns(patternOrdinal);
72 f12e4de9 Leszek Koltunski
73 7ee8337b leszek
    mSolverOrdinal = ImplementedSolversList.getSolverOrdinal(mObjectOrdinal);
74 fcf7320f Leszek Koltunski
    mExtrasOrdinal = -1;
75
76 7ee8337b leszek
    mObjectVersion = ObjectType.getObjectVersion(mObjectOrdinal);
77
    mExtrasVersion = ObjectType.getExtrasVersion(mObjectOrdinal);
78 804293f0 Leszek Koltunski
    }
79 84d746d7 Leszek Koltunski
80 314e9ff0 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
81
82
  RubikObject(RubikObjectList.DownloadedObject object)
83
    {
84 7bb30586 leszek
    if( RubikObjectList.SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "new downloaded RubikObject "+object.shortName+" added");
85 84d746d7 Leszek Koltunski
86
    mLowerName     = object.shortName;
87 f611dc3e Leszek Koltunski
    mUpperName     = object.shortName.toUpperCase(Locale.ENGLISH);
88 84d746d7 Leszek Koltunski
    mNumScramble   = object.numScrambles;
89 e9e744f7 Leszek Koltunski
    mPrice         = object.price;
90
    mIsFree        = mPrice==0;
91 0effd5a9 leszek
    mObjectVersion = object.objectVersion;
92
    mExtrasVersion = object.extrasVersion;
93 84d746d7 Leszek Koltunski
94 d36d8517 Leszek Koltunski
    mPatterns      = null;
95
    mExtrasOrdinal = -1;
96 b42c8399 leszek
    mSolverOrdinal = -1;
97 7ee8337b leszek
    mObjectOrdinal = -1;
98
    mIsLocal       = true;
99 314e9ff0 Leszek Koltunski
100 84d746d7 Leszek Koltunski
    mMeshID        =  0;
101 b525bc12 leszek
    mJsonID        = object.object ? -1 : 0;
102
    mExtrasID      = object.extras ? -1 : 0;
103
    mIconID        = object.icon   ? -1 : 0;
104 314e9ff0 Leszek Koltunski
    }
105 804293f0 Leszek Koltunski
106 314e9ff0 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
107
108 84d746d7 Leszek Koltunski
  public boolean updateObject(RubikObjectList.DownloadedObject object)
109 314e9ff0 Leszek Koltunski
    {
110 84d746d7 Leszek Koltunski
    boolean changed = false;
111 314e9ff0 Leszek Koltunski
112 0effd5a9 leszek
    if( object.objectVersion>mObjectVersion )
113 84d746d7 Leszek Koltunski
      {
114 7bb30586 leszek
      if( RubikObjectList.SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "Updating RubikObject's "+object.shortName+" main JSON");
115 84d746d7 Leszek Koltunski
116 0effd5a9 leszek
      mObjectVersion= object.objectVersion;
117
      mNumScramble  = object.numScrambles;
118 84d746d7 Leszek Koltunski
      mMeshID =  0;
119
      mJsonID = -1;
120
      changed = true;
121
      }
122
123 0effd5a9 leszek
    if( object.extrasVersion>mExtrasVersion )
124 84d746d7 Leszek Koltunski
      {
125 7bb30586 leszek
      if( RubikObjectList.SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "Updating RubikObject's "+object.shortName+" extras JSON");
126 84d746d7 Leszek Koltunski
127 0effd5a9 leszek
      mExtrasVersion = object.extrasVersion;
128 84d746d7 Leszek Koltunski
      mExtrasID = -1;
129
      changed = true;
130
      }
131
132
    return changed;
133 314e9ff0 Leszek Koltunski
    }
134 84d746d7 Leszek Koltunski
135 eb985085 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
136
137 8f200211 leszek
  private Drawable createIconDrawable(Activity act)
138 eb985085 Leszek Koltunski
    {
139 84d746d7 Leszek Koltunski
    if( mIconID>0 )
140
      {
141 8f200211 leszek
      return AppCompatResources.getDrawable(act,mIconID);
142 84d746d7 Leszek Koltunski
      }
143
    else
144
      {
145
      RubikFiles files = RubikFiles.getInstance();
146
      Bitmap bmp = files.getIcon(act,mLowerName+".png");
147 8f200211 leszek
      if( bmp==null ) return AppCompatResources.getDrawable(act,R.drawable.unknown_icon);
148
      else            return new BitmapDrawable(act.getResources(), bmp);
149 84d746d7 Leszek Koltunski
      }
150 eb985085 Leszek Koltunski
    }
151
152 804293f0 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
153
154 fcf7320f Leszek Koltunski
  public void setExtrasOrdinal(int ordinal)
155 804293f0 Leszek Koltunski
    {
156 fcf7320f Leszek Koltunski
    mExtrasOrdinal = ordinal;
157 804293f0 Leszek Koltunski
    }
158
159
///////////////////////////////////////////////////////////////////////////////////////////////////
160
161 fcf7320f Leszek Koltunski
  public int getExtrasOrdinal()
162 804293f0 Leszek Koltunski
    {
163 fcf7320f Leszek Koltunski
    return mExtrasOrdinal;
164 f12e4de9 Leszek Koltunski
    }
165
166 a7d8c3cd Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
167
// PUBLIC API
168
169 84d746d7 Leszek Koltunski
  public String getLowerName()
170
    {
171
    return mLowerName;
172
    }
173
174
///////////////////////////////////////////////////////////////////////////////////////////////////
175
176
  public String getUpperName()
177 a7d8c3cd Leszek Koltunski
    {
178 84d746d7 Leszek Koltunski
    return mUpperName;
179 a7d8c3cd Leszek Koltunski
    }
180
181
///////////////////////////////////////////////////////////////////////////////////////////////////
182
183 804293f0 Leszek Koltunski
  public int getNumScramble()
184 a7d8c3cd Leszek Koltunski
    {
185 804293f0 Leszek Koltunski
    return mNumScramble;
186 a7d8c3cd Leszek Koltunski
    }
187
188 298f3977 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
189 e9e744f7 Leszek Koltunski
190
  public int getPrice()
191
    {
192
    return mPrice;
193
    }
194
195
///////////////////////////////////////////////////////////////////////////////////////////////////
196 298f3977 Leszek Koltunski
197
  public boolean isFree()
198
    {
199 7bb30586 leszek
    return (!RubikObjectList.USE_IAP || mIsFree);
200 298f3977 Leszek Koltunski
    }
201
202 73709b89 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
203
204
  public void markFree()
205
    {
206 e9e744f7 Leszek Koltunski
    mIsFree=true;
207 73709b89 Leszek Koltunski
    }
208
209 a7d8c3cd Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
210
211 0effd5a9 leszek
  public int getObjectVersion()
212 eb985085 Leszek Koltunski
    {
213 0effd5a9 leszek
    return mObjectVersion;
214 eb985085 Leszek Koltunski
    }
215
216
///////////////////////////////////////////////////////////////////////////////////////////////////
217
218 0effd5a9 leszek
  public int getExtrasVersion()
219 eb985085 Leszek Koltunski
    {
220 0effd5a9 leszek
    return mExtrasVersion;
221 eb985085 Leszek Koltunski
    }
222
223
///////////////////////////////////////////////////////////////////////////////////////////////////
224
225
  public void setIconTo(Activity act,ImageButton button)
226 314e9ff0 Leszek Koltunski
    {
227 8f200211 leszek
    Drawable icon = createIconDrawable(act);
228
    button.setBackground(icon);
229 314e9ff0 Leszek Koltunski
    }
230
231
///////////////////////////////////////////////////////////////////////////////////////////////////
232
233 eb985085 Leszek Koltunski
  public void setIconTo(Activity act,ImageView view)
234 314e9ff0 Leszek Koltunski
    {
235 8f200211 leszek
    Drawable icon = createIconDrawable(act);
236
    view.setImageDrawable(icon);
237 314e9ff0 Leszek Koltunski
    }
238
239
///////////////////////////////////////////////////////////////////////////////////////////////////
240
241
  public InputStream getObjectStream(Activity act)
242 a7d8c3cd Leszek Koltunski
    {
243 84d746d7 Leszek Koltunski
    if( mJsonID>0 )
244 314e9ff0 Leszek Koltunski
      {
245
      Resources res = act.getResources();
246
      return res.openRawResource(mJsonID);
247
      }
248 84d746d7 Leszek Koltunski
    if( mJsonID<0 )
249
      {
250
      RubikFiles files = RubikFiles.getInstance();
251
      return files.openFile(act,mLowerName+"_object.json");
252
      }
253
254 314e9ff0 Leszek Koltunski
    return null;
255 a7d8c3cd Leszek Koltunski
    }
256
257
///////////////////////////////////////////////////////////////////////////////////////////////////
258
259 314e9ff0 Leszek Koltunski
  public InputStream getMeshStream(Activity act)
260 a7d8c3cd Leszek Koltunski
    {
261 84d746d7 Leszek Koltunski
    if( mMeshID>0 )
262 314e9ff0 Leszek Koltunski
      {
263
      Resources res = act.getResources();
264
      return res.openRawResource(mMeshID);
265
      }
266 84d746d7 Leszek Koltunski
267 314e9ff0 Leszek Koltunski
    return null;
268 a7d8c3cd Leszek Koltunski
    }
269
270
///////////////////////////////////////////////////////////////////////////////////////////////////
271
272 314e9ff0 Leszek Koltunski
  public InputStream getExtrasStream(Activity act)
273 a7d8c3cd Leszek Koltunski
    {
274 84d746d7 Leszek Koltunski
    if( mExtrasID>0 )
275 314e9ff0 Leszek Koltunski
      {
276
      Resources res = act.getResources();
277
      return res.openRawResource(mExtrasID);
278
      }
279 84d746d7 Leszek Koltunski
    if( mExtrasID<0 )
280
      {
281
      RubikFiles files = RubikFiles.getInstance();
282
      return files.openFile(act,mLowerName+"_extras.json");
283
      }
284
285 314e9ff0 Leszek Koltunski
    return null;
286 a7d8c3cd Leszek Koltunski
    }
287
288 804293f0 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
289
290 314e9ff0 Leszek Koltunski
  public boolean hasExtras()
291 804293f0 Leszek Koltunski
    {
292 314e9ff0 Leszek Koltunski
    return mExtrasID!=0;
293 804293f0 Leszek Koltunski
    }
294
295 b42c8399 leszek
///////////////////////////////////////////////////////////////////////////////////////////////////
296
297
  public boolean hasSolver()
298
    {
299
    return mSolverOrdinal>=0;
300
    }
301
302
///////////////////////////////////////////////////////////////////////////////////////////////////
303
304
  public int getSolverOrdinal()
305
    {
306
    return mSolverOrdinal;
307
    }
308
309 7ee8337b leszek
///////////////////////////////////////////////////////////////////////////////////////////////////
310
311
  public int getObjectOrdinal()
312
    {
313
    return mObjectOrdinal;
314
    }
315
316
///////////////////////////////////////////////////////////////////////////////////////////////////
317
318
  public boolean isLocal()
319
    {
320
    return mIsLocal;
321
    }
322
323 b42c8399 leszek
///////////////////////////////////////////////////////////////////////////////////////////////////
324
325
  public boolean hasPatterns()
326
    {
327
    return mPatterns!=null;
328
    }
329
330 a7d8c3cd Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
331
332
  public String[][] getPatterns()
333
    {
334
    return mPatterns;
335
    }
336
}