Project

General

Profile

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

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

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