Initial
This commit is contained in:
commit
62d2de747e
1 changed files with 130940 additions and 0 deletions
83
Forráskód/modules/particles.c
Normal file
83
Forráskód/modules/particles.c
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
#include "particles.h"
|
||||
|
||||
#define particleBaseSize 0.08 /**< Az eső részecskék (~hó) átlagos mérete [m]. */
|
||||
#define particleSizeVariance 0.05 /**< Az eső részecskék (~hó) méretének átlagostól való eltérése [m]. */
|
||||
#define particleBaseVelocity 0.0025 /**< Az eső részecskék (~hó) átlagos sebessége [m/ms]. */
|
||||
#define particleVelocityVariance 0.0010 /**< Az eső részecskék (~hó) sebességének átlagostól való eltérése [m/ms]. */
|
||||
#define particleColor (colors) { (color) {220, 220, 220, 255}, (color){220, 220, 220, 255}, (color) {220, 220, 220, 255} } /**< A részecskék színe. */
|
||||
|
||||
int particleMultiplier; /**< Egy oszlopban hány részecske van? */
|
||||
particle** particleList = NULL; /**< 2D-s tömb a részecskéknek, x koord-ban rendezett, y-ban nem.*/
|
||||
|
||||
|
||||
///Mennyi részecske van egy négyzetméteren, ezt lehet itt beállítani.
|
||||
void setParticleMultiplier(int a, bool isMenu) {
|
||||
particleMultiplier = isMenu ? a : getMapSize().y * a / 100;
|
||||
}
|
||||
|
||||
///A makrókban beállított paraméterek alapján hoz létre egy részecskét, a pálya és a kamera közti z koorddal.
|
||||
particle createRandomParticle(int baseY, bool isYRand) {
|
||||
return (particle) {
|
||||
(vector2D) {isYRand ? rand() % (baseY-1) : baseY, (float) (rand() % (cameraDeltaZDistanceEnd - 1) + 1)},
|
||||
randomWithinBorders(particleBaseSize, particleSizeVariance),
|
||||
randomWithinBorders(particleBaseVelocity, particleVelocityVariance)
|
||||
};
|
||||
}
|
||||
|
||||
///Felszabadítja a részecskék tömbjét.
|
||||
void freeParticleList() {
|
||||
if(particleList != NULL) {
|
||||
free(particleList[0]);
|
||||
free(particleList);
|
||||
}
|
||||
}
|
||||
|
||||
///Csinál egy tömböt a részecskéknek és azt feltölti random részesckékkel.
|
||||
void createParticleList() {
|
||||
freeParticleList();
|
||||
|
||||
intVector2D mapSize = getMapSize();
|
||||
int x, i;
|
||||
particleList = (particle**) malloc(mapSize.x * sizeof(particle*));
|
||||
particleList[0] = (particle*) malloc(mapSize.x * particleMultiplier * sizeof(particle));
|
||||
|
||||
for(x = 0; x < mapSize.x; x++) {
|
||||
particleList[x] = particleList[0] + x * particleMultiplier;
|
||||
for(i = 0; i < particleMultiplier; i++)
|
||||
particleList[x][i] = createRandomParticle(mapSize.y, true);
|
||||
}
|
||||
}
|
||||
|
||||
///Egy adott részecske mozgását végzi el.
|
||||
void moveParticle(particle* particle, int delta) {
|
||||
///! x = y; y = z
|
||||
particle -> position.x -= particle -> velocity * delta;
|
||||
|
||||
if(particle -> position.x <= 0.0)
|
||||
*particle = createRandomParticle(getMapSize().y, false);
|
||||
|
||||
}
|
||||
|
||||
///Lerajzolja és mozgatja a részecskéket. Mindezt csak egy oszlopon belül.
|
||||
void drawParticles(int x, int minY, int maxY, int deltaTime) {
|
||||
if(0 <= x && x < getMapSize().x) {
|
||||
int i;
|
||||
for(i = 0; i < particleMultiplier; i++) {
|
||||
moveParticle(&particleList[x][i], deltaTime);
|
||||
|
||||
if(minY < particleList[x][i].position.x && particleList[x][i].position.x < maxY) {
|
||||
|
||||
bool sides[5] = {true, true, true, true, true};
|
||||
drawCuboid (
|
||||
(renderObject) {
|
||||
(vector3D) {x, particleList[x][i].position.x, particleList[x][i].position.y},
|
||||
(vector3D) {particleList[x][i].size, particleList[x][i].size, particleList[x][i].size / 2},
|
||||
particleColor, true
|
||||
},
|
||||
sides
|
||||
);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue