Project

General

Profile

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

magiccube / src / main / java / org / distorted / objects / RubikObject.java @ 90288e23

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