From 68e7e8a48161b5e5e93bcafac3c54880217f2708 Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Thu, 25 Mar 2021 07:40:44 -0400 Subject: ball: New functions --- (limited to 'src') diff --git a/src/ball.c b/src/ball.c new file mode 100644 index 0000000..8a00d7d --- /dev/null +++ b/src/ball.c @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2021 P. J. McDermott + * + * This file is part of Dodge Balls + * + * Dodge Balls is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Dodge Balls is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Dodge Balls. If not, see . + */ + +#include +#include "ball.h" +#include "collision.h" +#include "output.h" + +struct db_ball { + int x; + int y; + int r; + int a; + int s; + struct db_ball *next; +}; + +struct db_ball * +db_ball_new(int x, int y, int r, int a, int s, struct db_ball *prev) +{ + struct db_ball *ball; + + ball = calloc(1, sizeof(*ball)); + if (ball == NULL) { + db_err("Failed to allocate memory"); + return NULL; + } + + ball->x = x; + ball->y = y; + ball->r = r; + ball->a = a; + ball->s = s; + + if (prev != NULL) { + prev->next = ball; + } + + return ball; +} + +static void +_db_ball_collisions(struct db_ball *this) +{ + struct db_ball *that; + int col_x; + int col_y; + + for (that = this->next; that != NULL; that = that->next) { + if (db_col_pt_cir_cir(this->x, this->y, this->r, + that->x, that->y, that->r, + &col_x, &col_y)) { + /* TODO: Reverse direction */ + } + } +} + +void +db_balls_collisions(struct db_ball *ball_head) +{ + struct db_ball *ball; + + for (ball = ball_head; ball != NULL; ball = ball->next) { + _db_ball_collisions(ball); + } +} + +int +db_balls_player_collisions(struct db_ball *ball_head, + int player_x, int player_y, int player_r) +{ + struct db_ball *ball; + + for (ball = ball_head; ball != NULL; ball = ball->next) { + if (db_col_cir_cir(ball->x, ball->y, ball->r, + player_x, player_y, player_r)) { + return 1; + } + } + return 0; +} diff --git a/src/ball.h b/src/ball.h new file mode 100644 index 0000000..045cb22 --- /dev/null +++ b/src/ball.h @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2021 P. J. McDermott + * + * This file is part of Dodge Balls + * + * Dodge Balls is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Dodge Balls is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Dodge Balls. If not, see . + */ + +#ifndef DB_BALL_H_ +#define DB_BALL_H_ + +struct db_ball; + +struct db_ball *db_ball_new(int x, int y, int r, int a, int s, + struct db_ball *prev); +void db_balls_collisions(struct db_ball *ball_head); +int db_balls_player_collisions(struct db_ball *ball_head, + int player_x, int player_y, int player_r) + __attribute__((__pure__)); + +#endif /* DB_BALL_H_ */ diff --git a/src/local.mk b/src/local.mk index c0c83dd..19a90c6 100644 --- a/src/local.mk +++ b/src/local.mk @@ -1,4 +1,6 @@ dodge_balls_SOURCES += \ + %reldir%/ball.c \ + %reldir%/ball.h \ %reldir%/base64.c \ %reldir%/base64.h \ %reldir%/collision.c \ -- cgit v0.9.1