32#import "MyOpenGLView.h"
36#define FREEZE_PARTICLES 0
51- (id) initWithPosition:(HPVector)pos
54 minSpeed:(
float)minSpeed
55 maxSpeed:(
float)maxSpeed
57 baseColor:(GLfloat[4])baseColor
61 if ((
self = [super
init]))
70 for (
unsigned i = 0; i <
count; i++)
76 color = vector_normal(color);
51- (id) initWithPosition:(HPVector)pos {
…}
95 return [
NSString stringWithFormat:@"ttl: %.3fs", _duration - _timePassed];
105- (BOOL) checkCloseCollisionWith:(
Entity *)other
107 if (other == [
self owner])
return NO;
105- (BOOL) checkCloseCollisionWith:(
Entity *)other {
…}
123 for (i = 0; i <
count; i++)
125 particlePosition[
i] = vector_add(particlePosition[i], vector_multiply_scalar(particleVelocity[i], delta_t));
133#define DrawQuadForView(x, y, z, sz) \
135 glTexCoord2f(0.0, 1.0); glVertex3f(x-sz, y-sz, z); \
136 glTexCoord2f(1.0, 1.0); glVertex3f(x+sz, y-sz, z); \
137 glTexCoord2f(1.0, 0.0); glVertex3f(x+sz, y+sz, z); \
138 glTexCoord2f(0.0, 0.0); glVertex3f(x-sz, y+sz, z); \
133#define DrawQuadForView(x, y, z, sz) \ …
142- (void) drawImmediate:(
bool)immediate translucent:(
bool)translucent
144 if (!translucent || [
UNIVERSE breakPatternHide])
return;
149 OOGL(glPushAttrib(GL_ENABLE_BIT | GL_COLOR_BUFFER_BIT));
151 OOGL(glEnable(GL_TEXTURE_2D));
152 OOGL(glEnable(GL_BLEND));
153 OOGL(glBlendFunc(GL_SRC_ALPHA, GL_ONE));
156 HPVector viewPosition = [PLAYER viewpointPosition];
157 HPVector selfPosition = [
self position];
171 for (i = 0; i <
count; i++)
173 glColor4fv(particleColor[i]);
174 DrawQuadForView(particlePosition[i].
x, particlePosition[i].
y, particlePosition[i].z, particleSize[i]);
183 float thresholdSq = distanceThreshold * distanceThreshold;
186 if (distanceSq > thresholdSq)
194 for (i = 0; i <
count; i++)
200 glColor4fv(particleColor[i]);
214 float individuality = 3.0f * (1.0f - distanceSq / thresholdSq);
215 individuality = OOClamp_0_1_f(individuality);
217 for (i = 0; i <
count; i++)
223 glColor4fv(particleColor[i]);
142- (void) drawImmediate:(
bool)immediate translucent:(
bool)translucent {
…}
263- (id) initFragmentBurstFrom:(HPVector)fragPosition velocity:(Vector)fragVelocity size:(GLfloat)size
281 for (
unsigned i = 0; i <
count; i++)
292+ (id) fragmentBurstFromEntity:(
Entity *)entity
292+ (id) fragmentBurstFromEntity:(
Entity *)entity {
…}
310 for (i = 0; i <
count; i++)
312 GLfloat du = 0.5f + (1.0f/32.0f) * (32 - i);
313 particleColor[
i][3] = OOClamp_0_1_f(1.0f - timePassed / du);
322- (id) initFragmentBurstFrom:(HPVector)fragPosition velocity:(Vector)fragVelocity size:(GLfloat)size
324 float minSpeed = 1.0f +
size * 0.5f;
337 for (
unsigned i = 0; i <
count; i++)
347+ (id) fragmentBurstFromEntity:(
Entity *)entity
347+ (id) fragmentBurstFromEntity:(
Entity *)entity {
…}
353- (void) update:(
double)delta_t
368 GLfloat di = 1.0f / (
count - 1);
370 for (i = 0; i <
count; i++)
372 GLfloat du = duration * (0.5f + di * i);
373 particleColor[
i][3] = OOClamp_0_1_f(1.0f - timePassed / du);
375 particleSize[
i] =
size;
353- (void) update:(
double)delta_t {
…}
#define OO_ENTER_OPENGL()
OOMatrix OOMatrixForBillboard(HPVector bbPos, HPVector eyePos)
void OOGLPushModelView(void)
void OOGLTranslateModelView(Vector vector)
void OOGLMultModelView(OOMatrix matrix)
OOMatrix OOGLPopModelView(void)
@ OPENGL_STATE_ADDITIVE_BLENDING
#define OOVerifyOpenGLState()
BOOL OOCheckOpenGLErrors(NSString *format,...)
#define OOSetOpenGLState(STATE)
@ kFragmentBurstMaxParticles
@ kBigFragmentBurstMaxParticles
#define DrawQuadForView(x, y, z, sz)
Vector OORandomUnitVector(void)
void update:(OOTimeDelta delta_t)
GLfloat collisionRadius()
GLfloat cam_zero_distance
void setStatus:(OOEntityStatus stat)
void setPosition:(HPVector posn)
void getRed:green:blue:alpha:(float *red,[green] float *green,[blue] float *blue,[alpha] float *alpha)
OOColor * colorWithHue:saturation:brightness:alpha:(float hue,[saturation] float saturation,[brightness] float brightness,[alpha] float alpha)
OOTexture * defaultParticleTexture()
void update:(OOTimeDelta delta_t)
NSString * descriptionComponents()
Vector _particleVelocity[kFragmentBurstMaxParticles]
GLfloat _particleSize[kFragmentBurstMaxParticles]
GLfloat _particleColor[kFragmentBurstMaxParticles][4]
Vector _particlePosition[kFragmentBurstMaxParticles]