commit
820f25f1bc
3 changed files with 1865 additions and 0 deletions
11
examples/core/2d_camera_mouse_zoom/go.mod
Normal file
11
examples/core/2d_camera_mouse_zoom/go.mod
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
module example
|
||||||
|
|
||||||
|
go 1.19
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/gen2brain/raylib-go/raygui v0.0.0-20221122151443-e8a384ed1346
|
||||||
|
github.com/gen2brain/raylib-go/raylib v0.0.0-20221122155035-fe6d2c0ed32a
|
||||||
|
)
|
||||||
|
|
||||||
|
replace github.com/gen2brain/raylib-go/raylib => ../../../raylib
|
||||||
|
replace github.com/gen2brain/raylib-go/raygui => ../../../raygui
|
105
examples/core/2d_camera_mouse_zoom/main.go
Normal file
105
examples/core/2d_camera_mouse_zoom/main.go
Normal file
|
@ -0,0 +1,105 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gen2brain/raylib-go/raylib"
|
||||||
|
)
|
||||||
|
|
||||||
|
/*******************************************************************************************
|
||||||
|
*
|
||||||
|
* raylib [core] example - 2d camera mouse zoom
|
||||||
|
*
|
||||||
|
* Example originally created with raylib 4.2, last time updated with raylib 4.2
|
||||||
|
*
|
||||||
|
* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
|
||||||
|
* BSD-like license that allows static linking with closed source software
|
||||||
|
*
|
||||||
|
* Copyright (c) 2022 Jeffery Myers (@JeffM2501)
|
||||||
|
*
|
||||||
|
********************************************************************************************/
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------------
|
||||||
|
// Program main entry point
|
||||||
|
//------------------------------------------------------------------------------------
|
||||||
|
func main() {
|
||||||
|
// Initialization
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
const (
|
||||||
|
screenWidth = 800
|
||||||
|
screenHeight = 450
|
||||||
|
)
|
||||||
|
|
||||||
|
rl.InitWindow(screenWidth, screenHeight, "raylib [core] example - 2d camera mouse zoom")
|
||||||
|
|
||||||
|
var camera rl.Camera2D
|
||||||
|
camera.Zoom = 1.0
|
||||||
|
|
||||||
|
rl.SetTargetFPS(60) // Set our game to run at 60 frames-per-second
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Main game loop
|
||||||
|
for !rl.WindowShouldClose() { // Detect window close button or ESC key
|
||||||
|
// Update
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
// Translate based on mouse right click
|
||||||
|
if rl.IsMouseButtonDown(rl.MouseRightButton) {
|
||||||
|
delta := rl.GetMouseDelta()
|
||||||
|
delta = rl.Vector2Scale(delta, -1.0/camera.Zoom)
|
||||||
|
|
||||||
|
camera.Target = rl.Vector2Add(camera.Target, delta)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Zoom based on mouse wheel
|
||||||
|
wheel := rl.GetMouseWheelMove()
|
||||||
|
if wheel != 0 {
|
||||||
|
// Get the world point that is under the mouse
|
||||||
|
mouseWorldPos := rl.GetScreenToWorld2D(rl.GetMousePosition(), camera)
|
||||||
|
|
||||||
|
// Set the offset to where the mouse is
|
||||||
|
camera.Offset = rl.GetMousePosition()
|
||||||
|
|
||||||
|
// Set the target to match, so that the camera maps the world space point
|
||||||
|
// under the cursor to the screen space point under the cursor at any zoom
|
||||||
|
camera.Target = mouseWorldPos
|
||||||
|
|
||||||
|
// Zoom increment
|
||||||
|
const zoomIncrement float32 = 0.125
|
||||||
|
|
||||||
|
camera.Zoom += (wheel * zoomIncrement)
|
||||||
|
if camera.Zoom < zoomIncrement {
|
||||||
|
camera.Zoom = zoomIncrement
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Draw
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
rl.BeginDrawing()
|
||||||
|
rl.ClearBackground(rl.Black)
|
||||||
|
|
||||||
|
rl.BeginMode2D(camera)
|
||||||
|
|
||||||
|
// Draw the 3d grid, rotated 90 degrees and centered around 0,0
|
||||||
|
// just so we have something in the XY plane
|
||||||
|
rl.PushMatrix()
|
||||||
|
rl.Translatef(0, 25*50, 0)
|
||||||
|
rl.Rotatef(90, 1, 0, 0)
|
||||||
|
rl.DrawGrid(100, 50)
|
||||||
|
rl.PopMatrix()
|
||||||
|
|
||||||
|
// Draw a reference circle
|
||||||
|
rl.DrawCircle(100, 100, 50, rl.Yellow)
|
||||||
|
|
||||||
|
rl.EndMode2D()
|
||||||
|
|
||||||
|
rl.DrawText("Mouse right button drag to move, mouse wheel to zoom", 10, 10, 20, rl.White)
|
||||||
|
|
||||||
|
rl.EndDrawing()
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
}
|
||||||
|
|
||||||
|
// De-Initialization
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
rl.CloseWindow() // Close window and OpenGL context
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
}
|
1749
raylib/rlgl.go
1749
raylib/rlgl.go
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue