summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--examples/textures/textures_textured_curve.c222
-rw-r--r--parser/raylib_parser.c4
-rw-r--r--src/rcamera.h41
3 files changed, 134 insertions, 133 deletions
diff --git a/examples/textures/textures_textured_curve.c b/examples/textures/textures_textured_curve.c
index 201b01fe..7945d8e3 100644
--- a/examples/textures/textures_textured_curve.c
+++ b/examples/textures/textures_textured_curve.c
@@ -59,19 +59,19 @@ int main()
const int screenWidth = 800;
const int screenHeight = 450;
- SetConfigFlags(FLAG_VSYNC_HINT | FLAG_MSAA_4X_HINT);
- InitWindow(screenWidth, screenHeight, "raylib [textures] examples - textured curve");
+ SetConfigFlags(FLAG_VSYNC_HINT | FLAG_MSAA_4X_HINT);
+ InitWindow(screenWidth, screenHeight, "raylib [textures] examples - textured curve");
- // Load the road texture
- texRoad = LoadTexture("resources/road.png");
+ // Load the road texture
+ texRoad = LoadTexture("resources/road.png");
SetTextureFilter(texRoad, TEXTURE_FILTER_BILINEAR);
- // Setup the curve
- curveStartPosition = (Vector2){ 80, 100 };
- curveStartPositionTangent = (Vector2){ 100, 300 };
+ // Setup the curve
+ curveStartPosition = (Vector2){ 80, 100 };
+ curveStartPositionTangent = (Vector2){ 100, 300 };
- curveEndPosition = (Vector2){ 700, 350 };
- curveEndPositionTangent = (Vector2){ 600, 100 };
+ curveEndPosition = (Vector2){ 700, 350 };
+ curveEndPositionTangent = (Vector2){ 600, 100 };
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
//--------------------------------------------------------------------------------------
@@ -81,8 +81,8 @@ int main()
{
// Update
//----------------------------------------------------------------------------------
- UpdateCurve();
- UpdateOptions();
+ UpdateCurve();
+ UpdateOptions();
//----------------------------------------------------------------------------------
@@ -99,13 +99,13 @@ int main()
DrawText(TextFormat("Curve width: %2.0f (Use + and - to adjust)", curveWidth), 10, 30, 10, DARKGRAY);
DrawText(TextFormat("Curve segments: %d (Use LEFT and RIGHT to adjust)", curveSegments), 10, 50, 10, DARKGRAY);
- EndDrawing();
+ EndDrawing();
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
- UnloadTexture(texRoad);
+ UnloadTexture(texRoad);
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
@@ -118,142 +118,142 @@ int main()
//----------------------------------------------------------------------------------
static void DrawCurve(void)
{
- if (showCurve) DrawLineBezierCubic(curveStartPosition, curveEndPosition, curveStartPositionTangent, curveEndPositionTangent, 2, BLUE);
+ if (showCurve) DrawLineBezierCubic(curveStartPosition, curveEndPosition, curveStartPositionTangent, curveEndPositionTangent, 2, BLUE);
- // Draw the various control points and highlight where the mouse is
- DrawLineV(curveStartPosition, curveStartPositionTangent, SKYBLUE);
- DrawLineV(curveEndPosition, curveEndPositionTangent, PURPLE);
- Vector2 mouse = GetMousePosition();
+ // Draw the various control points and highlight where the mouse is
+ DrawLineV(curveStartPosition, curveStartPositionTangent, SKYBLUE);
+ DrawLineV(curveEndPosition, curveEndPositionTangent, PURPLE);
+ Vector2 mouse = GetMousePosition();
- if (CheckCollisionPointCircle(mouse, curveStartPosition, 6)) DrawCircleV(curveStartPosition, 7, YELLOW);
- DrawCircleV(curveStartPosition, 5, RED);
+ if (CheckCollisionPointCircle(mouse, curveStartPosition, 6)) DrawCircleV(curveStartPosition, 7, YELLOW);
+ DrawCircleV(curveStartPosition, 5, RED);
- if (CheckCollisionPointCircle(mouse, curveStartPositionTangent, 6)) DrawCircleV(curveStartPositionTangent, 7, YELLOW);
- DrawCircleV(curveStartPositionTangent, 5, MAROON);
+ if (CheckCollisionPointCircle(mouse, curveStartPositionTangent, 6)) DrawCircleV(curveStartPositionTangent, 7, YELLOW);
+ DrawCircleV(curveStartPositionTangent, 5, MAROON);
- if (CheckCollisionPointCircle(mouse, curveEndPosition, 6)) DrawCircleV(curveEndPosition, 7, YELLOW);
- DrawCircleV(curveEndPosition, 5, GREEN);
+ if (CheckCollisionPointCircle(mouse, curveEndPosition, 6)) DrawCircleV(curveEndPosition, 7, YELLOW);
+ DrawCircleV(curveEndPosition, 5, GREEN);
- if (CheckCollisionPointCircle(mouse, curveEndPositionTangent, 6)) DrawCircleV(curveEndPositionTangent, 7, YELLOW);
- DrawCircleV(curveEndPositionTangent, 5, DARKGREEN);
+ if (CheckCollisionPointCircle(mouse, curveEndPositionTangent, 6)) DrawCircleV(curveEndPositionTangent, 7, YELLOW);
+ DrawCircleV(curveEndPositionTangent, 5, DARKGREEN);
}
static void UpdateCurve(void)
{
- // If the mouse is not down, we are not editing the curve so clear the selection
- if (!IsMouseButtonDown(MOUSE_LEFT_BUTTON))
- {
- curveSelectedPoint = NULL;
- return;
- }
-
- // If a point was selected, move it
- if (curveSelectedPoint)
- {
- *curveSelectedPoint = Vector2Add(*curveSelectedPoint, GetMouseDelta());
- return;
- }
-
- // The mouse is down, and nothing was selected, so see if anything was picked
- Vector2 mouse = GetMousePosition();
-
- if (CheckCollisionPointCircle(mouse, curveStartPosition, 6)) curveSelectedPoint = &curveStartPosition;
- else if (CheckCollisionPointCircle(mouse, curveStartPositionTangent, 6)) curveSelectedPoint = &curveStartPositionTangent;
- else if (CheckCollisionPointCircle(mouse, curveEndPosition, 6)) curveSelectedPoint = &curveEndPosition;
- else if (CheckCollisionPointCircle(mouse, curveEndPositionTangent, 6)) curveSelectedPoint = &curveEndPositionTangent;
+ // If the mouse is not down, we are not editing the curve so clear the selection
+ if (!IsMouseButtonDown(MOUSE_LEFT_BUTTON))
+ {
+ curveSelectedPoint = NULL;
+ return;
+ }
+
+ // If a point was selected, move it
+ if (curveSelectedPoint)
+ {
+ *curveSelectedPoint = Vector2Add(*curveSelectedPoint, GetMouseDelta());
+ return;
+ }
+
+ // The mouse is down, and nothing was selected, so see if anything was picked
+ Vector2 mouse = GetMousePosition();
+
+ if (CheckCollisionPointCircle(mouse, curveStartPosition, 6)) curveSelectedPoint = &curveStartPosition;
+ else if (CheckCollisionPointCircle(mouse, curveStartPositionTangent, 6)) curveSelectedPoint = &curveStartPositionTangent;
+ else if (CheckCollisionPointCircle(mouse, curveEndPosition, 6)) curveSelectedPoint = &curveEndPosition;
+ else if (CheckCollisionPointCircle(mouse, curveEndPositionTangent, 6)) curveSelectedPoint = &curveEndPositionTangent;
}
static void DrawTexturedCurve(void)
{
- const float step = 1.0f/curveSegments;
+ const float step = 1.0f/curveSegments;
- Vector2 previous = curveStartPosition;
- Vector2 previousTangent = { 0 };
- float previousV = 0;
+ Vector2 previous = curveStartPosition;
+ Vector2 previousTangent = { 0 };
+ float previousV = 0;
- // We can't compute a tangent for the first point, so we need to reuse the tangent from the first segment
- bool tangentSet = false;
+ // We can't compute a tangent for the first point, so we need to reuse the tangent from the first segment
+ bool tangentSet = false;
- Vector2 current = { 0 };
- float t = 0.0f;
+ Vector2 current = { 0 };
+ float t = 0.0f;
- for (int i = 1; i <= curveSegments; i++)
- {
- // Segment the curve
- t = step*i;
- float a = powf(1 - t, 3);
- float b = 3*powf(1 - t, 2)*t;
- float c = 3*(1 - t)*powf(t, 2);
- float d = powf(t, 3);
+ for (int i = 1; i <= curveSegments; i++)
+ {
+ // Segment the curve
+ t = step*i;
+ float a = powf(1 - t, 3);
+ float b = 3*powf(1 - t, 2)*t;
+ float c = 3*(1 - t)*powf(t, 2);
+ float d = powf(t, 3);
- // Compute the endpoint for this segment
- current.y = a*curveStartPosition.y + b*curveStartPositionTangent.y + c*curveEndPositionTangent.y + d*curveEndPosition.y;
- current.x = a*curveStartPosition.x + b*curveStartPositionTangent.x + c*curveEndPositionTangent.x + d*curveEndPosition.x;
+ // Compute the endpoint for this segment
+ current.y = a*curveStartPosition.y + b*curveStartPositionTangent.y + c*curveEndPositionTangent.y + d*curveEndPosition.y;
+ current.x = a*curveStartPosition.x + b*curveStartPositionTangent.x + c*curveEndPositionTangent.x + d*curveEndPosition.x;
- // Vector from previous to current
- Vector2 delta = { current.x - previous.x, current.y - previous.y };
+ // Vector from previous to current
+ Vector2 delta = { current.x - previous.x, current.y - previous.y };
- // The right hand normal to the delta vector
- Vector2 normal = Vector2Normalize((Vector2){ -delta.y, delta.x });
+ // The right hand normal to the delta vector
+ Vector2 normal = Vector2Normalize((Vector2){ -delta.y, delta.x });
- // The v texture coordinate of the segment (add up the length of all the segments so far)
- float v = previousV + Vector2Length(delta);
+ // The v texture coordinate of the segment (add up the length of all the segments so far)
+ float v = previousV + Vector2Length(delta);
- // Make sure the start point has a normal
- if (!tangentSet)
- {
- previousTangent = normal;
- tangentSet = true;
- }
+ // Make sure the start point has a normal
+ if (!tangentSet)
+ {
+ previousTangent = normal;
+ tangentSet = true;
+ }
- // Extend out the normals from the previous and current points to get the quad for this segment
- Vector2 prevPosNormal = Vector2Add(previous, Vector2Scale(previousTangent, curveWidth));
- Vector2 prevNegNormal = Vector2Add(previous, Vector2Scale(previousTangent, -curveWidth));
+ // Extend out the normals from the previous and current points to get the quad for this segment
+ Vector2 prevPosNormal = Vector2Add(previous, Vector2Scale(previousTangent, curveWidth));
+ Vector2 prevNegNormal = Vector2Add(previous, Vector2Scale(previousTangent, -curveWidth));
- Vector2 currentPosNormal = Vector2Add(current, Vector2Scale(normal, curveWidth));
- Vector2 currentNegNormal = Vector2Add(current, Vector2Scale(normal, -curveWidth));
+ Vector2 currentPosNormal = Vector2Add(current, Vector2Scale(normal, curveWidth));
+ Vector2 currentNegNormal = Vector2Add(current, Vector2Scale(normal, -curveWidth));
- // Draw the segment as a quad
- rlSetTexture(texRoad.id);
- rlBegin(RL_QUADS);
+ // Draw the segment as a quad
+ rlSetTexture(texRoad.id);
+ rlBegin(RL_QUADS);
- rlColor4ub(255,255,255,255);
- rlNormal3f(0.0f, 0.0f, 1.0f);
+ rlColor4ub(255,255,255,255);
+ rlNormal3f(0.0f, 0.0f, 1.0f);
- rlTexCoord2f(0, previousV);
- rlVertex2f(prevNegNormal.x, prevNegNormal.y);
+ rlTexCoord2f(0, previousV);
+ rlVertex2f(prevNegNormal.x, prevNegNormal.y);
- rlTexCoord2f(1, previousV);
- rlVertex2f(prevPosNormal.x, prevPosNormal.y);
+ rlTexCoord2f(1, previousV);
+ rlVertex2f(prevPosNormal.x, prevPosNormal.y);
- rlTexCoord2f(1, v);
- rlVertex2f(currentPosNormal.x, currentPosNormal.y);
+ rlTexCoord2f(1, v);
+ rlVertex2f(currentPosNormal.x, currentPosNormal.y);
- rlTexCoord2f(0, v);
- rlVertex2f(currentNegNormal.x, currentNegNormal.y);
+ rlTexCoord2f(0, v);
+ rlVertex2f(currentNegNormal.x, currentNegNormal.y);
- rlEnd();
+ rlEnd();
- // The current step is the start of the next step
- previous = current;
- previousTangent = normal;
- previousV = v;
- }
+ // The current step is the start of the next step
+ previous = current;
+ previousTangent = normal;
+ previousV = v;
+ }
}
static void UpdateOptions(void)
{
- if (IsKeyPressed(KEY_SPACE)) showCurve = !showCurve;
+ if (IsKeyPressed(KEY_SPACE)) showCurve = !showCurve;
- // Update with
- if (IsKeyPressed(KEY_EQUAL)) curveWidth += 2;
- if (IsKeyPressed(KEY_MINUS)) curveWidth -= 2;
+ // Update with
+ if (IsKeyPressed(KEY_EQUAL)) curveWidth += 2;
+ if (IsKeyPressed(KEY_MINUS)) curveWidth -= 2;
- if (curveWidth < 2) curveWidth = 2;
+ if (curveWidth < 2) curveWidth = 2;
- // Update segments
- if (IsKeyPressed(KEY_LEFT)) curveSegments -= 2;
- if (IsKeyPressed(KEY_RIGHT)) curveSegments += 2;
+ // Update segments
+ if (IsKeyPressed(KEY_LEFT)) curveSegments -= 2;
+ if (IsKeyPressed(KEY_RIGHT)) curveSegments += 2;
- if (curveSegments < 2) curveSegments = 2;
+ if (curveSegments < 2) curveSegments = 2;
}
diff --git a/parser/raylib_parser.c b/parser/raylib_parser.c
index 7bb8cf7f..94ff9562 100644
--- a/parser/raylib_parser.c
+++ b/parser/raylib_parser.c
@@ -209,8 +209,8 @@ int main(int argc, char* argv[])
if (buffer == NULL)
{
- printf("Could not read input file: %s\n", inFileName);
- return 1;
+ printf("Could not read input file: %s\n", inFileName);
+ return 1;
}
// Preprocess buffer to get separate lines
diff --git a/src/rcamera.h b/src/rcamera.h
index c0c28209..edcd5ee3 100644
--- a/src/rcamera.h
+++ b/src/rcamera.h
@@ -160,7 +160,7 @@ Matrix GetCameraProjectionMatrix(Camera* camera, float aspect);
// MatrixOrtho()
// MatrixIdentity()
-// raylib input functionality required: GetMouseDelta(), GetMouseWheelMove(), IsKeyDown(), IsKeyPressed()
+// raylib required functionality: GetMouseDelta(), GetMouseWheelMove(), IsKeyDown(), IsKeyPressed(), GetFrameTime()
//----------------------------------------------------------------------------------
// Defines and Macros
@@ -195,7 +195,7 @@ Matrix GetCameraProjectionMatrix(Camera* camera, float aspect);
//----------------------------------------------------------------------------------
// Module specific Functions Declaration
//----------------------------------------------------------------------------------
-
+//...
//----------------------------------------------------------------------------------
// Module Functions Definition
@@ -218,6 +218,7 @@ Vector3 GetCameraRight(Camera *camera)
{
Vector3 forward = GetCameraForward(camera);
Vector3 up = GetCameraUp(camera);
+
return Vector3CrossProduct(forward, up);
}
@@ -419,26 +420,26 @@ void UpdateCamera(Camera *camera, int mode)
bool lockView = mode == CAMERA_FIRST_PERSON || mode == CAMERA_THIRD_PERSON || mode == CAMERA_ORBITAL;
bool rotateUp = mode == CAMERA_FREE;
- if (mode == CAMERA_ORBITAL)
- {
- // Obital can just orbit
- Matrix rotatation = MatrixRotate(GetCameraUp(camera), CAMERA_ORBITAL_SPEED * GetFrameTime());
- Vector3 viewVector = Vector3Subtract(camera->position, camera->target);
- viewVector = Vector3Transform(viewVector, rotatation);
- camera->position = Vector3Add(camera->target, viewVector);
- }
+ if (mode == CAMERA_ORBITAL)
+ {
+ // Orbital can just orbit
+ Matrix rotatation = MatrixRotate(GetCameraUp(camera), CAMERA_ORBITAL_SPEED*GetFrameTime());
+ Vector3 viewVector = Vector3Subtract(camera->position, camera->target);
+ viewVector = Vector3Transform(viewVector, rotatation);
+ camera->position = Vector3Add(camera->target, viewVector);
+ }
else
{
- // Camera rotation
- if (IsKeyDown(KEY_DOWN)) CameraPitch(camera, -CAMERA_ROTATION_SPEED, lockView, rotateAroundTarget, rotateUp);
- if (IsKeyDown(KEY_UP)) CameraPitch(camera, CAMERA_ROTATION_SPEED, lockView, rotateAroundTarget, rotateUp);
- if (IsKeyDown(KEY_RIGHT)) CameraYaw(camera, -CAMERA_ROTATION_SPEED, rotateAroundTarget);
- if (IsKeyDown(KEY_LEFT)) CameraYaw(camera, CAMERA_ROTATION_SPEED, rotateAroundTarget);
- if (IsKeyDown(KEY_Q)) CameraRoll(camera, -CAMERA_ROTATION_SPEED);
- if (IsKeyDown(KEY_E)) CameraRoll(camera, CAMERA_ROTATION_SPEED);
-
- CameraYaw(camera, -mousePositionDelta.x * CAMERA_MOUSE_MOVE_SENSITIVITY, rotateAroundTarget);
- CameraPitch(camera, -mousePositionDelta.y * CAMERA_MOUSE_MOVE_SENSITIVITY, lockView, rotateAroundTarget, rotateUp);
+ // Camera rotation
+ if (IsKeyDown(KEY_DOWN)) CameraPitch(camera, -CAMERA_ROTATION_SPEED, lockView, rotateAroundTarget, rotateUp);
+ if (IsKeyDown(KEY_UP)) CameraPitch(camera, CAMERA_ROTATION_SPEED, lockView, rotateAroundTarget, rotateUp);
+ if (IsKeyDown(KEY_RIGHT)) CameraYaw(camera, -CAMERA_ROTATION_SPEED, rotateAroundTarget);
+ if (IsKeyDown(KEY_LEFT)) CameraYaw(camera, CAMERA_ROTATION_SPEED, rotateAroundTarget);
+ if (IsKeyDown(KEY_Q)) CameraRoll(camera, -CAMERA_ROTATION_SPEED);
+ if (IsKeyDown(KEY_E)) CameraRoll(camera, CAMERA_ROTATION_SPEED);
+
+ CameraYaw(camera, -mousePositionDelta.x * CAMERA_MOUSE_MOVE_SENSITIVITY, rotateAroundTarget);
+ CameraPitch(camera, -mousePositionDelta.y * CAMERA_MOUSE_MOVE_SENSITIVITY, lockView, rotateAroundTarget, rotateUp);
// Camera movement
if (IsKeyDown(KEY_W)) CameraMoveForward(camera, CAMERA_MOVE_SPEED, moveInWorldPlane);