local screenWidth = 800
local screenHeight = 450

rl.SetConfigFlags(rl.FLAG_VSYNC_HINT)
rl.InitWindow(screenWidth, screenHeight, "raylua [models] example - geometric shapes")

local camera = rl.new("Camera", {
  position = rl.new("Vector3", 0, 10, 10),
  target = rl.new("Vector3", 0, 0, 0),
  up = rl.new("Vector3", 0, 1, 0),
  fovy = 45,
  type = rl.CAMERA_PERSPECTIVE
})

while not rl.WindowShouldClose() do
  rl.BeginDrawing()
  rl.ClearBackground(rl.RAYWHITE)

  rl.BeginMode3D(camera)

  -- Ideally, you should cache Vector3 structures to avoid reallocating them
  -- over and over. For readability here, they are inlined to the code.

  rl.DrawCube(rl.new("Vector3", -4, 0, 2), 2, 5, 2, rl.RED)
  rl.DrawCubeWires(rl.new("Vector3", -4, 0, 2), 2, 5, 2, rl.GOLD)
  rl.DrawCubeWires(rl.new("Vector3", -4, 0, -2), 3, 6, 2, rl.MAROON)

  rl.DrawSphere(rl.new("Vector3", 1, 0, -2), 1, rl.GREEN)
  rl.DrawSphereWires(rl.new("Vector3", 1, 0, 2), 2, 16, 16, rl.LIME)

  rl.DrawCylinder(rl.new("Vector3", 4, 0, -2), 1, 2, 3, 4, rl.SKYBLUE)
  rl.DrawCylinderWires(rl.new("Vector3", 4, 0, -2), 1, 2, 3, 4, rl.DARKBLUE)
  rl.DrawCylinderWires(rl.new("Vector3", 4.5, -1, 2), 1, 1, 2, 6, rl.BROWN)

  rl.DrawCylinder(rl.new("Vector3", 1, 0, -4), 0, 1.5, 3, 8, rl.GOLD)
  rl.DrawCylinderWires(rl.new("Vector3", 1, 0, -4), 0, 1.5, 3, 8, rl.PINK)

  rl.DrawGrid(10, 1)

  rl.EndMode3D()

  rl.DrawFPS(10, 10)
  rl.EndDrawing()
end

rl.CloseWindow()
