fixed rendering bug where players would be placed in the wrong chunk

This commit is contained in:
Alexandre 2025-05-15 14:23:06 +02:00
parent 281d243827
commit 245c6a44e4
12 changed files with 21 additions and 20 deletions

BIN
bin/back

Binary file not shown.

View File

@ -1,9 +1,10 @@
5 6 5 5
S..... ..S..
031E.. ..214
024... ...35
215... .E15.
...... .....
$ $
. = NULL . = NULL

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -32,8 +32,8 @@ car* init_car(int nPl, int nTotPl) {
res->nCoins = 0; res->nCoins = 0;
res->pos = get_position(nPl, nTotPl); res->pos = get_position(nPl, nTotPl);
res->lastPos = (ptf){.fx = res->pos.fx, .fy = res->pos.fy}; res->lastPos = (ptf){.fx = res->pos.fx, .fy = res->pos.fy};
res->chx = START_CHX; res->chx = START_CHY;
res->chy = START_CHY; res->chy = START_CHX;
//res->vel = (ptf){.fx = 0.0, .fy = 0.0}; //res->vel = (ptf){.fx = 0.0, .fy = 0.0};
double theta = (2.0*MAX_THETA_SPAWN*nPl/((nTotPl-1==0)?(1):(nTotPl-1)) - 1.0*MAX_THETA_SPAWN); double theta = (2.0*MAX_THETA_SPAWN*nPl/((nTotPl-1==0)?(1):(nTotPl-1)) - 1.0*MAX_THETA_SPAWN);
res->vel = (ptf){.fx = (rand()%100-50.0)/100.0*2.0*MAX_SPEED, .fy = (rand()%100-50.0)/100.0*2.0*MAX_SPEED}; res->vel = (ptf){.fx = (rand()%100-50.0)/100.0*2.0*MAX_SPEED, .fy = (rand()%100-50.0)/100.0*2.0*MAX_SPEED};

View File

@ -134,11 +134,11 @@ void bumpOtherCars(int nPl) {
double speed_P = norm(players[p].c->vel); double speed_P = norm(players[p].c->vel);
double speed_N = norm(players[nPl].c->vel); double speed_N = norm(players[nPl].c->vel);
players[p].c->vel.fx = director.fx*RESTITUTION_PLAYER*(speed_P - speed_P/2.0 + speed_N/2.0); players[p].c->vel.fx = director.fx*RESTITUTION_PLAYER*(speed_N);
players[p].c->vel.fy = director.fy*RESTITUTION_PLAYER*(speed_P - speed_P/2.0 + speed_N/2.0); players[p].c->vel.fy = director.fy*RESTITUTION_PLAYER*(speed_N);
players[nPl].c->vel.fx = -director.fx*RESTITUTION_PLAYER*(speed_N + speed_P/2.0 - speed_N/2.0); players[nPl].c->vel.fx = -director.fx*RESTITUTION_PLAYER*(speed_P);
players[nPl].c->vel.fy = -director.fy*RESTITUTION_PLAYER*(speed_N + speed_P/2.0 - speed_N/2.0); players[nPl].c->vel.fy = -director.fy*RESTITUTION_PLAYER*(speed_P);
} }
} }
} }

View File

@ -504,10 +504,10 @@ void renderCircles(SDL_Renderer* renderer, level* lvl, int cx, int cy, int range
void renderPlayers(SDL_Renderer* renderer, int cx, int cy, int range, int rsize) { void renderPlayers(SDL_Renderer* renderer, int cx, int cy, int range, int rsize) {
for(int p = 0; p < nPlayers; p++) { for(int p = 0; p < nPlayers; p++) {
if(players[p].c->chx >= cx-range && players[p].c->chx <= cx+range && players[p].c->chy >= cy-range && players[p].c->chy <= cy+range) { if(players[p].c->chx >= cx-range && players[p].c->chx <= cx+range && players[p].c->chy >= cy-range && players[p].c->chy <= cy+range) {
int plchx = players[p].c->chx; int cox = (WIDTH-rsize)/2+rsize*(players[p].c->chx-cy) + (int)((players[p].c->pos.fx*1.0)/ROOM_SIZE*rsize);
int plchy = players[p].c->chy; int coy = (HEIGHT-rsize)/2+rsize*(players[p].c->chy-cx) + (int)((players[p].c->pos.fy*1.0)/ROOM_SIZE*rsize);
int cox = (WIDTH-rsize)/2+rsize*(plchx-cx) + (int)((players[p].c->pos.fx*1.0)/ROOM_SIZE*rsize); //printf("Abs : (%d %d)\n", players[p].c->chx, players[p].c->chy);
int coy = (HEIGHT-rsize)/2+rsize*(plchy-cy) + (int)((players[p].c->pos.fy*1.0)/ROOM_SIZE*rsize); //printf("Relative : (%d : %d)\n", players[p].c->chx-cy, players[p].c->chy-cx);
SDL_RenderFillCircle(renderer, cox, coy, PLAYER_R, players[p].rgb.red, players[p].rgb.green, players[p].rgb.blue, 255); SDL_RenderFillCircle(renderer, cox, coy, PLAYER_R, players[p].rgb.red, players[p].rgb.green, players[p].rgb.blue, 255);
} else { } else {
// //

View File

@ -18,7 +18,7 @@
#include "rooms.h" #include "rooms.h"
#include "cars.h" #include "cars.h"
const int N_PLAYERS = 6; const int N_PLAYERS = 4;
double elapsed = 0.0; double elapsed = 0.0;
bool halt = false; bool halt = false;
@ -77,7 +77,7 @@ int main() {
while(!halt) { while(!halt) {
resetRenderer(rend); resetRenderer(rend);
renderMap(rend, test, 1, 1, 2, 250); renderMap(rend, test, 1, 2, 2, 250);
if(elapsed <= 0.7) { if(elapsed <= 0.7) {
placeRectToRenderer(rend, 0, 0, 50, 50, 255, 255, 32, 192); placeRectToRenderer(rend, 0, 0, 50, 50, 255, 255, 32, 192);
} else if(updateCars(test)) { } else if(updateCars(test)) {

View File

@ -15,12 +15,12 @@ const double RESTITUTION_WALL = 0.8;
const double RESTITUTION_PLAYER = 0.8; const double RESTITUTION_PLAYER = 0.8;
const int PLAYER_R = 10; const int PLAYER_R = 10;
const int MAX_THETA_SPAWN = 60; // degrees const int MAX_THETA_SPAWN = 80; // degrees
const int BARRIERS = 1; const int BARRIERS = 1;
const double BARRIER_WIDTH = 0.05; const double BARRIER_WIDTH = 0.05;
const double FRICTION = 0.75; const double FRICTION = 0.75;
const double DV = 1.0; // m/s const double DV = 1.5; // m/s
const double DT = 1.0/100.0; const double DT = 1.0/100.0;
const double EPSILON = 1.0/4096.0; const double EPSILON = 1.0/4096.0;