Project

General

Profile

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

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

1 a7d8c3cd Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2021 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6
// Magic Cube is free software: you can redistribute it and/or modify                            //
7
// it under the terms of the GNU General Public License as published by                          //
8
// the Free Software Foundation, either version 2 of the License, or                             //
9
// (at your option) any later version.                                                           //
10
//                                                                                               //
11
// Magic Cube is distributed in the hope that it will be useful,                                 //
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
14
// GNU General Public License for more details.                                                  //
15
//                                                                                               //
16
// You should have received a copy of the GNU General Public License                             //
17
// along with Magic Cube.  If not, see <http://www.gnu.org/licenses/>.                           //
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19
20
package org.distorted.objects;
21
22 314e9ff0 Leszek Koltunski
import java.io.InputStream;
23 f611dc3e Leszek Koltunski
import java.util.Locale;
24 314e9ff0 Leszek Koltunski
25
import android.app.Activity;
26
import android.content.res.Resources;
27 84d746d7 Leszek Koltunski
import android.graphics.Bitmap;
28
import android.graphics.drawable.BitmapDrawable;
29 eb985085 Leszek Koltunski
import android.graphics.drawable.Drawable;
30 314e9ff0 Leszek Koltunski
import android.widget.ImageButton;
31
import android.widget.ImageView;
32
33 a7d8c3cd Leszek Koltunski
import org.distorted.dmesh.ObjectMesh;
34 84d746d7 Leszek Koltunski
import org.distorted.external.RubikFiles;
35 a7d8c3cd Leszek Koltunski
import org.distorted.jsons.ObjectJson;
36 90288e23 Leszek Koltunski
import org.distorted.main.R;
37 fcf7320f Leszek Koltunski
import org.distorted.objectlib.json.JsonWriter;
38 a7d8c3cd Leszek Koltunski
import org.distorted.objectlib.main.ObjectType;
39
import org.distorted.patterns.RubikPatternList;
40 cf486b0d Leszek Koltunski
import org.distorted.solvers.ImplementedSolversList;
41 a7d8c3cd Leszek Koltunski
42 09cf2a36 Leszek Koltunski
import static org.distorted.objectlib.main.TwistyObject.MESH_NICE;
43 e847c553 Leszek Koltunski
import static org.distorted.main.RubikActivity.SHOW_DOWNLOADED_DEBUG;
44 f12e4de9 Leszek Koltunski
45 d433b50e Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
46
47 a7d8c3cd Leszek Koltunski
public class RubikObject
48
{
49 84d746d7 Leszek Koltunski
  private final String mLowerName, mUpperName;
50 6e3fcb91 Leszek Koltunski
  private final int mIconID;
51 a7d8c3cd Leszek Koltunski
  private final String[][] mPatterns;
52
53 84d746d7 Leszek Koltunski
  private int mJsonID, mMeshID, mExtrasID;
54
  private int mObjectMinor, mExtrasMinor;
55
  private int mNumScramble;
56 f12e4de9 Leszek Koltunski
  private int mMeshState;
57 fcf7320f Leszek Koltunski
  private int mExtrasOrdinal;
58 43c2812a Leszek Koltunski
  private Drawable mStaticIconD, mRescaledIconD;
59 cf486b0d Leszek Koltunski
  private final int mSignature;
60 f12e4de9 Leszek Koltunski
61 a7d8c3cd Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
62
63 d433b50e Leszek Koltunski
  RubikObject(ObjectType type)
64 a7d8c3cd Leszek Koltunski
    {
65 cf486b0d Leszek Koltunski
    mSignature   = type.ordinal();
66 d36d8517 Leszek Koltunski
67 84d746d7 Leszek Koltunski
    mUpperName   = type.name();
68 5e048300 Leszek Koltunski
    mLowerName   = type.name().toLowerCase(Locale.ENGLISH);
69 a7d8c3cd Leszek Koltunski
    mNumScramble = type.getNumScramble();
70 314e9ff0 Leszek Koltunski
71
    mIconID      = type.getIconID();
72 cf486b0d Leszek Koltunski
    mJsonID      = ObjectJson.getObjectJsonID(mSignature);
73
    mMeshID      = ObjectMesh.getMeshID(mSignature);
74
    mExtrasID    = ObjectJson.getExtrasJsonID(mSignature);
75 a7d8c3cd Leszek Koltunski
76 cf486b0d Leszek Koltunski
    int patternOrdinal  = RubikPatternList.getOrdinal(mSignature);
77 a7d8c3cd Leszek Koltunski
    mPatterns = RubikPatternList.getPatterns(patternOrdinal);
78 f12e4de9 Leszek Koltunski
79
    mMeshState = MESH_NICE;
80 fcf7320f Leszek Koltunski
    mExtrasOrdinal = -1;
81
82
    mObjectMinor = JsonWriter.VERSION_OBJECT_MINOR;
83
    mExtrasMinor = JsonWriter.VERSION_EXTRAS_MINOR;
84 eb985085 Leszek Koltunski
85 43c2812a Leszek Koltunski
    mStaticIconD  = null;
86
    mRescaledIconD= null;
87 804293f0 Leszek Koltunski
    }
88 84d746d7 Leszek Koltunski
89 314e9ff0 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
90
91
  RubikObject(RubikObjectList.DownloadedObject object)
92
    {
93 e847c553 Leszek Koltunski
    if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "new downloaded RubikObject "+object.shortName+" added");
94 84d746d7 Leszek Koltunski
95
    mLowerName     = object.shortName;
96 f611dc3e Leszek Koltunski
    mUpperName     = object.shortName.toUpperCase(Locale.ENGLISH);
97 84d746d7 Leszek Koltunski
    mNumScramble   = object.numScrambles;
98
    mObjectMinor   = object.objectMinor;
99
    mExtrasMinor   = object.extrasMinor;
100
101 d36d8517 Leszek Koltunski
    mPatterns      = null;
102
    mMeshState     = MESH_NICE;
103
    mExtrasOrdinal = -1;
104 314e9ff0 Leszek Koltunski
105 84d746d7 Leszek Koltunski
    mMeshID        =  0;
106
    mJsonID        = -1;
107
    mExtrasID      = -1;
108 9eeb9c88 Leszek Koltunski
    mIconID        = -1;
109 cf486b0d Leszek Koltunski
    mSignature     = -1;
110 314e9ff0 Leszek Koltunski
    }
111 804293f0 Leszek Koltunski
112 314e9ff0 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
113
114 84d746d7 Leszek Koltunski
  public boolean updateObject(RubikObjectList.DownloadedObject object)
115 314e9ff0 Leszek Koltunski
    {
116 84d746d7 Leszek Koltunski
    boolean changed = false;
117 314e9ff0 Leszek Koltunski
118 84d746d7 Leszek Koltunski
    if( object.objectMinor>JsonWriter.VERSION_OBJECT_MINOR )
119
      {
120 e847c553 Leszek Koltunski
      if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "Updating RubikObject's "+object.shortName+" main JSON");
121 84d746d7 Leszek Koltunski
122
      mObjectMinor = object.objectMinor;
123
      mNumScramble = object.numScrambles;
124
      mMeshID =  0;
125
      mJsonID = -1;
126
      changed = true;
127
      }
128
129
    if( object.extrasMinor>JsonWriter.VERSION_EXTRAS_MINOR )
130
      {
131 e847c553 Leszek Koltunski
      if( SHOW_DOWNLOADED_DEBUG ) android.util.Log.e("D", "Updating RubikObject's "+object.shortName+" extras JSON");
132 84d746d7 Leszek Koltunski
133
      mExtrasMinor = object.extrasMinor;
134
      mExtrasID = -1;
135
      changed = true;
136
      }
137
138
    return changed;
139 314e9ff0 Leszek Koltunski
    }
140 84d746d7 Leszek Koltunski
141 eb985085 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
142
143 43c2812a Leszek Koltunski
  private void createStaticIconDrawable(Activity act)
144
    {
145
    if( mIconID>0 )
146
      {
147
      mStaticIconD = act.getDrawable(mIconID);
148
      }
149
    else
150
      {
151
      RubikFiles files = RubikFiles.getInstance();
152
      Bitmap bmp = files.getIcon(act,mLowerName+".png");
153 9eeb9c88 Leszek Koltunski
      if( bmp==null ) mStaticIconD = act.getDrawable(R.drawable.unknown_icon);
154
      else            mStaticIconD = new BitmapDrawable(act.getResources(), bmp);
155 43c2812a Leszek Koltunski
      }
156
    }
157
158
///////////////////////////////////////////////////////////////////////////////////////////////////
159
160
  private void createRescaledIconDrawable(Activity act)
161 eb985085 Leszek Koltunski
    {
162 84d746d7 Leszek Koltunski
    if( mIconID>0 )
163
      {
164 43c2812a Leszek Koltunski
      mRescaledIconD = act.getDrawable(mIconID);
165 84d746d7 Leszek Koltunski
      }
166
    else
167
      {
168
      RubikFiles files = RubikFiles.getInstance();
169
      Bitmap bmp = files.getIcon(act,mLowerName+".png");
170 9eeb9c88 Leszek Koltunski
      if( bmp==null ) mRescaledIconD = act.getDrawable(R.drawable.unknown_icon);
171
      else            mRescaledIconD = new BitmapDrawable(act.getResources(), bmp);
172 84d746d7 Leszek Koltunski
      }
173 eb985085 Leszek Koltunski
    }
174
175 804293f0 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
176
177 fcf7320f Leszek Koltunski
  public void setExtrasOrdinal(int ordinal)
178 804293f0 Leszek Koltunski
    {
179 fcf7320f Leszek Koltunski
    mExtrasOrdinal = ordinal;
180 804293f0 Leszek Koltunski
    }
181
182
///////////////////////////////////////////////////////////////////////////////////////////////////
183
184 fcf7320f Leszek Koltunski
  public int getExtrasOrdinal()
185 804293f0 Leszek Koltunski
    {
186 fcf7320f Leszek Koltunski
    return mExtrasOrdinal;
187 f12e4de9 Leszek Koltunski
    }
188
189
///////////////////////////////////////////////////////////////////////////////////////////////////
190
191
  public void setMeshState(int state)
192
    {
193
    mMeshState = state;
194
    }
195
196
///////////////////////////////////////////////////////////////////////////////////////////////////
197
198
  public int getMeshState()
199
    {
200
    return mMeshState;
201 a7d8c3cd Leszek Koltunski
    }
202
203
///////////////////////////////////////////////////////////////////////////////////////////////////
204
// PUBLIC API
205
206 84d746d7 Leszek Koltunski
  public String getLowerName()
207
    {
208
    return mLowerName;
209
    }
210
211
///////////////////////////////////////////////////////////////////////////////////////////////////
212
213
  public String getUpperName()
214 a7d8c3cd Leszek Koltunski
    {
215 84d746d7 Leszek Koltunski
    return mUpperName;
216 a7d8c3cd Leszek Koltunski
    }
217
218 cf486b0d Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
219
220
  public int getSignature()
221
    {
222
    return mSignature;
223
    }
224
225 a7d8c3cd Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
226
227 804293f0 Leszek Koltunski
  public int getNumScramble()
228 a7d8c3cd Leszek Koltunski
    {
229 804293f0 Leszek Koltunski
    return mNumScramble;
230 a7d8c3cd Leszek Koltunski
    }
231
232
///////////////////////////////////////////////////////////////////////////////////////////////////
233
234 eb985085 Leszek Koltunski
  public int getObjectMinor()
235
    {
236
    return mObjectMinor;
237
    }
238
239
///////////////////////////////////////////////////////////////////////////////////////////////////
240
241
  public int getExtrasMinor()
242
    {
243
    return mExtrasMinor;
244
    }
245
246
///////////////////////////////////////////////////////////////////////////////////////////////////
247
248
  public void setIconTo(Activity act,ImageButton button)
249 314e9ff0 Leszek Koltunski
    {
250 43c2812a Leszek Koltunski
    if( mStaticIconD==null ) createStaticIconDrawable(act);
251
    button.setBackground(mStaticIconD);
252 314e9ff0 Leszek Koltunski
    }
253
254
///////////////////////////////////////////////////////////////////////////////////////////////////
255
256 eb985085 Leszek Koltunski
  public void setIconTo(Activity act,ImageView view)
257 314e9ff0 Leszek Koltunski
    {
258 43c2812a Leszek Koltunski
    if( mRescaledIconD==null ) createRescaledIconDrawable(act);
259
    view.setImageDrawable(mRescaledIconD);
260 314e9ff0 Leszek Koltunski
    }
261
262
///////////////////////////////////////////////////////////////////////////////////////////////////
263
264
  public InputStream getObjectStream(Activity act)
265 a7d8c3cd Leszek Koltunski
    {
266 84d746d7 Leszek Koltunski
    if( mJsonID>0 )
267 314e9ff0 Leszek Koltunski
      {
268
      Resources res = act.getResources();
269
      return res.openRawResource(mJsonID);
270
      }
271 84d746d7 Leszek Koltunski
    if( mJsonID<0 )
272
      {
273
      RubikFiles files = RubikFiles.getInstance();
274
      return files.openFile(act,mLowerName+"_object.json");
275
      }
276
277 314e9ff0 Leszek Koltunski
    return null;
278 a7d8c3cd Leszek Koltunski
    }
279
280
///////////////////////////////////////////////////////////////////////////////////////////////////
281
282 314e9ff0 Leszek Koltunski
  public InputStream getMeshStream(Activity act)
283 a7d8c3cd Leszek Koltunski
    {
284 84d746d7 Leszek Koltunski
    if( mMeshID>0 )
285 314e9ff0 Leszek Koltunski
      {
286
      Resources res = act.getResources();
287
      return res.openRawResource(mMeshID);
288
      }
289 84d746d7 Leszek Koltunski
290 314e9ff0 Leszek Koltunski
    return null;
291 a7d8c3cd Leszek Koltunski
    }
292
293
///////////////////////////////////////////////////////////////////////////////////////////////////
294
295 314e9ff0 Leszek Koltunski
  public InputStream getExtrasStream(Activity act)
296 a7d8c3cd Leszek Koltunski
    {
297 84d746d7 Leszek Koltunski
    if( mExtrasID>0 )
298 314e9ff0 Leszek Koltunski
      {
299
      Resources res = act.getResources();
300
      return res.openRawResource(mExtrasID);
301
      }
302 84d746d7 Leszek Koltunski
    if( mExtrasID<0 )
303
      {
304
      RubikFiles files = RubikFiles.getInstance();
305
      return files.openFile(act,mLowerName+"_extras.json");
306
      }
307
308 314e9ff0 Leszek Koltunski
    return null;
309 a7d8c3cd Leszek Koltunski
    }
310
311 804293f0 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
312
313 314e9ff0 Leszek Koltunski
  public boolean hasExtras()
314 804293f0 Leszek Koltunski
    {
315 314e9ff0 Leszek Koltunski
    return mExtrasID!=0;
316 804293f0 Leszek Koltunski
    }
317
318 cf486b0d Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
319
// a downloaded object (signature<0) for sure does not have a solver.
320
321
  public boolean hasSolver()
322
    {
323
    return ImplementedSolversList.isImplemented(mSignature);
324
    }
325
326 a7d8c3cd Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
327
328
  public String[][] getPatterns()
329
    {
330
    return mPatterns;
331
    }
332
}