added money

This commit is contained in:
Alexandre 2025-01-11 22:10:26 +01:00
parent f3abc7266e
commit 639449b4ae
14 changed files with 67 additions and 14 deletions

BIN
bin/back

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -58,5 +58,18 @@ void update_entities(float dtime) {
// ------------------------------------------------------------------------------------------------------------------------------------------------ //
void speen(double x, double y, double z, double w, double h, double d, double hz_angle, double vt_angle, float dtime, cube_0* ret) {
ret->vt_angle += ((double)dtime)*3.0;
ret->vt_angle += ((double)dtime)*5.0;
}
void speen2(double x, double y, double z, double w, double h, double d, double hz_angle, double vt_angle, float dtime, cube_0* ret) {
ret->hz_angle += ((double)dtime)*5.0;
}
void detectHit(float dtime, int* hp, int* dmg, cube_0* ret) {
if(ret->red == 255) {
ret->red = 0;
ret->green = 192;
ret->blue = 0;
coins += 1;
}
}

View File

@ -9,4 +9,8 @@ void update_entities(float dtime);
void speen(double x, double y, double z, double w, double h, double d, double hz_angle, double vt_angle, float dtime, cube_0* ret);
void speen2(double x, double y, double z, double w, double h, double d, double hz_angle, double vt_angle, float dtime, cube_0* ret);
void detectHit(float dtime, int* hp, int* dmg, cube_0* ret);
#endif

View File

@ -27,6 +27,8 @@ entry* pool ;
int pool_size ;
int total_weight ;
int coins ;
void copy_room(room* src, room* dest, int chx, int chy) {
// considering dest has already been malloc'd
dest->chunk_x = chx ;
@ -64,7 +66,9 @@ void copy_room(room* src, room* dest, int chx, int chy) {
(*(src->ents[k].pos)).w, (*(src->ents[k].pos)).h, (*(src->ents[k].pos)).d,
(*(src->ents[k].pos)).hz_angle, (*(src->ents[k].pos)).vt_angle, (*(src->ents[k].pos)).red, (*(src->ents[k].pos)).green, (*(src->ents[k].pos)).blue
);
dest->ents[k].updatePos = *speen ;
dest->ents[k].updatePos = src->ents[k].updatePos;
dest->ents[k].onHit = src->ents[k].onHit;
dest->ents[k].onDeath = src->ents[k].onDeath;
}
dest->tps_size = src->tps_size;
}
@ -92,8 +96,15 @@ void build_starting_chunk(int chx, int chy) {
new->tps[2] = create_teleporter(5.0, 1.0, 2.0, 1.0, 2.0 + (double)(rand()%2), 1.0, 3.14159/4.0, 0.0, 0, 255, 0 , chx+1, chy , 2.5, 2.5, 2.5);
new->tps[3] = create_teleporter(2.0, 1.0, 5.0, 1.0, 2.0 + (double)(rand()%2), 1.0, 3.14159/4.0, 0.0, 0, 0, 255 , chx , chy+1, 2.5, 2.5, 2.5);
new->ents = malloc(sizeof(entity)*0);
new->ent_len = 0 ;
new->ents = malloc(sizeof(entity)*1);
new->ent_len = 1 ;
new->ents[0].pos = malloc(sizeof(cube_0));
*(new->ents[0].pos) = create_cube_0(-0.25, -2.25, -0.25, 0.5, 0.5, 0.5, 0.0, 0.0, 255, 128, 0);
new->ents[0].damage = 0 ;
new->ents[0].hitpoints = 900 ;
new->ents[0].onDeath = NULL ;
new->ents[0].onHit = *detectHit ;
new->ents[0].updatePos = *speen2 ;
hashtbl_add(visited, chx, chy, new);
}
@ -105,6 +116,7 @@ void init_hashtbl() {
player_chx = 0 ;
player_chy = 0 ;
total_weight = 0 ;
coins = 0 ;
}
void get_number_blocks(int* ret_cubes, int* ret_tps, int* ret_ent, FILE* ptr) {
@ -262,6 +274,8 @@ void parse_one_room(int id, char* filename) {
pool[id].area->ents[k].hitpoints = malloc(sizeof(int));
*(pool[id].area->ents[k].hitpoints) = hp ;
pool[id].area->ents[k].updatePos = *speen ;
pool[id].area->ents[k].onHit = *detectHit ;
pool[id].area->ents[k].onDeath = NULL ;
//printf("\n");
}

View File

@ -69,7 +69,8 @@ int main(int argc, char** argv) {
origin = clock();
SDL_SetRenderDrawColor(rend, 255, 255, 255, SDL_ALPHA_OPAQUE) ;
playerActions() ;
entend = clock();
playerActions(((float)entend - (float)entstart)/CLOCKS_PER_SEC) ;
generate_nearby_chunks(1);
entend = clock();
@ -83,6 +84,7 @@ int main(int argc, char** argv) {
delta = ((float)finish - (float)origin)/CLOCKS_PER_SEC;
drawNumberToRenderer(rend, digits, (int)(1.0f/delta), 720, 60, 75/2, 105/2, 0);
drawNumberToRenderer(rend, digits, (int)(10*sim_time), 720, 110, 75/2, 105/2, 0);
drawNumberToRenderer(rend, digits, coins, 1500/2-55, 1000 - 70, 75/3, 105/3, 0);
updateRenderer(rend) ;
sim_time += delta + intervalf ;
usleep(interval) ;

View File

@ -14,6 +14,7 @@
#include "hash.h"
#include "structure.h"
#include "base.h"
#include "entities.h"
#include "move.h"
// ---------------------------------------------------------------------------------------------------- //
@ -56,7 +57,7 @@ void set_player_coords(int old_chx, int old_chy) {
}
}
bool is_colliding() {
bool is_colliding(float dtime) {
for(int k = 0; k < current_room->map_size; k++) {
double dist = distance_pt_cube_0_3d(camx, camy, camz, current_room->map[k]) ;
if(dist <= min_dist) {
@ -75,10 +76,19 @@ bool is_colliding() {
return true ;
}
}
for(int k = 0; k < current_room->ent_len; k++) {
double dist = distance_pt_cube_0_3d(camx, camy, camz, *(current_room->ents[k].pos)) ;
if(dist <= min_dist) {
if(current_room->ents[k].onHit != NULL) {
(*current_room->ents[k].onHit)(dtime, current_room->ents[k].hitpoints, &current_room->ents[k].damage, &(*(current_room->ents[k].pos)));
}
return true ;
}
}
return false ;
}
void playerActions() {
void playerActions(float dtime) {
SDL_Event event;
while(SDL_PollEvent(&event)) {
switch (event.type) {
@ -107,7 +117,7 @@ void playerActions() {
camz += speed*cos(rot_hz)*cos(rot_vt)/10;
camx -= speed*sin(rot_hz)*cos(rot_vt)/10;
camy += speed*sin(rot_vt)/10;
if(is_colliding()) {
if(is_colliding(dtime)) {
camz -= speed*cos(rot_hz)*cos(rot_vt)/10;
camx += speed*sin(rot_hz)*cos(rot_vt)/10;
camy -= speed*sin(rot_vt)/10;
@ -119,7 +129,7 @@ void playerActions() {
for(int k = 0; k < 10; k++) {
camx -= speed*cos(rot_hz)/10;
camz -= speed*sin(rot_hz)/10;
if(is_colliding()) {
if(is_colliding(dtime)) {
camx += speed*cos(rot_hz)/10;
camz += speed*sin(rot_hz)/10;
k=11;
@ -131,7 +141,7 @@ void playerActions() {
camz -= speed*cos(rot_hz)*cos(rot_vt)/10;
camx += speed*sin(rot_hz)*cos(rot_vt)/10;
camy -= speed*sin(rot_vt)/10;
if(is_colliding()) {
if(is_colliding(dtime)) {
camz += speed*cos(rot_hz)*cos(rot_vt)/10;
camx -= speed*sin(rot_hz)*cos(rot_vt)/10;
camy += speed*sin(rot_vt)/10;
@ -143,7 +153,7 @@ void playerActions() {
for(int k = 0; k < 10; k++) {
camx += speed*cos(rot_hz)/10;
camz += speed*sin(rot_hz)/10;
if(is_colliding()) {
if(is_colliding(dtime)) {
camx -= speed*cos(rot_hz)/10;
camz -= speed*sin(rot_hz)/10;
k=11;

View File

@ -2,7 +2,7 @@
#define MOVE_H
void init_csts();
bool is_colliding();
void playerActions();
bool is_colliding(float dtime);
void playerActions(float dtime);
#endif

View File

@ -31,7 +31,15 @@ typedef struct teleporter {
typedef struct entity {
cube_0* pos ;
void (*updatePos)(double x, double y, double z, double w, double h, double d, double hz_angle, double vt_angle, float dtime, cube_0* ret) ; // act as velocity function
void (*updatePos)(double x, double y, double z, double w, double h, double d, double hz_angle, double vt_angle, float dtime, cube_0* ret) ;
// act as velocity function
void (*onHit)(float dtime, int* hp, int* dmg, cube_0* ret) ;
// triggers when object is hit
void (*onDeath)(float dtime) ;
// triggers when <hitpoints> goes negative
int damage ;
int* hitpoints ;
} entity ;
@ -94,4 +102,6 @@ extern int player_chy ;
extern int* drawOrder ;
extern int coins;
#endif