Revision ec4987d4
Added by Leszek Koltunski almost 3 years ago
| src/main/java/org/distorted/overlays/OverlayStars.java | ||
|---|---|---|
| 34 | 34 |
import org.distorted.library.type.Dynamic1D; |
| 35 | 35 |
import org.distorted.library.type.Dynamic2D; |
| 36 | 36 |
import org.distorted.library.type.Dynamic3D; |
| 37 |
import org.distorted.library.type.Dynamic4D; |
|
| 38 | 37 |
import org.distorted.library.type.Static1D; |
| 39 | 38 |
import org.distorted.library.type.Static2D; |
| 40 | 39 |
import org.distorted.library.type.Static3D; |
| ... | ... | |
| 47 | 46 |
|
| 48 | 47 |
public class OverlayStars extends OverlayGeneric implements EffectListener |
| 49 | 48 |
{
|
| 50 |
private static final int DUR_APP = 1000; |
|
| 51 |
private static final int DUR_MOV = 4000; |
|
| 52 |
private static final int DUR_GLO = 2000; |
|
| 53 |
|
|
| 54 |
private static final int[] colors = new int[] {0,0,1, 1,0,1, 1,0,0, 1,1,0, 0,1,0, 1,1,1}; // blue, pink, red, yellow, green, white
|
|
| 55 |
private static final int INDEX = 5; |
|
| 49 |
private static final int DUR_APP = 1500; |
|
| 50 |
private static final int DUR_MOV = 3500; |
|
| 51 |
private static final int DUR_GLO = 600; |
|
| 56 | 52 |
|
| 57 | 53 |
private ListenerOverlay mListener; |
| 58 | 54 |
private DistortedNode mNodeFalling, mNodeCentral; |
| ... | ... | |
| 64 | 60 |
private int mBmpW, mBmpH; |
| 65 | 61 |
private float mWidth, mHeight; |
| 66 | 62 |
private Random mRandom; |
| 67 |
private long mMoveID, mGlowID, mAlphaID; |
|
| 63 |
private long mMoveID, mGlow1ID, mGlow2ID, mAlphaID;
|
|
| 68 | 64 |
private int mTotalStars, mNewStars; |
| 69 | 65 |
private FragmentEffectAlpha mAlpha; |
| 70 | 66 |
private Dynamic1D mAlphaStrength; |
| 71 | 67 |
private boolean mIncrease; |
| 68 |
private float mTextHeight; |
|
| 72 | 69 |
|
| 73 | 70 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 74 | 71 |
|
| ... | ... | |
| 150 | 147 |
|
| 151 | 148 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 152 | 149 |
|
| 153 |
private void createBitmap(Resources res) |
|
| 150 |
private float computeQuotientAndTextHeight(int total) |
|
| 151 |
{
|
|
| 152 |
if( total>=10000 ) |
|
| 153 |
{
|
|
| 154 |
mTextHeight = 0.610f; |
|
| 155 |
return 0.16f; |
|
| 156 |
} |
|
| 157 |
if( total>= 1000 ) |
|
| 158 |
{
|
|
| 159 |
mTextHeight = 0.625f; |
|
| 160 |
return 0.20f; |
|
| 161 |
} |
|
| 162 |
if( total>= 100 ) |
|
| 163 |
{
|
|
| 164 |
mTextHeight = 0.640f; |
|
| 165 |
return 0.26f; |
|
| 166 |
} |
|
| 167 |
|
|
| 168 |
mTextHeight = 0.655f; |
|
| 169 |
return 0.28f; |
|
| 170 |
} |
|
| 171 |
|
|
| 172 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 173 |
|
|
| 174 |
private void createBitmap(Resources res, int total) |
|
| 154 | 175 |
{
|
| 155 | 176 |
mStarBitmap = BitmapFactory.decodeResource(res, R.drawable.star); |
| 156 | 177 |
mBmpW = mStarBitmap.getWidth(); |
| 157 | 178 |
mBmpH = mStarBitmap.getHeight(); |
| 158 | 179 |
mCountBitmap = Bitmap.createBitmap(mBmpW,mBmpH,Bitmap.Config.ARGB_8888); |
| 159 | 180 |
mCountCanvas = new Canvas(mCountBitmap); |
| 181 |
|
|
| 182 |
float quotient = computeQuotientAndTextHeight(total); |
|
| 183 |
|
|
| 160 | 184 |
mPaint = new Paint(); |
| 161 | 185 |
mPaint.setColor(0xff000000); |
| 162 |
mPaint.setTextSize(mBmpH*0.28f);
|
|
| 186 |
mPaint.setTextSize(mBmpH*quotient);
|
|
| 163 | 187 |
mPaint.setAntiAlias(true); |
| 164 | 188 |
mPaint.setTextAlign(Paint.Align.CENTER); |
| 165 | 189 |
} |
| ... | ... | |
| 232 | 256 |
String txt = ""+numStars; |
| 233 | 257 |
mCountBitmap.eraseColor(0x00000000); |
| 234 | 258 |
mCountCanvas.drawBitmap(mStarBitmap,0,0,null); |
| 235 |
mCountCanvas.drawText(txt,mBmpW*0.5f,mBmpH*0.64f,mPaint);
|
|
| 259 |
mCountCanvas.drawText(txt,mBmpW*0.5f,mBmpH*mTextHeight,mPaint);
|
|
| 236 | 260 |
mTexture.setTexture(mCountBitmap); |
| 237 | 261 |
} |
| 238 | 262 |
|
| ... | ... | |
| 244 | 268 |
mScreen = screen; |
| 245 | 269 |
mListener= listener; |
| 246 | 270 |
DataStars stars = (DataStars)data; |
| 247 |
mTotalStars = stars.getTotal(); |
|
| 271 |
mTotalStars = 7;//stars.getTotal();
|
|
| 248 | 272 |
mNewStars = stars.getNew(); |
| 249 | 273 |
Resources res = stars.getResources(); |
| 250 | 274 |
mWidth = mScreen.getWidth(); |
| ... | ... | |
| 252 | 276 |
mIncrease = mNewStars>0; |
| 253 | 277 |
if( !mIncrease ) mNewStars = -mNewStars; |
| 254 | 278 |
|
| 255 |
createBitmap(res); |
|
| 279 |
createBitmap(res, mTotalStars);
|
|
| 256 | 280 |
mNodeFalling = createNodeFalling(mIncrease); |
| 257 | 281 |
mNodeFalling.enableDepthStencil(InternalOutputSurface.NO_DEPTH_NO_STENCIL); |
| 258 | 282 |
mScreen.attach(mNodeFalling); |
| 259 | 283 |
mNodeCentral = createNodeCentral(mTotalStars); |
| 260 | 284 |
mNodeCentral.glDepthMask(false); |
| 261 |
mNodeCentral.enableDepthStencil(InternalOutputSurface.NO_DEPTH_NO_STENCIL); |
|
| 262 | 285 |
mScreen.attach(mNodeCentral); |
| 263 | 286 |
|
| 264 | 287 |
return 0; |
| 265 | 288 |
} |
| 266 | 289 |
|
| 290 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 291 |
|
|
| 292 |
private PostprocessEffectGlow constructGlow(boolean firstPhase) |
|
| 293 |
{
|
|
| 294 |
Dynamic2D haloRadius = new Dynamic2D(DUR_GLO,0.5f); |
|
| 295 |
Static2D point0 = new Static2D( 0, 0); |
|
| 296 |
Static2D point1 = new Static2D(15,50); |
|
| 297 |
|
|
| 298 |
if( firstPhase ) |
|
| 299 |
{
|
|
| 300 |
haloRadius.add(point0); |
|
| 301 |
haloRadius.add(point1); |
|
| 302 |
} |
|
| 303 |
else |
|
| 304 |
{
|
|
| 305 |
haloRadius.add(point1); |
|
| 306 |
haloRadius.add(point0); |
|
| 307 |
} |
|
| 308 |
|
|
| 309 |
Static4D color = new Static4D(1,1,1,0.5f); |
|
| 310 |
|
|
| 311 |
PostprocessEffectGlow glow = new PostprocessEffectGlow(haloRadius,color); |
|
| 312 |
glow.setQuality(EffectQuality.MEDIUM); |
|
| 313 |
glow.notifyWhenFinished(this); |
|
| 314 |
|
|
| 315 |
return glow; |
|
| 316 |
} |
|
| 317 |
|
|
| 267 | 318 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 268 | 319 |
|
| 269 | 320 |
public void effectFinished(long id) |
| 270 | 321 |
{
|
| 271 | 322 |
if( id==mMoveID ) |
| 272 | 323 |
{
|
| 273 |
Dynamic2D haloRadius = new Dynamic2D(DUR_GLO,1.0f); |
|
| 274 |
haloRadius.add(new Static2D( 0, 0)); |
|
| 275 |
haloRadius.add(new Static2D(15,50)); |
|
| 276 |
haloRadius.add(new Static2D( 0, 0)); |
|
| 277 |
|
|
| 278 |
Dynamic4D color= new Dynamic4D(DUR_GLO,1.0f); |
|
| 279 |
Static4D P1 = new Static4D(colors[3*INDEX],colors[3*INDEX+1], colors[3*INDEX+2], 0.0f); |
|
| 280 |
Static4D P2 = new Static4D(colors[3*INDEX],colors[3*INDEX+1], colors[3*INDEX+2], 0.5f); |
|
| 281 |
color.add(P1); |
|
| 282 |
color.add(P2); |
|
| 283 |
color.add(P1); |
|
| 284 |
|
|
| 285 |
PostprocessEffectGlow glow = new PostprocessEffectGlow(haloRadius,color); |
|
| 286 |
glow.setQuality(EffectQuality.MEDIUM); |
|
| 287 |
mGlowID = glow.getID(); |
|
| 288 |
glow.notifyWhenFinished(this); |
|
| 324 |
PostprocessEffectGlow glow = constructGlow(true); |
|
| 325 |
mGlow1ID = glow.getID(); |
|
| 289 | 326 |
DistortedEffects effects = mNodeCentral.getEffects(); |
| 290 | 327 |
effects.apply(glow); |
| 328 |
} |
|
| 329 |
if( id==mGlow1ID ) |
|
| 330 |
{
|
|
| 291 | 331 |
renderStars(mTotalStars+(mIncrease ? mNewStars : -mNewStars)); |
| 332 |
PostprocessEffectGlow glow = constructGlow(false); |
|
| 333 |
mGlow2ID = glow.getID(); |
|
| 334 |
DistortedEffects effects = mNodeCentral.getEffects(); |
|
| 335 |
effects.abortById(mGlow1ID); |
|
| 336 |
effects.apply(glow); |
|
| 292 | 337 |
} |
| 293 |
if( id==mGlowID ) |
|
| 338 |
if( id==mGlow2ID )
|
|
| 294 | 339 |
{
|
| 340 |
DistortedEffects effects = mNodeCentral.getEffects(); |
|
| 341 |
effects.abortById(mGlow2ID); |
|
| 295 | 342 |
createAlphaEffect(false); |
| 296 | 343 |
mAlphaID = mAlpha.getID(); |
| 297 | 344 |
mAlpha.notifyWhenFinished(this); |
| 345 |
effects.apply(mAlpha); |
|
| 298 | 346 |
} |
| 299 | 347 |
if( id==mAlphaID ) |
| 300 | 348 |
{
|
Also available in: Unified diff
'Stars' animation: support totalStars up to 5 digits long, i.e. up to 99999.