|
@@ -12,9 +12,12 @@
|
|
|
#include "raylib.h"
|
|
|
#include "math.h"
|
|
|
|
|
|
-#define FORCE_AMOUNT 5.0f
|
|
|
-#define FORCE_RADIUS 150
|
|
|
-#define LINE_LENGTH 100
|
|
|
+#define FORCE_AMOUNT 5.0f
|
|
|
+#define FORCE_RADIUS 150
|
|
|
+#define LINE_LENGTH 75
|
|
|
+#define TRIANGLE_LENGTH 12
|
|
|
+
|
|
|
+void DrawRigidbodyCircle(PhysicObject *obj, Color color);
|
|
|
|
|
|
int main()
|
|
|
{
|
|
@@ -42,6 +45,7 @@ int main()
|
|
|
}
|
|
|
|
|
|
// Create circles physic objects
|
|
|
+ // NOTE: when creating circle physic objects, transform.scale must be { 0, 0 } and object radius must be defined in collider.radius and use this value to draw the circle.
|
|
|
PhysicObject *circles[3];
|
|
|
for (int i = 0; i < 3; i++)
|
|
|
{
|
|
@@ -111,14 +115,23 @@ int main()
|
|
|
// Draw force radius
|
|
|
DrawCircleLines(mousePosition.x, mousePosition.y, FORCE_RADIUS, BLACK);
|
|
|
|
|
|
- // Draw direction line
|
|
|
+ // Draw direction lines
|
|
|
if (CheckCollisionPointCircle((Vector2){ rectangles[i]->transform.position.x + rectangles[i]->transform.scale.x/2, rectangles[i]->transform.position.y + rectangles[i]->transform.scale.y/2 }, mousePosition, FORCE_RADIUS))
|
|
|
{
|
|
|
Vector2 direction = { rectangles[i]->transform.position.x + rectangles[i]->transform.scale.x/2 - mousePosition.x, rectangles[i]->transform.position.y + rectangles[i]->transform.scale.y/2 - mousePosition.y };
|
|
|
float angle = atan2l(direction.y, direction.x);
|
|
|
|
|
|
- DrawLineV((Vector2){ rectangles[i]->transform.position.x + rectangles[i]->transform.scale.x/2, rectangles[i]->transform.position.y + rectangles[i]->transform.scale.y/2 },
|
|
|
- (Vector2){ rectangles[i]->transform.position.x + rectangles[i]->transform.scale.x/2 + (cos(angle)*LINE_LENGTH), rectangles[i]->transform.position.y + rectangles[i]->transform.scale.y/2 + (sin(angle)*LINE_LENGTH) }, BLACK);
|
|
|
+ // Calculate arrow start and end positions
|
|
|
+ Vector2 startPosition = { rectangles[i]->transform.position.x + rectangles[i]->transform.scale.x/2, rectangles[i]->transform.position.y + rectangles[i]->transform.scale.y/2 };
|
|
|
+ Vector2 endPosition = { rectangles[i]->transform.position.x + rectangles[i]->transform.scale.x/2 + (cos(angle)*LINE_LENGTH), rectangles[i]->transform.position.y + rectangles[i]->transform.scale.y/2 + (sin(angle)*LINE_LENGTH) };
|
|
|
+
|
|
|
+ // Draw arrow line
|
|
|
+ DrawLineV(startPosition, endPosition, BLACK);
|
|
|
+
|
|
|
+ // Draw arrow triangle
|
|
|
+ DrawTriangleLines((Vector2){ endPosition.x - cos(angle + 90*DEG2RAD)*LINE_LENGTH/TRIANGLE_LENGTH, endPosition.y - sin(angle + 90*DEG2RAD)*LINE_LENGTH/TRIANGLE_LENGTH },
|
|
|
+ (Vector2){ endPosition.x + cos(angle + 90*DEG2RAD)*LINE_LENGTH/TRIANGLE_LENGTH, endPosition.y + sin(angle + 90*DEG2RAD)*LINE_LENGTH/TRIANGLE_LENGTH },
|
|
|
+ (Vector2){ endPosition.x + cos(angle)*LINE_LENGTH/TRIANGLE_LENGTH*2, endPosition.y + sin(angle)*LINE_LENGTH/TRIANGLE_LENGTH*2 }, BLACK);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -131,14 +144,23 @@ int main()
|
|
|
// Draw force radius
|
|
|
DrawCircleLines(mousePosition.x, mousePosition.y, FORCE_RADIUS, BLACK);
|
|
|
|
|
|
- // Draw direction line
|
|
|
+ // Draw direction lines
|
|
|
if (CheckCollisionPointCircle((Vector2){ circles[i]->transform.position.x, circles[i]->transform.position.y }, mousePosition, FORCE_RADIUS))
|
|
|
{
|
|
|
Vector2 direction = { circles[i]->transform.position.x - mousePosition.x, circles[i]->transform.position.y - mousePosition.y };
|
|
|
float angle = atan2l(direction.y, direction.x);
|
|
|
|
|
|
- DrawLineV((Vector2){ circles[i]->transform.position.x, circles[i]->transform.position.y },
|
|
|
- (Vector2){ circles[i]->transform.position.x + (cos(angle)*LINE_LENGTH), circles[i]->transform.position.y + (sin(angle)*LINE_LENGTH) }, BLACK);
|
|
|
+ // Calculate arrow start and end positions
|
|
|
+ Vector2 startPosition = { circles[i]->transform.position.x, circles[i]->transform.position.y };
|
|
|
+ Vector2 endPosition = { circles[i]->transform.position.x + (cos(angle)*LINE_LENGTH), circles[i]->transform.position.y + (sin(angle)*LINE_LENGTH) };
|
|
|
+
|
|
|
+ // Draw arrow line
|
|
|
+ DrawLineV(startPosition, endPosition, BLACK);
|
|
|
+
|
|
|
+ // Draw arrow triangle
|
|
|
+ DrawTriangleLines((Vector2){ endPosition.x - cos(angle + 90*DEG2RAD)*LINE_LENGTH/TRIANGLE_LENGTH, endPosition.y - sin(angle + 90*DEG2RAD)*LINE_LENGTH/TRIANGLE_LENGTH },
|
|
|
+ (Vector2){ endPosition.x + cos(angle + 90*DEG2RAD)*LINE_LENGTH/TRIANGLE_LENGTH, endPosition.y + sin(angle + 90*DEG2RAD)*LINE_LENGTH/TRIANGLE_LENGTH },
|
|
|
+ (Vector2){ endPosition.x + cos(angle)*LINE_LENGTH/TRIANGLE_LENGTH*2, endPosition.y + sin(angle)*LINE_LENGTH/TRIANGLE_LENGTH*2 }, BLACK);
|
|
|
}
|
|
|
}
|
|
|
|