Project

General

Profile

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

magiccube / src / main / java / org / distorted / objects / RubikObject.java @ ab19c113

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