Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use raylib::prelude::*;
- use rand::prelude::*;
- use arr_macro::arr;
- extern crate lazy_static;
- mod lights;
- 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 generate_mesh(&self, thread: &RaylibThread) -> Mesh {
- Mesh::gen_mesh_cube(thread, 2.0, self.height, 2.0)
- }
- }
- 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];
- let mut column_meshes: Vec<Mesh> = Vec::with_capacity(20);
- for column in columns.into_iter() {
- column_meshes.push(
- column.generate_mesh(&thread)
- )
- }
- let mut column_models: Vec<Model> = Vec::with_capacity(20);
- for (index, _) in columns.into_iter().enumerate() {
- let mesh = &column_meshes[index];
- column_models.push(
- rl.load_model_from_mesh(&thread, mesh).unwrap()
- )
- }
- let mesh: Mesh = columns[0].generate_mesh(&thread);
- let model: Model = rl.load_model_from_mesh(&thread, &mesh).unwrap();
- // Borrow models vec to use in the loop
- let models = &column_models;
- 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_mode_3D(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 (index, model) in models.into_iter().enumerate() {
- let position = columns[index].position;
- let color = columns[index].color;
- d2.draw_model(&model, position, 1.0, color);
- }
- }
- 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);
- }
- }
- // Finished dev [unoptimized + debuginfo] target(s) in 0.56s
- // Running `target/debug/vicarious-raylib`
- // INFO: Initializing raylib 2.5
- // INFO: Display device initialized successfully
- // INFO: Display size: 1920 x 1080
- // INFO: Render size: 1280 x 720
- // INFO: Screen size: 1280 x 720
- // INFO: Viewport offsets: 0, 0
- // INFO: GLAD: OpenGL extensions loaded successfully
- // INFO: OpenGL 3.3 Core profile supported
- // INFO: GPU: Vendor: Intel Open Source Technology Center
- // INFO: GPU: Renderer: Mesa DRI Intel(R) UHD Graphics 620 (Kabylake GT2)
- // INFO: GPU: Version: 4.5 (Core Profile) Mesa 19.2.7
- // INFO: GPU: GLSL: 4.50
- // INFO: Number of supported extensions: 210
- // INFO: [EXTENSION] DXT compressed textures supported
- // INFO: [EXTENSION] ETC2/EAC compressed textures supported
- // INFO: [EXTENSION] Anisotropic textures filtering supported (max: 16X)
- // INFO: [TEX ID 1] Texture created successfully (1x1 - 1 mipmaps)
- // INFO: [TEX ID 1] Base white texture loaded successfully
- // INFO: [SHDR ID 1] Shader compiled successfully
- // INFO: [SHDR ID 2] Shader compiled successfully
- // INFO: [SHDR ID 3] Shader program loaded successfully
- // INFO: [SHDR ID 3] Default shader loaded successfully
- // INFO: Internal buffers initialized successfully (CPU)
- // INFO: Internal buffers uploaded successfully (GPU)
- // INFO: OpenGL default states initialized successfully
- // INFO: [TEX ID 2] Texture created successfully (128x128 - 1 mipmaps)
- // INFO: [TEX ID 2] Default font loaded successfully
- // INFO: [VAO ID 2] Mesh uploaded successfully to VRAM (GPU)
- // INFO: [VAO ID 3] Mesh uploaded successfully to VRAM (GPU)
- // INFO: [VAO ID 4] Mesh uploaded successfully to VRAM (GPU)
- // INFO: [VAO ID 5] Mesh uploaded successfully to VRAM (GPU)
- // INFO: [VAO ID 6] Mesh uploaded successfully to VRAM (GPU)
- // INFO: [VAO ID 7] Mesh uploaded successfully to VRAM (GPU)
- // INFO: [VAO ID 8] Mesh uploaded successfully to VRAM (GPU)
- // INFO: [VAO ID 9] Mesh uploaded successfully to VRAM (GPU)
- // INFO: [VAO ID 10] Mesh uploaded successfully to VRAM (GPU)
- // INFO: [VAO ID 11] Mesh uploaded successfully to VRAM (GPU)
- // INFO: [VAO ID 12] Mesh uploaded successfully to VRAM (GPU)
- // INFO: [VAO ID 13] Mesh uploaded successfully to VRAM (GPU)
- // INFO: [VAO ID 14] Mesh uploaded successfully to VRAM (GPU)
- // INFO: [VAO ID 15] Mesh uploaded successfully to VRAM (GPU)
- // INFO: [VAO ID 16] Mesh uploaded successfully to VRAM (GPU)
- // INFO: [VAO ID 17] Mesh uploaded successfully to VRAM (GPU)
- // INFO: [VAO ID 18] Mesh uploaded successfully to VRAM (GPU)
- // INFO: [VAO ID 19] Mesh uploaded successfully to VRAM (GPU)
- // INFO: [VAO ID 20] Mesh uploaded successfully to VRAM (GPU)
- // INFO: [VAO ID 21] Mesh uploaded successfully to VRAM (GPU)
- // INFO: [VAO ID 22] Mesh uploaded successfully to VRAM (GPU)
- // INFO: Target time per frame: 16.667 milliseconds
- // INFO: [VAO ID 22] Unloaded model data from VRAM (GPU)
- // INFO: Unloaded model data from RAM and VRAM
- // double free or corruption (!prev)
- // fish: “cargo run” terminated by signal SIGABRT (Abort)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement