]> git.bts.cx Git - benzene.git/blob - src/bz/gfx/particle_drawing.c
Initial version
[benzene.git] / src / bz / gfx / particle_drawing.c
1 #include <bz/gfx/particle_drawing.h>
2
3 #include <bz/fx/particle_simulation_internal.h>
4 #include <bz/gfx/gfx.h>
5
6 //static void drawBasicParticle(size_t particleCount, float ticks, float spawnTick[], float lifetimes[], float positionX[], float positionY[], float sizes[], float colors[], float alpha[]);
7
8 void bzGfxDrawParticles(BZParticleSimulationID simulation, BZDrawQueueID drawQueue) {
9 BZMatrix m;
10
11 for (size_t i = 0; i < simulation->maxParticles; ++i) {
12 float particleStartTicks = simulation->spawnTime[i];
13 float lifetime = simulation->lifetime[i];
14 if (particleStartTicks + lifetime >= simulation->time) {
15 if (simulation->alpha[i] < 0.25f) {
16 bzFillP(0);
17 } else if (simulation->alpha[i] < 0.50f) {
18 bzFillP(23130);//bzFillP(23130);
19 } else if (simulation->alpha[i] < 0.75f) {
20 bzFillP(32125);//bzFillP(32125);
21 } else {
22 bzFillP(32735);//bzFillP(0xFF); // FIXME
23 }
24
25 bzSetPaletteColor(0, 0, simulation->color[i]);
26 //bzSetGlobalBlendColor(simulation->color[i]);
27
28 bzMatrixSRT(&m, simulation->positionX[i], simulation->positionY[i], simulation->angle[i], simulation->size[i], simulation->size[i]);
29 bzSetGlobalViewMatrix(&m);
30 //bzMatrixTRS(&m, 0, 0, simulation->angle[i], simulation->size[i], simulation->size[i]);
31 //bzSetGlobalLocalMatrix(&m);
32
33 if (drawQueue != NULL) {
34 bzGfxDrawQueueRun(drawQueue);
35 } else {
36 bzCircFill(0, 0, 1, 0);
37 }
38 }
39 }
40 bzFillP(0);
41
42 bzMatrixIdentity(&m);
43 bzSetGlobalViewMatrix(&m);
44 //bzSetGlobalLocalMatrix(&m);
45 bzSetPaletteColor(0, 0, 0);
46 //bzSetGlobalBlendColor(0xFF);
47
48
49 //void bzGfxDrawParticles(BZParticleSimulationID simulation) {
50
51
52 // FIXME, allow registering draw lists for particles
53
54 // BZParticleSimulationDrawFunction drawFunction = drawBasicParticle; // FIXME, allow register others
55 // drawFunction(simulation->maxParticles, simulation->time, simulation->spawnTime, simulation->lifetime, simulation->positionX, simulation->positionY, simulation->size, simulation->color, simulation->alpha);
56 }
57
58 /*static void drawBasicParticle(size_t particleCount, float time, float spawnTime[], float lifetimes[], float positionX[], float positionY[], float sizes[], float colors[], float alpha[]) {
59 for (size_t i = 0; i < particleCount; ++i) {
60 float particleStartTicks = spawnTime[i];
61 float lifetime = lifetimes[i];
62 if (particleStartTicks + lifetime >= time) {
63 if (alpha[i] < 0.25f) {
64 bzFillP(0);
65 } else if (alpha[i] < 0.50f) {
66 bzFillP(23130);//bzFillP(23130);
67 } else if (alpha[i] < 0.75f) {
68 bzFillP(32125);//bzFillP(32125);
69 } else {
70 bzFillP(32735);//bzFillP(0xFF); // FIXME
71 }
72
73 bzGfxDrawQueueRun(BZDrawQueueID drawQueue);
74 //bzCircFill(positionX[i], positionY[i], sizes[i], colors[i]);
75 }
76 }
77 bzFillP(0);
78 }*/
79
80 //nil,32800.99988,▒,░,32735.99988