package com.sandro.example; import java.util.Random; public class ParticleManager { private int viewWidth; private int viewHeight; private Random random; private Particle[] particles ; private final static int INIT_PATRICALES = 1000; public ParticleManager(int viewWidth,int viewHeight){ this.viewWidth = viewWidth; this.viewHeight = viewHeight; random = new Random(); particles = createParticles(INIT_PATRICALES); } private Particle[] createParticles(int num){ Particle paricles[] = new Particle[num]; for(int i = 0;i<num;i++){ Particle p = new Particle((viewWidth/2 - 35) + random.nextInt(70),random.nextInt(60),random); paricles[i] = p; } return paricles; } public int[] getBitmapArray(int[] bitMapArray){ for(int i = 0;i<particles.length;i++){ Particle p = particles[i]; if(p!=null && !p.move(viewWidth,viewHeight,random)){ particles[i]=null; } } for(Particle p : particles){ if(p!=null){ drawPatricle(bitMapArray,p); } } return bitMapArray; } private void drawPatricle(int[] bitMapArray, Particle p) { bitMapArray[p.y * viewWidth + p.x] = p.color; bitMapArray[p.y * viewWidth + p.x - 1] = p.color; bitMapArray[p.y * viewWidth + p.x + 1] = p.color; bitMapArray[(p.y-1) * viewWidth + p.x] = p.color; bitMapArray[(p.y+1) * viewWidth + p.x] = p.color; drawBulr((p.y-1) * viewWidth + p.x - 1,bitMapArray); drawBulr((p.y-1) * viewWidth + p.x + 1,bitMapArray); drawBulr((p.y+1) * viewWidth + p.x - 1,bitMapArray); drawBulr((p.y+1) * viewWidth + p.x + 1,bitMapArray); drawBulr((p.y-2) * viewWidth + p.x ,bitMapArray); drawBulr((p.y+2) * viewWidth + p.x ,bitMapArray); drawBulr(p.y * viewWidth + p.x - 2,bitMapArray); drawBulr(p.y * viewWidth + p.x + 2,bitMapArray); drawBulr((p.y -2) * viewWidth + p.x - 2,bitMapArray); drawBulr((p.y -2) * viewWidth + p.x + 2,bitMapArray); drawBulr((p.y +2) * viewWidth + p.x - 2,bitMapArray); drawBulr((p.y +2) * viewWidth + p.x + 2,bitMapArray); } private void drawBulr(int arrayIndex,int[] bitMapArray){ int upcolor = bitMapArray[arrayIndex-viewWidth] >>16; int downcolor = bitMapArray[arrayIndex+viewWidth] >>16; int rightcolor = bitMapArray[arrayIndex+1] >>16; int leftcolor = bitMapArray[arrayIndex-1] >>16; int color; if(bitMapArray[arrayIndex]==0){ color = (upcolor + downcolor + rightcolor + leftcolor)/4; }else{ color = (upcolor + downcolor + rightcolor + leftcolor + (bitMapArray[arrayIndex]>>16))/5; } bitMapArray[arrayIndex] = color << 16 | color << 8 | color; } }