58- (id) initExplosionCloudWithEntity:(
Entity *)entity size:(
float)size andSettings:(NSDictionary *)settings
65 if (settings ==
nil) {
71 unsigned count = [
_settings oo_unsignedIntForKey:kExplosionCount defaultValue:25];
72 if (
count > maxCount) {
80 _growthRate = [
_settings oo_floatForKey:kExplosionGrowth defaultValue:kGrowthRateFactor] *
size;
81 _alpha = [
_settings oo_floatForKey:kExplosionAlpha defaultValue:kExplosionCloudAlpha];
82 _brightnessMult = [
_settings oo_floatForKey:kExplosionBrightness defaultValue:kExplosionBrightnessMult];
83 if (_brightnessMult < 1.0f) _brightnessMult = 1.0f;
84 _cloudDuration = [
_settings oo_doubleForKey:kExplosionDuration defaultValue:kExplosionCloudDuration];
86 GLfloat spread = [
_settings oo_floatForKey:kExplosionSpread defaultValue:1.0];
88 NSString *textureFile = [
_settings oo_stringForKey:kExplosionTexture defaultValue:@"oolite-particle-cloud2.png"];
92 options:kOOTextureMinFilterMipMap | kOOTextureMagFilterLinear | kOOTextureAlphaMask
101 GLfloat
baseColor[4] = {1.0,1.0,1.0,1.0};
103 if (magnitude2(vel) > 1000000)
106 vel = vector_multiply_scalar(vector_normal(vel),1000);
111 NSString *color_order = [
_settings oo_stringForKey:kExplosionColors defaultValue:@"rgb"];
113 for (i=0;i<
count;i++)
115 if ([color_order isEqualToString:
@"white"]) {
117 _particleColor[
i][0] = _particleColor[
i][1] = _particleColor[
i][2] =
randf();
128 if ([color_order isEqualToString:
@"rgb"])
130 _particleColor[
i][0] = c1;
131 _particleColor[
i][1] = c2;
132 _particleColor[
i][2] = c3;
134 else if ([color_order isEqualToString:
@"rbg"])
136 _particleColor[
i][0] = c1;
137 _particleColor[
i][1] = c3;
138 _particleColor[
i][2] = c2;
140 else if ([color_order isEqualToString:
@"grb"])
142 _particleColor[
i][0] = c2;
143 _particleColor[
i][1] = c1;
144 _particleColor[
i][2] = c3;
146 else if ([color_order isEqualToString:
@"gbr"])
148 _particleColor[
i][0] = c3;
149 _particleColor[
i][1] = c1;
150 _particleColor[
i][2] = c2;
152 else if ([color_order isEqualToString:
@"brg"])
154 _particleColor[
i][0] = c2;
155 _particleColor[
i][1] = c3;
156 _particleColor[
i][2] = c1;
158 else if ([color_order isEqualToString:
@"bgr"])
160 _particleColor[
i][0] = c3;
161 _particleColor[
i][1] = c2;
162 _particleColor[
i][2] = c1;
167 _particleColor[
i][0] *= _brightnessMult;
168 _particleColor[
i][1] *= _brightnessMult;
169 _particleColor[
i][2] *= _brightnessMult;
170 _particleColor[
i][3] = _alpha;
207 NSString *color_order = [_settings oo_stringForKey:kExplosionColors defaultValue:@"rgb"];
208 NSUInteger primary = 0, secondary = 1, tertiary = 2;
210 if ([color_order isEqualToString:
@"rgb"])
216 else if ([color_order isEqualToString:
@"rbg"])
222 else if ([color_order isEqualToString:
@"grb"])
228 else if ([color_order isEqualToString:
@"gbr"])
234 else if ([color_order isEqualToString:
@"brg"])
240 else if ([color_order isEqualToString:
@"bgr"])
248 float fdelta_t = delta_t;
249 for (i=0;i<
count;i++) {
253 particleColor[
i][3] = newAlpha;
254 if (![color_order isEqualToString:
@"white"])
257 if (particleColor[i][tertiary] > 0.0f)
259 particleColor[
i][
tertiary] -= fdelta_t * 0.5f * fadeRate;
260 if (particleColor[i][tertiary] < 0.0f)
265 else if (particleColor[i][secondary] > 0.0f)
267 particleColor[
i][
secondary] -= fdelta_t * fadeRate;
268 if (particleColor[i][secondary] < 0.0f)
273 else if (particleColor[i][primary] > 0.0f)
275 particleColor[
i][
primary] -= fdelta_t * 2.0f * fadeRate;
276 if (particleColor[i][primary] < 0.0f)
void update:(OOTimeDelta delta_t)
GLfloat _particleSize[kFragmentBurstMaxParticles]
GLfloat _particleColor[kFragmentBurstMaxParticles][4]
id textureWithName:inFolder:options:anisotropy:lodBias:(NSString *name,[inFolder] NSString *directory,[options] OOTextureFlags options,[anisotropy] GLfloat anisotropy,[lodBias] GLfloat lodBias)