forked from deltaphc/raylib-rs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path3d_camera_first_person.rs
85 lines (73 loc) · 2.47 KB
/
3d_camera_first_person.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
use arr_macro::arr;
use rand::prelude::*;
use raylib::prelude::*;
const WINDOW_WIDTH: i32 = 1280;
const WINDOW_HEIGHT: i32 = 720;
struct Column {
height: f32,
position: Vector3,
color: Color,
}
impl Column {
fn create_random() -> Column {
let mut rng = rand::thread_rng();
let height: f32 = rng.gen_range(1.0, 12.0);
let position = Vector3::new(
rng.gen_range(-15.0, 15.0),
height / 2.0,
rng.gen_range(-15.0, 15.0),
);
let color = Color::new(rng.gen_range(20, 255), rng.gen_range(10, 55), 30, 255);
Column {
height,
position,
color,
}
}
}
fn main() {
let (mut rl, thread) = raylib::init()
.size(WINDOW_WIDTH, WINDOW_HEIGHT)
.title("Hello, world!")
.build();
let mut camera = Camera3D::perspective(
Vector3::new(4.0, 2.0, 4.0),
Vector3::new(0.0, 1.8, 0.0),
Vector3::new(0.0, 1.0, 0.0),
60.0,
);
let columns: [Column; 20] = arr![Column::create_random(); 20];
rl.set_camera_mode(&camera, CameraMode::CAMERA_FIRST_PERSON);
rl.set_target_fps(60);
while !rl.window_should_close() {
rl.update_camera(&mut camera);
let mut d = rl.begin_drawing(&thread);
d.clear_background(Color::DARKGREEN);
{
let mut d2 = d.begin_mode3D(camera);
d2.draw_plane(
Vector3::new(0.0, 0.0, 0.0),
Vector2::new(32.0, 32.0),
Color::LIGHTGRAY,
);
d2.draw_cube(Vector3::new(-16.0, 2.5, 0.0), 1.0, 5.0, 32.0, Color::BLUE);
d2.draw_cube(Vector3::new(16.0, 2.5, 0.0), 1.0, 5.0, 32.0, Color::LIME);
d2.draw_cube(Vector3::new(0.0, 2.5, 16.0), 32.0, 5.0, 1.0, Color::GOLD);
for column in columns.iter() {
d2.draw_cube(column.position, 2.0, column.height, 2.0, column.color);
d2.draw_cube_wires(column.position, 2.0, column.height, 2.0, Color::MAROON);
}
}
d.draw_rectangle(10, 10, 220, 70, Color::SKYBLUE);
d.draw_rectangle_lines(10, 10, 220, 70, Color::BLUE);
d.draw_text(
"First person camera default controls:",
20,
20,
10,
Color::BLACK,
);
d.draw_text("- Move with keys: W, A, S, D", 40, 40, 10, Color::DARKGRAY);
d.draw_text("- Mouse move to look around", 40, 60, 10, Color::DARKGRAY);
}
}