-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathshapes_following_eyes.php
99 lines (75 loc) · 3.42 KB
/
shapes_following_eyes.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
<?php
declare(strict_types=1);
use Nawarian\Raylib\Types\{Color, Vector2};
use function Nawarian\Raylib\{
BeginDrawing,
CheckCollisionPointCircle,
ClearBackground,
CloseWindow,
DrawCircleV,
DrawFPS,
EndDrawing,
GetMousePosition,
GetScreenHeight,
GetScreenWidth,
InitWindow,
SetTargetFPS,
WindowShouldClose
};
require_once __DIR__ . '/../../vendor/autoload.php';
// Initialization
//--------------------------------------------------------------------------------------
$screenWidth = 800;
$screenHeight = 450;
InitWindow($screenWidth, $screenHeight, "raylib [shapes] example - following eyes");
$scleraLeftPosition = new Vector2(GetScreenWidth() / 2 - 100, GetScreenHeight() / 2);
$scleraRightPosition = new Vector2(GetScreenWidth() / 2 + 100, GetScreenHeight() / 2);
$scleraRadius = 80;
$irisRadius = 24;
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
//--------------------------------------------------------------------------------------
// 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 = atan2($dy, $dx);
$dxx = ($scleraRadius - $irisRadius) * cos($angle);
$dyy = ($scleraRadius - $irisRadius) * sin($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 = atan2($dy, $dx);
$dxx = ($scleraRadius - $irisRadius) * cos($angle);
$dyy = ($scleraRadius - $irisRadius) * sin($angle);
$irisRightPosition->x = $scleraRightPosition->x + $dxx;
$irisRightPosition->y = $scleraRightPosition->y + $dyy;
}
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
BeginDrawing();
ClearBackground(Color::rayWhite());
DrawCircleV($scleraLeftPosition, $scleraRadius, Color::lightGray());
DrawCircleV($irisLeftPosition, $irisRadius, Color::brown());
DrawCircleV($irisLeftPosition, 10, Color::black());
DrawCircleV($scleraRightPosition, $scleraRadius, Color::lightGray());
DrawCircleV($irisRightPosition, $irisRadius, Color::darkGreen());
DrawCircleV($irisRightPosition, 10, Color::black());
DrawFPS(10, 10);
EndDrawing();
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------