feat: ball following mouse and blending with static polygon
This commit is contained in:
75
src/main.c
75
src/main.c
@@ -1,21 +1,92 @@
|
||||
#include <stdio.h>
|
||||
#include <raylib.h>
|
||||
|
||||
#define WIDTH 800
|
||||
#define HEIGHT 600
|
||||
|
||||
typedef struct
|
||||
{
|
||||
Vector2 points[6];
|
||||
int numPoints;
|
||||
float influence;
|
||||
} Polygon;
|
||||
|
||||
Polygon poly = {
|
||||
{{WIDTH / 2 + 50, HEIGHT / 2 - 50},
|
||||
{WIDTH / 2 + 80, HEIGHT / 2},
|
||||
{WIDTH / 2 + 50, HEIGHT / 2 + 50},
|
||||
{WIDTH / 2 - 50, HEIGHT / 2 + 50},
|
||||
{WIDTH / 2 - 80, HEIGHT / 2},
|
||||
{WIDTH / 2 - 50, HEIGHT / 2 - 50}},
|
||||
6,
|
||||
3000.0f};
|
||||
|
||||
int main(void)
|
||||
{
|
||||
InitWindow(WIDTH, HEIGHT, "Wallpaper");
|
||||
SetWindowState(FLAG_WINDOW_RESIZABLE);
|
||||
SetTargetFPS(60);
|
||||
|
||||
// initialize shader
|
||||
Shader shader = LoadShader("resources/shaders/basic.vs", "resources/shaders/basic.fs");
|
||||
|
||||
int resolutionLoc = GetShaderLocation(shader, "resolution");
|
||||
int mousePosLoc = GetShaderLocation(shader, "mouse_pos");
|
||||
int ballRadiusLoc = GetShaderLocation(shader, "ball_radius");
|
||||
int polygonPointsLoc = GetShaderLocation(shader, "polygon_points");
|
||||
int polygonInfluenceLoc = GetShaderLocation(shader, "polygon_influence");
|
||||
|
||||
Vector2 resolution = {WIDTH, HEIGHT};
|
||||
SetShaderValue(shader, resolutionLoc, &resolution, SHADER_UNIFORM_VEC2);
|
||||
|
||||
// send ball data
|
||||
float ballRadius = 40.0f;
|
||||
SetShaderValue(shader, ballRadiusLoc, &ballRadius, SHADER_UNIFORM_FLOAT);
|
||||
|
||||
// send polygon data
|
||||
float polygonInfluence = poly.influence;
|
||||
SetShaderValue(shader, polygonInfluenceLoc, &polygonInfluence, SHADER_UNIFORM_FLOAT);
|
||||
|
||||
float polygonPoints[12];
|
||||
for (int i = 0; i < poly.numPoints; i++)
|
||||
{
|
||||
polygonPoints[i * 2] = poly.points[i].x;
|
||||
polygonPoints[i * 2 + 1] = poly.points[i].y;
|
||||
}
|
||||
SetShaderValueV(shader, polygonPointsLoc, polygonPoints, SHADER_UNIFORM_VEC2, poly.numPoints);
|
||||
|
||||
// initializee render texture
|
||||
RenderTexture2D target = LoadRenderTexture(WIDTH, HEIGHT);
|
||||
|
||||
while (!WindowShouldClose())
|
||||
{
|
||||
int screenWidth = GetScreenWidth();
|
||||
int screenHeight = GetScreenHeight();
|
||||
|
||||
if (IsWindowResized())
|
||||
{
|
||||
UnloadRenderTexture(target);
|
||||
target = LoadRenderTexture(screenWidth, screenHeight);
|
||||
|
||||
Vector2 resolution = {screenWidth, screenHeight};
|
||||
SetShaderValue(shader, resolutionLoc, &resolution, SHADER_UNIFORM_VEC2);
|
||||
}
|
||||
|
||||
Vector2 mousePos = GetMousePosition();
|
||||
mousePos.y = screenHeight - mousePos.y;
|
||||
SetShaderValue(shader, mousePosLoc, &mousePos, SHADER_UNIFORM_VEC2);
|
||||
|
||||
BeginDrawing();
|
||||
|
||||
ClearBackground(RED);
|
||||
BeginShaderMode(shader);
|
||||
DrawTextureRec(target.texture, (Rectangle){0, 0, screenWidth, -screenHeight}, (Vector2){0, 0}, WHITE);
|
||||
EndShaderMode();
|
||||
|
||||
EndDrawing();
|
||||
}
|
||||
|
||||
UnloadRenderTexture(target);
|
||||
UnloadShader(shader);
|
||||
CloseWindow();
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user