summaryrefslogtreecommitdiffhomepage
path: root/examples/src/shapes/shapes_following_eyes.c
diff options
context:
space:
mode:
Diffstat (limited to 'examples/src/shapes/shapes_following_eyes.c')
-rw-r--r--examples/src/shapes/shapes_following_eyes.c104
1 files changed, 104 insertions, 0 deletions
diff --git a/examples/src/shapes/shapes_following_eyes.c b/examples/src/shapes/shapes_following_eyes.c
new file mode 100644
index 0000000..e99a7e0
--- /dev/null
+++ b/examples/src/shapes/shapes_following_eyes.c
@@ -0,0 +1,104 @@
+/*******************************************************************************************
+*
+* raylib [shapes] example - following eyes
+*
+* This example has been created using raylib 2.5 (www.raylib.com)
+* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
+*
+* Copyright (c) 2013-2019 Ramon Santamaria (@raysan5)
+*
+********************************************************************************************/
+
+#include "raylib.h"
+
+#include <math.h> // Required for: atan2f()
+
+int main()
+{
+ // Initialization
+ //--------------------------------------------------------------------------------------
+ const int screenWidth = 800;
+ const int screenHeight = 450;
+
+ InitWindow(screenWidth, screenHeight, "raylib [shapes] example - following eyes");
+
+ Vector2 scleraLeftPosition = { GetScreenWidth()/2 - 100, GetScreenHeight()/2 };
+ Vector2 scleraRightPosition = { GetScreenWidth()/2 + 100, GetScreenHeight()/2 };
+ float scleraRadius = 80;
+
+ Vector2 irisLeftPosition = { GetScreenWidth()/2 - 100, GetScreenHeight()/2 };
+ Vector2 irisRightPosition = { GetScreenWidth()/2 + 100, GetScreenHeight()/2};
+ float irisRadius = 24;
+
+ float angle;
+ float dx, dy, dxx, dyy;
+
+ SetTargetFPS(60);
+ //--------------------------------------------------------------------------------------
+
+ // Main game loop
+ while (!WindowShouldClose()) // Detect window close button or ESC key
+ {
+ // Update
+ //----------------------------------------------------------------------------------
+ irisLeftPosition = GetMousePosition();
+ irisRightPosition = GetMousePosition();
+
+ // Check not inside the left eye sclera
+ if (!CheckCollisionPointCircle(irisLeftPosition, scleraLeftPosition, scleraRadius - 20))
+ {
+ dx = irisLeftPosition.x - scleraLeftPosition.x;
+ dy = irisLeftPosition.y - scleraLeftPosition.y;
+
+ angle = atan2f(dy, dx);
+
+ dxx = (scleraRadius - irisRadius)*cosf(angle);
+ dyy = (scleraRadius - irisRadius)*sinf(angle);
+
+ irisLeftPosition.x = scleraLeftPosition.x + dxx;
+ irisLeftPosition.y = scleraLeftPosition.y + dyy;
+ }
+
+ // Check not inside the right eye sclera
+ if (!CheckCollisionPointCircle(irisRightPosition, scleraRightPosition, scleraRadius - 20))
+ {
+ dx = irisRightPosition.x - scleraRightPosition.x;
+ dy = irisRightPosition.y - scleraRightPosition.y;
+
+ angle = atan2f(dy, dx);
+
+ dxx = (scleraRadius - irisRadius)*cosf(angle);
+ dyy = (scleraRadius - irisRadius)*sinf(angle);
+
+ irisRightPosition.x = scleraRightPosition.x + dxx;
+ irisRightPosition.y = scleraRightPosition.y + dyy;
+ }
+ //----------------------------------------------------------------------------------
+
+ // Draw
+ //----------------------------------------------------------------------------------
+ BeginDrawing();
+
+ ClearBackground(RAYWHITE);
+
+ DrawCircleV(scleraLeftPosition, scleraRadius, LIGHTGRAY);
+ DrawCircleV(irisLeftPosition, irisRadius, BROWN);
+ DrawCircleV(irisLeftPosition, 10, BLACK);
+
+ DrawCircleV(scleraRightPosition, scleraRadius, LIGHTGRAY);
+ DrawCircleV(irisRightPosition, irisRadius, DARKGREEN);
+ DrawCircleV(irisRightPosition, 10, BLACK);
+
+ DrawFPS(10, 10);
+
+ EndDrawing();
+ //----------------------------------------------------------------------------------
+ }
+
+ // De-Initialization
+ //--------------------------------------------------------------------------------------
+ CloseWindow(); // Close window and OpenGL context
+ //--------------------------------------------------------------------------------------
+
+ return 0;
+} \ No newline at end of file