summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorP. J. McDermott <pj@pehjota.net>2021-03-25 07:40:44 (EDT)
committer P. J. McDermott <pj@pehjota.net>2021-03-25 08:57:39 (EDT)
commit68e7e8a48161b5e5e93bcafac3c54880217f2708 (patch)
tree875c774772a5e572e9f37d06c6d4f45bd4d95d94
parent379ec224fbe7259cc67dbf7842c293f92e3bac9a (diff)
downloaddodge-balls-68e7e8a48161b5e5e93bcafac3c54880217f2708.zip
dodge-balls-68e7e8a48161b5e5e93bcafac3c54880217f2708.tar.gz
dodge-balls-68e7e8a48161b5e5e93bcafac3c54880217f2708.tar.bz2
ball: New functions
-rw-r--r--src/ball.c97
-rw-r--r--src/ball.h32
-rw-r--r--src/local.mk2
3 files changed, 131 insertions, 0 deletions
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 <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdlib.h>
+#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 <http://www.gnu.org/licenses/>.
+ */
+
+#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 \