7#include <imgui_spinner.h>
48 glClear(GL_COLOR_BUFFER_BIT);
51 gl2d::enableNecessaryGLFeatures();
52 renderer.updateWindowMetrics(windowState.
w, windowState.
h);
58 renderer.renderRectangle({10, 10, 100, 100}, Colors_Green, {}, *
r);
62 renderer.renderRectangle({10, 10, 100, 100}, Colors_Blue, {}, *
r);
85 int frameCount, timerFPS, lastFrame, fps;
87 SDL_Rect l_paddle, r_paddle, ball, score_board;
117 window = SDL_RenderGetWindow(
renderer);
119 color.r = color.g = color.b = 255;
121 l_paddle.x = 32; l_paddle.h = HEIGHT / 4;
122 l_paddle.y = (HEIGHT / 2) - (l_paddle.h / 2);
125 r_paddle.x = WIDTH - r_paddle.w - 32;
126 ball.w = ball.h = SIZE;
140 if (SDL_HasIntersection(&ball, &r_paddle)) {
141 double rel = (r_paddle.y + (r_paddle.h / 2)) - (ball.y + (SIZE / 2));
142 double norm = rel / (r_paddle.h / 2);
143 double bounce = norm * (5 * PI / 12);
144 velX = -BALL_SPEED * cos(bounce);
145 velY = BALL_SPEED * -sin(bounce);
147 if (SDL_HasIntersection(&ball, &l_paddle)) {
148 double rel = (l_paddle.y + (l_paddle.h / 2)) - (ball.y + (SIZE / 2));
149 double norm = rel / (l_paddle.h / 2);
150 double bounce = norm * (5 * PI / 12);
151 velX = BALL_SPEED * cos(bounce);
152 velY = BALL_SPEED * -sin(bounce);
154 if (ball.y > r_paddle.y + (r_paddle.h / 2)) r_paddle.y += SPEED;
155 if (ball.y < r_paddle.y + (r_paddle.h / 2)) r_paddle.y -= SPEED;
156 if (ball.x <= 0) { r_s++; serve(); }
157 if (ball.x + SIZE >= WIDTH) { l_s++; serve(); }
158 if (ball.y <= 0 || ball.y + SIZE >= HEIGHT) velY = -velY;
161 score = std::to_string(l_s) +
" " + std::to_string(r_s);
162 if (l_paddle.y < 0)l_paddle.y = 0;
163 if (l_paddle.y + l_paddle.h > HEIGHT)l_paddle.y = HEIGHT - l_paddle.h;
164 if (r_paddle.y < 0)r_paddle.y = 0;
165 if (r_paddle.y + r_paddle.h > HEIGHT)r_paddle.y = HEIGHT - r_paddle.h;
168 if (input.
deltaTime * 1000 < (1000 / 60)) {
169 SDL_Delay((1000 / 60) - input.
deltaTime * 1000);
171 SDL_SetRenderDrawColor(
renderer, 0, 0, 0, 255);
174 SDL_SetRenderDrawColor(
renderer, color.r, color.g, color.b, 255);
175 SDL_RenderFillRect(
renderer, &l_paddle);
176 SDL_RenderFillRect(
renderer, &r_paddle);
177 SDL_RenderFillRect(
renderer, &ball);
185 l_paddle.y = r_paddle.y = (HEIGHT / 2) - (l_paddle.h / 2);
187 ball.x = l_paddle.x + (l_paddle.w * 4);
188 velX = BALL_SPEED / 2;
191 ball.x = r_paddle.x - (r_paddle.w * 4);
192 velX = -BALL_SPEED / 2;
195 ball.y = HEIGHT / 2 - (SIZE / 2);
size_t constexpr MB(size_t x)
size_t defaultHeapMemorySize
static ContainerStaticInfo containerInfo()
gl2d::Renderer2D renderer
bool create(RequestedContainerInfo &requestedInfo, samurai::StaticString< 256 > commandLineArgument)
bool update(samurai::Input input, samurai::WindowState windowState, RequestedContainerInfo &requestedInfo)