Skip to content

Commit

Permalink
Parsing is working now, Added PNG encoded PEX to use for now; Started…
Browse files Browse the repository at this point in the history
… coding emitter logic and Particle Logic
  • Loading branch information
billylindeman committed Oct 14, 2014
1 parent 72e7712 commit 3c82525
Show file tree
Hide file tree
Showing 7 changed files with 149 additions and 67 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageView;

import com.billylindeman.dust.particle.Emitter;
import com.billylindeman.dust.particle.EmitterConfig;
Expand All @@ -16,8 +17,11 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dust);

EmitterConfig config = EmitterConfig.fromStream(getResources().openRawResource(R.raw.plasma_glow));
EmitterConfig config = EmitterConfig.fromStream(getResources().openRawResource(R.raw.confetti));
Emitter e = new Emitter(config);

ImageView imageView = (ImageView)findViewById(R.id.imageview);
imageView.setImageBitmap(config.texture);
}


Expand Down
5 changes: 3 additions & 2 deletions dust-sample/src/main/res/layout/activity_dust.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:background="@android:color/black"
tools:context=".DustActivity">

<TextView
android:text="@string/hello_world"
<ImageView
android:id="@+id/imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

Expand Down
42 changes: 42 additions & 0 deletions dust-sample/src/main/res/raw/confetti.pex
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@

<particleEmitterConfig>
<absolutePosition value="0"></absolutePosition>
<yCoordFlipped value="1"></yCoordFlipped>
<sourcePosition x="150.00" y="50.00"></sourcePosition>
<sourcePositionVariance x="180.00" y="7.00"></sourcePositionVariance>
<speed value="0.00"></speed>
<speedVariance value="30.00"></speedVariance>
<particleLifeSpan value="7.2894"></particleLifeSpan>
<particleLifespanVariance value="0.0000"></particleLifespanVariance>
<angle value="90.00"></angle>
<angleVariance value="178.95"></angleVariance>
<gravity x="0.00" y="-120.00"></gravity>
<radialAcceleration value="0.00"></radialAcceleration>
<tangentialAcceleration value="0.00"></tangentialAcceleration>
<radialAccelVariance value="0.00"></radialAccelVariance>
<tangentialAccelVariance value="0.00"></tangentialAccelVariance>
<startColor red="0.85" green="0.30" blue="0.00" alpha="0.50"></startColor>
<startColorVariance red="1.00" green="1.00" blue="1.00" alpha="1.00"></startColorVariance>
<finishColor red="1.00" green="1.00" blue="1.00" alpha="1.00"></finishColor>
<finishColorVariance red="1.00" green="1.00" blue="1.00" alpha="1.00"></finishColorVariance>
<maxParticles value="2000"></maxParticles>
<startParticleSize value="12.00"></startParticleSize>
<startParticleSizeVariance value="0.00"></startParticleSizeVariance>
<finishParticleSize value="12.00"></finishParticleSize>
<finishParticleSizeVariance value="0.00"></finishParticleSizeVariance>
<duration value="-1.00"></duration>
<emitterType value="0"></emitterType>
<maxRadius value="0.00"></maxRadius>
<maxRadiusVariance value="0.00"></maxRadiusVariance>
<minRadius value="300.00"></minRadius>
<minRadiusVariance value="0.00"></minRadiusVariance>
<rotatePerSecond value="360.00"></rotatePerSecond>
<rotatePerSecondVariance value="0.00"></rotatePerSecondVariance>
<blendFuncSource value="1"></blendFuncSource>
<blendFuncDestination value="771"></blendFuncDestination>
<rotationStart value="50.11"></rotationStart>
<rotationStartVariance value="78.57"></rotationStartVariance>
<rotationEnd value="2302.98"></rotationEnd>
<rotationEndVariance value="0.00"></rotationEndVariance>
<texture name="confetti.png" data="H4sIAFyWPVQAA+sM8HPn5ZLiYmBg4PX0cAkC0vwgzMEGJK2vTfUCUpwFHpHFDAysnSDMmJsx9xdQULLENaIkOD+tpDyxKJXBMSU/KVXBMzcxPTUoNTGlsvBkqg1Q0TRPF8eQiltJf/7/t2fe2dDp8pXPQYbheWOOWoNsQ8XBepYfDJMPL/dk6FD/c5xP5kMmW+aeD/LmMxq8jRV7FT4wTH/G/L+TmeuFFDdHBgNrGNOVUp4X5/42uD9mnaGWs/AukMGYw9h9prJBvYDlQ2bZgeTVzOu2NMyxkU/y7ONu/MFw7kiXqqaS+1SmfUu6vQ8xSOVWXLZ1aGBkOCefExXk9zAJ6EIGT1c/l3VOCU0ANExRkAkBAAA="></texture>
</particleEmitterConfig>
41 changes: 0 additions & 41 deletions dust-sample/src/main/res/raw/plasma_glow.pex

This file was deleted.

45 changes: 45 additions & 0 deletions dust/src/main/java/com/billylindeman/dust/particle/Emitter.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,57 @@
*/
public class Emitter {
EmitterConfig config;


boolean active;
Particle[] particles;

float emissionRate;
float emitCounter;
float elapsedTime;
int particleCount;
int particleIndex;

public Emitter(EmitterConfig c){
config = c;

emissionRate = config.maxParticles / config.particleLifespan;
emitCounter = 0;
}

public void updateWithDelta(float delta) {
if(active && emissionRate > 0) {
float rate = 1.0f / emissionRate;

if(particleCount < config.maxParticles) {
emitCounter += delta;
}

while(particleCount < config.maxParticles && emitCounter > rate) {
addParticle();
emitCounter -= rate;
}
elapsedTime += delta;

if(config.duration != -1 && config.duration < elapsedTime) {
stopEmission();
}
}

particleIndex = 0;

while(particleIndex < particleCount) {

}

}

private void addParticle() {

}

public void stopEmission() {

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import android.graphics.BitmapFactory;
import android.graphics.PointF;
import android.util.Base64;
import android.util.Log;

import com.billylindeman.dust.util.Color;

Expand Down Expand Up @@ -41,11 +42,8 @@ public class EmitterConfig {
float finishParticleSize, finishParticleSizeVariance;

int maxParticles;
int particleCount;

float emissionRate;
float emitCounter;
float elapsedTime;

float duration;
float rotationStart, rotationStartVariance;
float rotationEnd, rotationEndVariance;
Expand Down Expand Up @@ -115,12 +113,11 @@ private void extractConfigOptions(Document doc) throws Exception {
rotationEnd = parseFloatValueForElement(doc, "rotationEnd");
rotationEndVariance = parseFloatValueForElement(doc, "rotationEndVariance");

emissionRate = maxParticles / particleLifespan;
emitCounter = 0;


texture = parseBase64GzippedTextureFromDocument(doc);

if(texture == null) {
Log.d("EmitterConfig", "Texture format in PEX file unsupported!");
}
}


Expand Down
64 changes: 49 additions & 15 deletions dust/src/main/java/com/billylindeman/dust/particle/Particle.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,57 @@

import android.graphics.PointF;

import java.util.Random;

/**
*
*/
public class Particle {
PointF position;
PointF direction;
int color;
int deltaColor;
float rotation;
float rotationDelta;
float radialAcceleration;
float tangentialAcceleration;
float radius;
float radiusDelta;
float angle;
float degreesPerSecond;
float particleSize;
float particleSizeDelta;
float timeToLive;
static Random r = new Random();


private EmitterConfig config;

public PointF position;
public PointF direction;
public PointF startPos;
public int color;
public int deltaColor;
public float rotation;
public float rotationDelta;
public float radialAcceleration;
public float tangentialAcceleration;
public float radius;
public float radiusDelta;
public float angle;
public float degreesPerSecond;
public float particleSize;
public float particleSizeDelta;
public float timeToLive;

public Particle(EmitterConfig c) {
config = c;
init();
}

public void init() {
//init the position of the particle
position.x = config.sourcePosition.x + config.sourcePositionVariance.x * randomMinusOneToOne();
position.y = config.sourcePosition.y + config.sourcePositionVariance.y * randomMinusOneToOne();
startPos.x = config.sourcePosition.x;
startPos.y = config.sourcePosition.y;


//Init the direction of particle
angle = config.angle + config.angleVariance * randomMinusOneToOne();

PointF vector = new PointF()

}


private static float randomMinusOneToOne() {
return (r.nextFloat() * 2 ) - 1;
}

}

0 comments on commit 3c82525

Please sign in to comment.