|
@@ -8,7 +8,7 @@ enum Value {
|
|
|
VCos( freq : Float, ampl : Float, offset : Float );
|
|
|
VPoly( values : Array<Float>, points : Array<Float> );
|
|
|
VRandom( start : Float, len : Float, converge : Converge );
|
|
|
- VCustom( lifeToValue : Float -> (Void -> Float) -> Float ); // time -> random -> value
|
|
|
+ VCustom( p : Particle -> Float );
|
|
|
}
|
|
|
|
|
|
enum Converge {
|
|
@@ -77,6 +77,7 @@ class State {
|
|
|
public var blendMode : BlendMode;
|
|
|
public var sortMode : SortMode;
|
|
|
public var is3D : Bool;
|
|
|
+ public var isAlphaMap : Bool;
|
|
|
|
|
|
// emit
|
|
|
public var loop : Bool;
|
|
@@ -118,6 +119,7 @@ class State {
|
|
|
|
|
|
// extra
|
|
|
public var delay : Float;
|
|
|
+ public var update : Particle -> Void;
|
|
|
|
|
|
public function new() {
|
|
|
}
|
|
@@ -129,6 +131,7 @@ class State {
|
|
|
blendMode = SoftAdd;
|
|
|
sortMode = Back;
|
|
|
is3D = false;
|
|
|
+ isAlphaMap = false;
|
|
|
// emit
|
|
|
loop = true;
|
|
|
emitRate = VConst(100);
|
|
@@ -162,7 +165,20 @@ class State {
|
|
|
delay = 0.;
|
|
|
}
|
|
|
|
|
|
- public inline function eval( v : Value, time : Float, rand : Void -> Float ) : Float {
|
|
|
+ public function scale( val : Value, v : Float ) {
|
|
|
+ return switch( val ) {
|
|
|
+ case VConst(c): VConst(c * v);
|
|
|
+ case VRandom(start, len, c): VRandom(start * v, len * v, c);
|
|
|
+ case VLinear(start, len): VLinear(start * v, len * v);
|
|
|
+ case VPow(start, len, p): VPow(start * v, len * v, p);
|
|
|
+ case VSin(f, a, o): VSin(f, a * v, o * v);
|
|
|
+ case VCos(f, a, o): VCos(f, a * v, o * v);
|
|
|
+ case VPoly(values, points): VPoly([for( v2 in values ) v * v2], [for( i in 0...points.length ) { var p = points[i]; if( i & 1 == 0 ) p else p * v; } ]);
|
|
|
+ case VCustom(f): VCustom(function(p) return f(p) * v);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public inline function eval( v : Value, time : Float, rand : Void -> Float, p ) : Float {
|
|
|
return switch( v ) {
|
|
|
case VConst(c): c;
|
|
|
case VRandom(s, l, c): s + (switch( c ) { case No: l; case Start: l * time; case End: l * (1 - time); }) * rand();
|
|
@@ -178,7 +194,7 @@ class State {
|
|
|
j--;
|
|
|
}
|
|
|
y;
|
|
|
- case VCustom(f): f(time, rand);
|
|
|
+ case VCustom(f): f(p);
|
|
|
}
|
|
|
}
|
|
|
|