Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
// Calculate cube screen space position (with a little offset to be in top)
const cubePositionVector = r.Vector3(cubePosition.x, cubePosition.y + 2.5, cubePosition.z)
cubeScreenPosition = r.GetWorldToScreen(cubePositionVector, camera)
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
r.BeginDrawing()
r.ClearBackground(r.RAYWHITE)
r.BeginMode3D(camera)
r.DrawCube(cubePosition, 2, 2, 2, r.RED);
r.DrawCubeWires(cubePosition, 2, 2, 2, r.MAROON);
r.DrawGrid(10, 1);
r.EndMode3D();
r.DrawText("Enemy: 100 / 100", cubeScreenPosition.x - r.MeasureText("Enemy: 100 / 100", 20) / 2, cubeScreenPosition.y, 20, r.BLACK);
r.DrawText("Text is always on top of the cube", (screenWidth - r.MeasureText("Text is always on top of the cube", 20)) / 2, 25, 20, r.GRAY);
r.EndDrawing();
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
r.CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
var ballPosition = r.Vector2(-100, -100)
var ballColor = r.DARKBLUE
r.SetTargetFPS(60)
//---------------------------------------------------------------------------------------
// Main game loop
while (!r.WindowShouldClose()) // Detect window close button or ESC key
{
// Update
//----------------------------------------------------------------------------------
ballPosition = r.GetMousePosition()
if (r.IsMouseButtonPressed(r.MOUSE_LEFT_BUTTON)) {
ballColor = r.MAROON
}
else if (r.IsMouseButtonPressed(r.MOUSE_MIDDLE_BUTTON)) {
ballColor = r.LIME
}
else if (r.IsMouseButtonPressed(r.MOUSE_RIGHT_BUTTON)) {
ballColor = r.DARKBLUE
}
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
r.BeginDrawing()
r.ClearBackground(r.RAYWHITE)
r.DrawCircleV(ballPosition, 40, ballColor)
r.BeginDrawing();
r.ClearBackground(r.RAYWHITE);
r.BeginMode3D(camera);
r.DrawPlane(r.Vector3(), r.Vector2(32, 32), r.LIGHTGRAY); // Draw ground
r.DrawCube(r.Vector3(-16, 2.5, 0), 1, 5, 32, r.BLUE); // Draw a blue wall
r.DrawCube(r.Vector3(16, 2.5, 0), 1, 5, 32, r.LIME); // Draw a green wall
r.DrawCube(r.Vector3(0, 2.5, 16), 32, 5, 1, r.GOLD); // Draw a yellow wall
// Draw some cubes around
for (let i = 0; i < MAX_COLUMNS; i++)
{
r.DrawCube(positions[i], 2, heights[i], 2, colors[i]);
r.DrawCubeWires(positions[i], 2, heights[i], 2, r.MAROON);
}
r.EndMode3D();
r.DrawRectangle( 10, 10, 220, 70, r.Fade(r.SKYBLUE, 0.5));
r.DrawRectangleLines( 10, 10, 220, 70, r.BLUE);
r.DrawText("First person camera default controls:", 20, 20, 10, r.BLACK);
r.DrawText("- Move with keys: W, A, S, D", 40, 40, 10, r.DARKGRAY);
r.DrawText("- Mouse move to look around", 40, 60, 10, r.DARKGRAY);
r.EndDrawing();
//----------------------------------------------------------------------------------
}
// De-Initialization
r.DrawText("WAIT for 2 SECONDS...", 290, 220, 20, r.GRAY)
} break
case 'TITLE':
{
// TODO: Draw TITLE screen here!
r.DrawRectangle(0, 0, screenWidth, screenHeight, r.GREEN)
r.DrawText("TITLE SCREEN", 20, 20, 40, r.DARKGREEN)
r.DrawText("PRESS ENTER or TAP to JUMP to GAMEPLAY SCREEN", 120, 220, 20, r.DARKGREEN)
} break
case 'GAMEPLAY':
{
// TODO: Draw GAMEPLAY screen here!
r.DrawRectangle(0, 0, screenWidth, screenHeight, r.PURPLE)
r.DrawText("GAMEPLAY SCREEN", 20, 20, 40, r.MAROON)
r.DrawText("PRESS ENTER or TAP to JUMP to ENDING SCREEN", 130, 220, 20, r.MAROON)
} break
case 'ENDING':
{
// TODO: Draw ENDING screen here!
r.DrawRectangle(0, 0, screenWidth, screenHeight, r.BLUE);
r.DrawText("ENDING SCREEN", 20, 20, 40, r.DARKBLUE);
r.DrawText("PRESS ENTER or TAP to RETURN to TITLE SCREEN", 120, 220, 20, r.DARKBLUE);
} break
}
r.EndDrawing()
//----------------------------------------------------------------------------------
}
} break
case 'TITLE':
{
// TODO: Draw TITLE screen here!
r.DrawRectangle(0, 0, screenWidth, screenHeight, r.GREEN)
r.DrawText("TITLE SCREEN", 20, 20, 40, r.DARKGREEN)
r.DrawText("PRESS ENTER or TAP to JUMP to GAMEPLAY SCREEN", 120, 220, 20, r.DARKGREEN)
} break
case 'GAMEPLAY':
{
// TODO: Draw GAMEPLAY screen here!
r.DrawRectangle(0, 0, screenWidth, screenHeight, r.PURPLE)
r.DrawText("GAMEPLAY SCREEN", 20, 20, 40, r.MAROON)
r.DrawText("PRESS ENTER or TAP to JUMP to ENDING SCREEN", 130, 220, 20, r.MAROON)
} break
case 'ENDING':
{
// TODO: Draw ENDING screen here!
r.DrawRectangle(0, 0, screenWidth, screenHeight, r.BLUE);
r.DrawText("ENDING SCREEN", 20, 20, 40, r.DARKBLUE);
r.DrawText("PRESS ENTER or TAP to RETURN to TITLE SCREEN", 120, 220, 20, r.DARKBLUE);
} break
}
r.EndDrawing()
//----------------------------------------------------------------------------------
}
// Every two seconds (120 frames) a new random value is generated
if (((framesCounter/120)%2) == 1)
{
randValue = r.GetRandomValue(-8, 5)
framesCounter = 0
}
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
r.BeginDrawing()
r.ClearBackground(r.RAYWHITE)
r.DrawText("Every 2 seconds a new random value is generated:", 130, 100, 20, r.MAROON)
r.DrawText(r.FormatText("%i", randValue), 360, 180, 80, r.LIGHTGRAY)
r.EndDrawing()
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
r.CloseWindow() // Close window and OpenGL context
//--------------------------------------------------------------------------------------