Jay Balar / Mbed 2 deprecated 4180_Project_3

Dependencies:   4DGL-uLCD-SE Physac-MBED PinDetect SDFileSystem mbed-rtos mbed

Committer:
jstephens78
Date:
Wed Nov 30 21:20:21 2022 +0000
Revision:
12:5d913b57da7c
Parent:
9:4e6fae5f9b23
Child:
16:6cf744b2623a
Hockey game implemented, mostly

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jstephens78 9:4e6fae5f9b23 1 #include "hockey.h"
jstephens78 12:5d913b57da7c 2 #include "globals.h"
jstephens78 9:4e6fae5f9b23 3
jstephens78 9:4e6fae5f9b23 4 #define PHYSAC_NO_THREADS
jstephens78 9:4e6fae5f9b23 5 #define PHYSAC_STANDALONE
jstephens78 9:4e6fae5f9b23 6 #define PHYSAC_IMPLEMENTATION
jstephens78 9:4e6fae5f9b23 7 #define _STDBOOL_H
jstephens78 9:4e6fae5f9b23 8 #include "physac.h"
jstephens78 9:4e6fae5f9b23 9
jstephens78 12:5d913b57da7c 10 #define SCREEN_WIDTH 128
jstephens78 12:5d913b57da7c 11 #define SCREEN_HEIGHT 128
jstephens78 12:5d913b57da7c 12
jstephens78 12:5d913b57da7c 13 // Controls size of gamepieces in the hockey arena. This influences both
jstephens78 12:5d913b57da7c 14 // rendering and collision, so be careful adjusting dimensions too small
jstephens78 12:5d913b57da7c 15 #define HOCKEY_PUCK_RADIUS 4
jstephens78 12:5d913b57da7c 16 #define HOCKEY_PADDLE_W 8
jstephens78 12:5d913b57da7c 17 #define HOCKEY_PADDLE_H 24
jstephens78 9:4e6fae5f9b23 18
jstephens78 12:5d913b57da7c 19 // Controls the dimensions of the arena. You can adjust the screen margin above
jstephens78 12:5d913b57da7c 20 // and below the court, and the width of the goal.
jstephens78 12:5d913b57da7c 21 #define HOCKEY_ARENA_TOP 16
jstephens78 12:5d913b57da7c 22 #define HOCKEY_ARENA_BOT 127
jstephens78 12:5d913b57da7c 23 #define HOCKEY_GOAL_HEIGHT 32
jstephens78 12:5d913b57da7c 24
jstephens78 12:5d913b57da7c 25 // Properties derived from other macros
jstephens78 12:5d913b57da7c 26 #define _HOCKEY_ARENA_H (HOCKEY_ARENA_BOT - HOCKEY_ARENA_TOP)
jstephens78 12:5d913b57da7c 27 #define _HOCKEY_GOAL_TOP ((_HOCKEY_ARENA_H - HOCKEY_GOAL_HEIGHT)/2 + HOCKEY_ARENA_TOP)
jstephens78 12:5d913b57da7c 28 #define _HOCKEY_GOAL_BOT (_HOCKEY_GOAL_TOP + HOCKEY_GOAL_HEIGHT)
jstephens78 9:4e6fae5f9b23 29
jstephens78 12:5d913b57da7c 30 int blue_score = 0;
jstephens78 12:5d913b57da7c 31 int red_score = 0;
jstephens78 12:5d913b57da7c 32
jstephens78 12:5d913b57da7c 33 PhysicsBody puck;
jstephens78 12:5d913b57da7c 34 PhysicsBody paddle_a;
jstephens78 12:5d913b57da7c 35 PhysicsBody paddle_b;
jstephens78 12:5d913b57da7c 36
jstephens78 12:5d913b57da7c 37 float input_sensitivity = 0.01f;
jstephens78 9:4e6fae5f9b23 38
jstephens78 12:5d913b57da7c 39 int maxOf(int a, int b)
jstephens78 12:5d913b57da7c 40 {
jstephens78 12:5d913b57da7c 41 return (a > b) ? a : b;
jstephens78 12:5d913b57da7c 42 }
jstephens78 12:5d913b57da7c 43
jstephens78 12:5d913b57da7c 44 int minOf(int a, int b)
jstephens78 12:5d913b57da7c 45 {
jstephens78 12:5d913b57da7c 46 return (a < b) ? a : b;
jstephens78 12:5d913b57da7c 47 }
jstephens78 12:5d913b57da7c 48
jstephens78 12:5d913b57da7c 49 void initPhysicsObjects()
jstephens78 12:5d913b57da7c 50 {
jstephens78 12:5d913b57da7c 51 puck = CreatePhysicsBodyCircle((Vector2) {
jstephens78 12:5d913b57da7c 52 SCREEN_WIDTH/2, SCREEN_HEIGHT/2
jstephens78 12:5d913b57da7c 53 }, HOCKEY_PUCK_RADIUS, 1);
jstephens78 9:4e6fae5f9b23 54 puck->enabled = true;
jstephens78 9:4e6fae5f9b23 55 puck->useGravity = false;
jstephens78 9:4e6fae5f9b23 56 puck->restitution = 1.0;
jstephens78 12:5d913b57da7c 57 puck->dynamicFriction = 0.0;
jstephens78 9:4e6fae5f9b23 58 puck->velocity = (Vector2) {
jstephens78 9:4e6fae5f9b23 59 5, 0
jstephens78 9:4e6fae5f9b23 60 };
jstephens78 9:4e6fae5f9b23 61
jstephens78 12:5d913b57da7c 62 paddle_a = CreatePhysicsBodyRectangle((Vector2) {
jstephens78 9:4e6fae5f9b23 63 32, 64
jstephens78 12:5d913b57da7c 64 }, HOCKEY_PADDLE_W, HOCKEY_PADDLE_H, 100);
jstephens78 9:4e6fae5f9b23 65 paddle_a->enabled = false; // Disable body state to convert it to static (no dynamics, but collisions)
jstephens78 9:4e6fae5f9b23 66 paddle_a->useGravity = false;
jstephens78 9:4e6fae5f9b23 67 paddle_a->restitution = 1.0;
jstephens78 9:4e6fae5f9b23 68 SetPhysicsBodyRotation(paddle_a, 3.14159 / 6);
jstephens78 9:4e6fae5f9b23 69
jstephens78 12:5d913b57da7c 70 paddle_b = CreatePhysicsBodyRectangle((Vector2) {
jstephens78 9:4e6fae5f9b23 71 96, 64
jstephens78 12:5d913b57da7c 72 }, HOCKEY_PADDLE_W, HOCKEY_PADDLE_H, 100);
jstephens78 9:4e6fae5f9b23 73 paddle_b->enabled = false; // Disable body state to convert it to static (no dynamics, but collisions)
jstephens78 9:4e6fae5f9b23 74 paddle_b->useGravity = false;
jstephens78 9:4e6fae5f9b23 75 paddle_b->restitution = 1.0;
jstephens78 9:4e6fae5f9b23 76 SetPhysicsBodyRotation(paddle_b, 3.14159 / 6);
jstephens78 12:5d913b57da7c 77 }
jstephens78 9:4e6fae5f9b23 78
jstephens78 12:5d913b57da7c 79 /**
jstephens78 12:5d913b57da7c 80 * Draws the fixed graphics of the game. This is the border of the arena
jstephens78 12:5d913b57da7c 81 */
jstephens78 12:5d913b57da7c 82 void drawStaticEnvironment()
jstephens78 12:5d913b57da7c 83 {
jstephens78 12:5d913b57da7c 84 uLCD.line(0, _HOCKEY_GOAL_TOP, 0, HOCKEY_ARENA_TOP, BLUE);
jstephens78 12:5d913b57da7c 85 uLCD.line(0, _HOCKEY_GOAL_BOT, 0, HOCKEY_ARENA_BOT, BLUE);
jstephens78 12:5d913b57da7c 86 uLCD.line(0, HOCKEY_ARENA_TOP, 63, HOCKEY_ARENA_TOP, BLUE);
jstephens78 12:5d913b57da7c 87 uLCD.line(0, HOCKEY_ARENA_BOT, 63, HOCKEY_ARENA_BOT, BLUE);
jstephens78 9:4e6fae5f9b23 88
jstephens78 12:5d913b57da7c 89 uLCD.line(127, _HOCKEY_GOAL_TOP, 127, HOCKEY_ARENA_TOP, RED);
jstephens78 12:5d913b57da7c 90 uLCD.line(127, _HOCKEY_GOAL_BOT, 127, HOCKEY_ARENA_BOT, RED);
jstephens78 12:5d913b57da7c 91 uLCD.line(64, HOCKEY_ARENA_TOP, 127, HOCKEY_ARENA_TOP, RED);
jstephens78 12:5d913b57da7c 92 uLCD.line(64, HOCKEY_ARENA_BOT, 127, HOCKEY_ARENA_BOT, RED);
jstephens78 12:5d913b57da7c 93 }
jstephens78 12:5d913b57da7c 94
jstephens78 12:5d913b57da7c 95 /**
jstephens78 12:5d913b57da7c 96 * Redraws the puck and paddles
jstephens78 12:5d913b57da7c 97 * Each elements is erased, updated, and redrawn in as short of a window as
jstephens78 12:5d913b57da7c 98 * possible.
jstephens78 12:5d913b57da7c 99 */
jstephens78 12:5d913b57da7c 100 void drawDynamicObjects()
jstephens78 12:5d913b57da7c 101 {
jstephens78 12:5d913b57da7c 102 static int puck_x = SCREEN_WIDTH / 2,
jstephens78 12:5d913b57da7c 103 puck_y = SCREEN_WIDTH / 2;
jstephens78 12:5d913b57da7c 104
jstephens78 12:5d913b57da7c 105 // Redraw puck if moved
jstephens78 12:5d913b57da7c 106 if (puck_x != puck->position.x || puck_y != puck->position.y) {
jstephens78 12:5d913b57da7c 107 // erase
jstephens78 12:5d913b57da7c 108 uLCD.filled_circle(puck_x, puck_y, HOCKEY_PUCK_RADIUS, BLACK);
jstephens78 9:4e6fae5f9b23 109
jstephens78 12:5d913b57da7c 110 // update
jstephens78 12:5d913b57da7c 111 puck_x = puck->position.x;
jstephens78 12:5d913b57da7c 112 puck_y = puck->position.y;
jstephens78 12:5d913b57da7c 113
jstephens78 12:5d913b57da7c 114 // redraw
jstephens78 12:5d913b57da7c 115 uLCD.filled_circle(puck_x, puck_y, HOCKEY_PUCK_RADIUS, GREEN);
jstephens78 12:5d913b57da7c 116 }
jstephens78 12:5d913b57da7c 117
jstephens78 12:5d913b57da7c 118 // Redraw blue paddle
jstephens78 12:5d913b57da7c 119 static int pa_x1 = 64,
jstephens78 12:5d913b57da7c 120 pa_x2 = 64,
jstephens78 12:5d913b57da7c 121 pa_y1 = 64,
jstephens78 12:5d913b57da7c 122 pa_y2 = 64;
jstephens78 9:4e6fae5f9b23 123
jstephens78 12:5d913b57da7c 124 float sinA = sin(-paddle_a->orient) / 2;
jstephens78 12:5d913b57da7c 125 float cosA = cos(-paddle_a->orient) / 2;
jstephens78 12:5d913b57da7c 126 uLCD.line(pa_x1, pa_y1, pa_x2, pa_y2, BLACK);
jstephens78 12:5d913b57da7c 127 pa_x1 = paddle_a->position.x + HOCKEY_PADDLE_H * sinA;
jstephens78 12:5d913b57da7c 128 pa_x2 = paddle_a->position.x - HOCKEY_PADDLE_H * sinA;
jstephens78 12:5d913b57da7c 129 pa_y1 = paddle_a->position.y + HOCKEY_PADDLE_H * cosA;
jstephens78 12:5d913b57da7c 130 pa_y2 = paddle_a->position.y - HOCKEY_PADDLE_H * cosA;
jstephens78 12:5d913b57da7c 131 uLCD.line(pa_x1, pa_y1, pa_x2, pa_y2, BLUE);
jstephens78 12:5d913b57da7c 132
jstephens78 12:5d913b57da7c 133 // Redraw red paddle
jstephens78 12:5d913b57da7c 134 static int pb_x1 = 64,
jstephens78 12:5d913b57da7c 135 pb_x2 = 64,
jstephens78 12:5d913b57da7c 136 pb_y1 = 64,
jstephens78 12:5d913b57da7c 137 pb_y2 = 64;
jstephens78 12:5d913b57da7c 138 float sinB = sin(-paddle_b->orient) / 2;
jstephens78 12:5d913b57da7c 139 float cosB = cos(-paddle_b->orient) / 2;
jstephens78 12:5d913b57da7c 140 uLCD.line(pb_x1, pb_y1, pb_x2, pb_y2, BLACK);
jstephens78 12:5d913b57da7c 141 pb_x1 = paddle_b->position.x + HOCKEY_PADDLE_H * sinB;
jstephens78 12:5d913b57da7c 142 pb_x2 = paddle_b->position.x - HOCKEY_PADDLE_H * sinB;
jstephens78 12:5d913b57da7c 143 pb_y1 = paddle_b->position.y + HOCKEY_PADDLE_H * cosB;
jstephens78 12:5d913b57da7c 144 pb_y2 = paddle_b->position.y - HOCKEY_PADDLE_H * cosB;
jstephens78 12:5d913b57da7c 145 uLCD.line(pb_x1, pb_y1, pb_x2, pb_y2, RED);
jstephens78 12:5d913b57da7c 146 }
jstephens78 9:4e6fae5f9b23 147
jstephens78 9:4e6fae5f9b23 148
jstephens78 12:5d913b57da7c 149 void resetGame()
jstephens78 12:5d913b57da7c 150 {
jstephens78 12:5d913b57da7c 151 if (red_score >= 5 || blue_score >= 5) {
jstephens78 12:5d913b57da7c 152 uLCD.cls();
jstephens78 12:5d913b57da7c 153 uLCD.printf("Game Over");
jstephens78 12:5d913b57da7c 154
jstephens78 12:5d913b57da7c 155 if (red_score > blue_score) {
jstephens78 12:5d913b57da7c 156 uLCD.printf("Red Wins");
jstephens78 12:5d913b57da7c 157 } else {
jstephens78 12:5d913b57da7c 158 uLCD.printf("Blue Wins");
jstephens78 9:4e6fae5f9b23 159 }
jstephens78 9:4e6fae5f9b23 160
jstephens78 12:5d913b57da7c 161 Thread::wait(2000);
jstephens78 12:5d913b57da7c 162
jstephens78 12:5d913b57da7c 163 game2 = false;
jstephens78 12:5d913b57da7c 164 } else {
jstephens78 12:5d913b57da7c 165 uLCD.cls();
jstephens78 12:5d913b57da7c 166 drawStaticEnvironment();
jstephens78 9:4e6fae5f9b23 167
jstephens78 12:5d913b57da7c 168 puck->position.x = SCREEN_WIDTH/2;
jstephens78 12:5d913b57da7c 169 puck->position.y = SCREEN_HEIGHT/2;
jstephens78 12:5d913b57da7c 170 paddle_a->position.x = 32;
jstephens78 12:5d913b57da7c 171 paddle_a->position.y = 64;
jstephens78 12:5d913b57da7c 172 SetPhysicsBodyRotation(paddle_a, 0);
jstephens78 12:5d913b57da7c 173
jstephens78 12:5d913b57da7c 174 paddle_b->position.x = 96;
jstephens78 12:5d913b57da7c 175 paddle_b->position.y = 64;
jstephens78 12:5d913b57da7c 176 SetPhysicsBodyRotation(paddle_b, 0);
jstephens78 12:5d913b57da7c 177 }
jstephens78 12:5d913b57da7c 178 }
jstephens78 12:5d913b57da7c 179
jstephens78 9:4e6fae5f9b23 180
jstephens78 9:4e6fae5f9b23 181
jstephens78 12:5d913b57da7c 182 /**
jstephens78 12:5d913b57da7c 183 *
jstephens78 12:5d913b57da7c 184 */
jstephens78 12:5d913b57da7c 185 void runGameLogic()
jstephens78 12:5d913b57da7c 186 {
jstephens78 12:5d913b57da7c 187 // If puck hits the ceiling or floor, reflect across the y component of
jstephens78 12:5d913b57da7c 188 // the velocity
jstephens78 12:5d913b57da7c 189 if (puck->position.y < HOCKEY_ARENA_TOP + HOCKEY_PUCK_RADIUS + 1) {
jstephens78 12:5d913b57da7c 190 puck->velocity.y *= -1;
jstephens78 12:5d913b57da7c 191 puck->position.y = maxOf(
jstephens78 12:5d913b57da7c 192 puck->position.y,
jstephens78 12:5d913b57da7c 193 HOCKEY_ARENA_TOP + HOCKEY_PUCK_RADIUS + 1);
jstephens78 12:5d913b57da7c 194 } else if (puck->position.y > HOCKEY_ARENA_BOT - HOCKEY_PUCK_RADIUS - 1) {
jstephens78 12:5d913b57da7c 195 puck->velocity.y *= -1;
jstephens78 12:5d913b57da7c 196 puck->position.y = minOf(
jstephens78 12:5d913b57da7c 197 puck->position.y,
jstephens78 12:5d913b57da7c 198 HOCKEY_ARENA_BOT - HOCKEY_PUCK_RADIUS - 1);
jstephens78 12:5d913b57da7c 199 }
jstephens78 12:5d913b57da7c 200
jstephens78 12:5d913b57da7c 201 // true if the puck is in the y range corresponding to the goal
jstephens78 12:5d913b57da7c 202 bool puckInGoalRange =
jstephens78 12:5d913b57da7c 203 puck->position.y > _HOCKEY_GOAL_TOP &&
jstephens78 12:5d913b57da7c 204 puck->position.y < _HOCKEY_GOAL_BOT;
jstephens78 12:5d913b57da7c 205
jstephens78 12:5d913b57da7c 206 // Puck collides with left or right walls
jstephens78 12:5d913b57da7c 207 if (puckInGoalRange == false) {
jstephens78 12:5d913b57da7c 208 if (puck->position.x < HOCKEY_PUCK_RADIUS + 1) {
jstephens78 12:5d913b57da7c 209 puck->velocity.x *= -1;
jstephens78 12:5d913b57da7c 210 puck->position.x = maxOf(
jstephens78 12:5d913b57da7c 211 puck->position.x,
jstephens78 12:5d913b57da7c 212 HOCKEY_PUCK_RADIUS + 1);
jstephens78 12:5d913b57da7c 213 } else if (puck->position.x > SCREEN_WIDTH - HOCKEY_PUCK_RADIUS - 1) {
jstephens78 12:5d913b57da7c 214 puck->velocity.x *= -1;
jstephens78 12:5d913b57da7c 215 puck->position.x = minOf(
jstephens78 12:5d913b57da7c 216 puck->position.x,
jstephens78 12:5d913b57da7c 217 SCREEN_WIDTH - HOCKEY_PUCK_RADIUS - 2);
jstephens78 9:4e6fae5f9b23 218 }
jstephens78 12:5d913b57da7c 219 }
jstephens78 12:5d913b57da7c 220
jstephens78 12:5d913b57da7c 221 // Puck in goals
jstephens78 12:5d913b57da7c 222 else {
jstephens78 12:5d913b57da7c 223 // SCORE RED
jstephens78 12:5d913b57da7c 224 if (puck->position.x < -HOCKEY_PUCK_RADIUS * 2) {
jstephens78 12:5d913b57da7c 225 red_score += 1;
jstephens78 12:5d913b57da7c 226 uLCD.printf("Red Scores");
jstephens78 12:5d913b57da7c 227 uLCD.printf(" %i - %i", blue_score, red_score);
jstephens78 12:5d913b57da7c 228 Thread::wait(2000);
jstephens78 12:5d913b57da7c 229 resetGame();
jstephens78 12:5d913b57da7c 230 }
jstephens78 12:5d913b57da7c 231
jstephens78 12:5d913b57da7c 232 // SCORE BLUE
jstephens78 12:5d913b57da7c 233 else if (puck->position.x > SCREEN_WIDTH + HOCKEY_PUCK_RADIUS*2) {
jstephens78 12:5d913b57da7c 234 blue_score += 1;
jstephens78 12:5d913b57da7c 235 uLCD.printf("Blue Scores");
jstephens78 12:5d913b57da7c 236 uLCD.printf(" %i - %i", blue_score, red_score);
jstephens78 12:5d913b57da7c 237 Thread::wait(2000);
jstephens78 12:5d913b57da7c 238 resetGame();
jstephens78 12:5d913b57da7c 239 }
jstephens78 12:5d913b57da7c 240 }
jstephens78 12:5d913b57da7c 241 }
jstephens78 12:5d913b57da7c 242
jstephens78 12:5d913b57da7c 243 void hockeyGame(void)
jstephens78 12:5d913b57da7c 244 {
jstephens78 12:5d913b57da7c 245 printf("Entering thread 2\r\n");
jstephens78 12:5d913b57da7c 246 while (true) {
jstephens78 12:5d913b57da7c 247
jstephens78 12:5d913b57da7c 248 while (game2 == false) {
jstephens78 12:5d913b57da7c 249 printf("Waiting thread 2\r\n");
jstephens78 12:5d913b57da7c 250 Thread::wait(500);
jstephens78 9:4e6fae5f9b23 251 }
jstephens78 9:4e6fae5f9b23 252
jstephens78 12:5d913b57da7c 253 printf("Starting Game 2 - Air Hockey\r\n");
jstephens78 12:5d913b57da7c 254
jstephens78 12:5d913b57da7c 255 // Reset game variables
jstephens78 12:5d913b57da7c 256 red_score = 0;
jstephens78 12:5d913b57da7c 257 blue_score = 0;
jstephens78 9:4e6fae5f9b23 258
jstephens78 12:5d913b57da7c 259 // Reset screen, draw arena
jstephens78 12:5d913b57da7c 260 uLCD.baudrate(BAUD_3000000);
jstephens78 12:5d913b57da7c 261 uLCD.cls();
jstephens78 12:5d913b57da7c 262 drawStaticEnvironment();
jstephens78 12:5d913b57da7c 263
jstephens78 12:5d913b57da7c 264 // Set up Physac objects & simulation
jstephens78 12:5d913b57da7c 265 initPhysicsObjects();
jstephens78 9:4e6fae5f9b23 266
jstephens78 12:5d913b57da7c 267 Timer timer;
jstephens78 12:5d913b57da7c 268 timer.start();
jstephens78 12:5d913b57da7c 269
jstephens78 12:5d913b57da7c 270 deltaTime = 1.66;
jstephens78 12:5d913b57da7c 271
jstephens78 12:5d913b57da7c 272 while (game2) {
jstephens78 12:5d913b57da7c 273 float dt = timer.read() * 1000;
jstephens78 12:5d913b57da7c 274 timer.reset();
jstephens78 9:4e6fae5f9b23 275
jstephens78 12:5d913b57da7c 276 // Update the physics of the game
jstephens78 12:5d913b57da7c 277 accumulator += dt;
jstephens78 12:5d913b57da7c 278 if (accumulator >= deltaTime) {
jstephens78 12:5d913b57da7c 279 PhysicsStep();
jstephens78 12:5d913b57da7c 280 accumulator -= deltaTime;
jstephens78 12:5d913b57da7c 281
jstephens78 12:5d913b57da7c 282 runGameLogic();
jstephens78 12:5d913b57da7c 283 }
jstephens78 12:5d913b57da7c 284 float phys_time = timer.read() * 1000;
jstephens78 9:4e6fae5f9b23 285
jstephens78 12:5d913b57da7c 286 // Render the game
jstephens78 12:5d913b57da7c 287 drawDynamicObjects();
jstephens78 12:5d913b57da7c 288 float render_time = timer.read()*1000 - phys_time;
jstephens78 9:4e6fae5f9b23 289
jstephens78 12:5d913b57da7c 290 // Process input from the game
jstephens78 12:5d913b57da7c 291 blue.parseMessage();
jstephens78 12:5d913b57da7c 292 if (blue.button[BUTTON_UP]) {
jstephens78 12:5d913b57da7c 293 paddle_a->position.y -= dt * input_sensitivity;
jstephens78 12:5d913b57da7c 294 printf("UP\r\n");
jstephens78 12:5d913b57da7c 295 }
jstephens78 12:5d913b57da7c 296 if (blue.button[BUTTON_DOWN]) {
jstephens78 12:5d913b57da7c 297 paddle_a->position.y += dt * input_sensitivity;
jstephens78 12:5d913b57da7c 298 printf("DOWN\r\n");
jstephens78 12:5d913b57da7c 299 }
jstephens78 12:5d913b57da7c 300 if (blue.button[BUTTON_LEFT]) {
jstephens78 12:5d913b57da7c 301 paddle_a->position.x -= dt * input_sensitivity;
jstephens78 12:5d913b57da7c 302 printf("LEFT\r\n");
jstephens78 12:5d913b57da7c 303 }
jstephens78 12:5d913b57da7c 304 if (blue.button[BUTTON_RIGHT]) {
jstephens78 12:5d913b57da7c 305 paddle_a->position.x += dt * input_sensitivity;
jstephens78 12:5d913b57da7c 306 printf("RIGHT\r\n");
jstephens78 12:5d913b57da7c 307 }
jstephens78 12:5d913b57da7c 308 if (blue.button[BUTTON_A]) {
jstephens78 12:5d913b57da7c 309 SetPhysicsBodyRotation(paddle_a, paddle_a->orient - dt * input_sensitivity * 0.05);
jstephens78 12:5d913b57da7c 310 printf("CW\r\n");
jstephens78 12:5d913b57da7c 311 }
jstephens78 12:5d913b57da7c 312 if (blue.button[BUTTON_B]) {
jstephens78 12:5d913b57da7c 313 SetPhysicsBodyRotation(paddle_a, paddle_a->orient + dt * input_sensitivity * 0.05);
jstephens78 12:5d913b57da7c 314 printf("CCW\r\n");
jstephens78 12:5d913b57da7c 315 }
jstephens78 12:5d913b57da7c 316
jstephens78 12:5d913b57da7c 317 float input_time = timer.read()*1000 - render_time - phys_time;
jstephens78 12:5d913b57da7c 318 }
jstephens78 12:5d913b57da7c 319
jstephens78 12:5d913b57da7c 320 ClosePhysics(); // Unitialize physics
jstephens78 9:4e6fae5f9b23 321 }
jstephens78 9:4e6fae5f9b23 322 }