const float x_off_1 = 1.0f / 1024.0f; const float y_off_1 = 1.0f / 768.0f; const float boardwidth = 1024.0f; const float boardheight = 768.0f; const float paddleWidth = 30.0f; const float paddleHeight = 150.0f; const float ballRadius = 10.0f; const float ballSpeed = 20.5f; const float halfwidth = 1024.0f / 2.0f; float4 ball = tex2D(input.Sampler1, float2(0,0)); float4 paddles = tex2D(input.Sampler1, float2(1,1)); if(input.TexCoord0.r < x_off_1 && input.TexCoord0.g < y_off_1) { if((ball.r < paddles.r + (paddleWidth / 2.0f) + ballRadius && ball.g < paddles.g + (paddleHeight / 2.0f) + ballRadius && ball.g > paddles.g - (paddleHeight / 2.0f) - ballRadius) || (ball.r > paddles.b - (paddleWidth / 2.0f) - ballRadius && ball.g < paddles.a + (paddleHeight / 2.0f) + ballRadius && ball.g > paddles.a - (paddleHeight / 2.0f) - ballRadius) && (ball.r < (boardwidth - ballRadius) || ball.r > ballRadius)) { if(ball.b > 1) { ball.x -= (paddleWidth - 1); } else { ball.x += (paddleWidth + 1); } //distance from center float2 vel = float2(ball.ba); vel = reflect(float2(vel), float2(1,0)); ball.ba = vel.xy; } else if((ball.r > (boardwidth - ballRadius) || ball.r < ballRadius) || ((ball.r < (paddles.r - paddleWidth) && ball.r > 0) || (ball.r > (paddles.b + paddleWidth) && ball.r < boardwidth))) { ball.r = halfwidth; ball.g = boardheight / 2.0f; float2 noise = input.Noise2D(float2(input.Float_C1,input.Float_C1))*ballSpeed; ball.b = noise.x; ball.a = noise.y; ball.b = max(ball.b, 1.0f); ball.b = min(ball.b, 10.0f); ball.a = max(ball.a, 1.0f); ball.a = min(ball.a, 10.0f); ball.b *= ballSpeed; ball.a *= ballSpeed; ball.b /= noise.y; ball.a /= noise.x; } else if(ball.g > (boardheight - (ballRadius)) || ball.g < (ballRadius)) { ball.a = -ball.a; } if(ball.b != 0.0f || ball.a != 0.0f) { ball.r += ball.b; ball.g += ball.a; } //final speed check if(ball.b < 5.0f && ball.b > -5.0f) { if(ball.b > 0) { ball.b += 1; } else { ball.b -= 1; } } output.Color = float4(ball.r, ball.g, ball.b, ball.a); } else { paddles.r = (boardwidth / 100) * 10; paddles.b = boardwidth - ((boardwidth / 100) * 10); if(paddles.g > boardheight + 1000.0f || paddles.a > boardheight + 1000.0f) { paddles.g = halfwidth; paddles.a = halfwidth; } paddles.g = paddles.g + input.Float_C0; paddles.a = paddles.a - input.Float_C0; //CLAMP if(paddles.g > boardheight - (paddleHeight / 2)) { paddles.g = boardheight - (paddleHeight / 2); } if(paddles.g < paddleHeight / 2) { paddles.g = paddleHeight / 2; } if(paddles.a > boardheight - (paddleHeight / 2)) { paddles.a = boardheight - (paddleHeight / 2); } if(paddles.a < paddleHeight / 2) { paddles.a = paddleHeight / 2; } //END CLAMP output.Color = float4(paddles);