Project

General

Profile

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

magiccube / src / main / java / org / distorted / objects / RubikObject.java @ 8c8a9fb9

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