-
Notifications
You must be signed in to change notification settings - Fork 59
/
Data.hx
86 lines (73 loc) · 2.04 KB
/
Data.hx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package format.pex;
@:enum
abstract EmitterType(Int) from Int to Int
{
var Gravity = 0;
var Radial = 1;
}
@:enum
abstract BlendFunction(Int) from Int to Int
{
var Zero = 0;
var One = 1;
var SourceColor = 0x300;
var OneMinusSourceColor = 0x301;
var SourceAlpha = 0x302;
var OneMinusSourceAlpha = 0x303;
var DestinationAlpha = 0x304;
var OneMinusDestinationAlpha = 0x305;
var DestinationColor = 0x306;
var OneMinusDestinationColor = 0x307;
}
@:forward(base, variance)
abstract ValueWithVariance<T:Float>({base:T, variance:T})
{
public inline function new(base:T, variance:T)
{
this = {base:base, variance:variance};
}
/**
* Choose a random float within this range.
*/
public inline function random():Float
{
return this.base + (Math.random() * 2 - 1) * this.variance;
}
/**
* Choose a random integer within this range.
*/
public inline function randomInt():Int
{
return Std.int(Math.round(random()));
}
}
typedef FloatWithVariance = ValueWithVariance<Float>;
typedef UIntWithVariance = ValueWithVariance<UInt>;
class PexParticle
{
public var emitterType:EmitterType = EmitterType.Gravity;
public var textureName:String;
public var emitterXVariance:Float = 0;
public var emitterYVariance:Float = 0;
public var duration:Float = 0;
public var maxParticles:Int = 0;
public var lifespan:FloatWithVariance;
public var startSize:FloatWithVariance;
public var endSize:FloatWithVariance;
public var emitAngle:FloatWithVariance;
public var startRotation:FloatWithVariance;
public var endRotation:FloatWithVariance;
public var speed:FloatWithVariance;
public var gravityX:Float = 0;
public var gravityY:Float = 0;
public var radialAcceleration:FloatWithVariance;
public var tangentialAcceleration:FloatWithVariance;
public var maxRadius:FloatWithVariance;
public var minRadius:FloatWithVariance;
public var rotatePerSecond:FloatWithVariance;
public var startColor:UIntWithVariance;
public var endColor:UIntWithVariance;
public var blendSource:BlendFunction;
public var blendDestination:BlendFunction;
public function new() {}
}