diff options
| author | Arne Dußin | 2021-01-12 09:30:53 +0100 |
|---|---|---|
| committer | Arne Dußin | 2021-01-12 09:31:21 +0100 |
| commit | b58e965327deef14d6414a912bb6698c6f745ce9 (patch) | |
| tree | 053fcad42862f49cf4ff8d2c245d61cceda055eb /src/main.rs | |
| parent | b1179849c28e50c39ac3c94af9dda86ee24beca0 (diff) | |
| download | graf_karto-b58e965327deef14d6414a912bb6698c6f745ce9.tar.gz graf_karto-b58e965327deef14d6414a912bb6698c6f745ce9.zip | |
Change to client-server structure
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 154 |
1 files changed, 0 insertions, 154 deletions
diff --git a/src/main.rs b/src/main.rs deleted file mode 100644 index 4d6f4ba..0000000 --- a/src/main.rs +++ /dev/null @@ -1,154 +0,0 @@ -//! # Graf Karto cartographer -//! -//! ### What is it exactly -//! Graf Karto is a table top role playing game (TTRPG) map creation tool that is optimised for real -//! time map interaction. -//! -//! ### Motivation -//! While there are certainly many TTRPG map creation tools for single user and multi user available -//! online and on the market, we felt that most of them lack features or are to unwieldy to seriously -//! consider for real time dungeon drawing, say for instance when drawing a map for an old school -//! revival style game. This is why Graf Karto is optimised for speed above pretty graphical features. -//! The aim is for the user not to have to think much about how they are going to achieve what they are -//! doing and how they are going to make it pretty, but should just be able to *do* it, to have time to -//! worry about other things. This does not mean that all maps created should visually be equivalent to -//! a steaming pile of hot garbage, but if the visuals should try to get in the way, usability and speed -//! takes precedence. - -#![allow(dead_code)] -#![warn(missing_docs)] - -#[macro_use] -extern crate log; - -pub mod button; -pub mod cli; -pub mod colours; -pub mod config; -pub mod editor; -pub mod grid; -pub mod gui; -pub mod map; -pub mod math; -pub mod snapping; -pub mod svg; -pub mod tool; -pub mod transform; -pub mod transformable; - -use cli::CLI; -use config::Config; -use editor::Editor; -use float_cmp::F64Margin; -use gui::{DimensionIndicator, ToolSidebar}; -use raylib::prelude::*; -use snapping::Snapper; -use std::ffi::CString; -use std::io; -use transform::Transform; - -/// Location of the file containing the style used for the raylib user interface. -pub const GUI_STYLE: &str = "assets/style/cyber.rgs"; -/// Location of the graf karto configuration options file. -pub const CONFIG_FILE: &str = "config.ron"; - -/// The acceptable error that is used throughout the project for two floats to be considered equal. -/// If it is set too low, the editor might not work properly, if set too high, the granularity may -/// become too low for certain purposes. -pub const FLOAT_MARGIN: F64Margin = F64Margin { - epsilon: 10000. * f64::EPSILON, - ulps: 0, -}; - -fn main() { - pretty_env_logger::init(); - - let (mut rl, thread) = raylib::init().resizable().title("Hello there!").build(); - rl.set_target_fps(120); - rl.set_exit_key(None); - - // Load the configuration file, if available. - let config = match Config::from_file(CONFIG_FILE) { - Ok(config) => config, - Err(err) => { - /* Create a default config file if it doesn't exist, otherwise leave the incorrectly - * formatted/corrupted or otherwise unreadable file alone. - */ - let config = Config::default(); - if err.kind() == io::ErrorKind::NotFound { - warn!("Could not find a configuration file. Creating default."); - config - .write_file(CONFIG_FILE) - .expect("Could not write config file."); - } else { - error!( - "Could not read configuration file: {}\nUsing defaults for this run.", - err - ); - } - - config - } - }; - - // Load the preferred gui style - rl.gui_load_style(Some( - &CString::new(GUI_STYLE).expect("Could not create C string from style file name"), - )); - - let mut editor = Editor::new(&mut rl, &thread, config); - let mut dimension_indicator = DimensionIndicator::new(); - let tool_sidebar = ToolSidebar::new(&mut rl, &thread); - let mut snapper = Snapper::default(); - let mut cli = CLI::new(); - - let mut transform = Transform::new(); - let mut last_mouse_pos = rl.get_mouse_position(); - while !rl.window_should_close() { - let screen_width = rl.get_screen_width(); - let screen_height = rl.get_screen_height(); - - // Move the canvas together with the mouse - if rl.is_mouse_button_down(MouseButton::MOUSE_MIDDLE_BUTTON) { - transform.move_by_px(&(rl.get_mouse_position() - last_mouse_pos).into()); - } - // Update the last mouse position - last_mouse_pos = rl.get_mouse_position(); - - let mouse_wheel_move = rl.get_mouse_wheel_move(); - if mouse_wheel_move != 0 { - // Zoom in for positive and zoom out for negative mouse wheel rotations. - let scale_factor = if mouse_wheel_move > 0 { 1.2 } else { 1. / 1.2 }; - transform.try_zoom( - &rl.get_mouse_position().into(), - mouse_wheel_move.abs() as f64 * scale_factor, - ); - } - - cli.update(&mut rl, &mut editor); - dimension_indicator.update(editor.map_mut(), &mut rl); - snapper.update(&mut rl, cli.active()); - editor.update( - &mut rl, - &transform, - &snapper, - ToolSidebar::mouse_captured(screen_height as u16, last_mouse_pos.into()), - cli.active(), - ); - - // Drawing section - { - let mut d = rl.begin_drawing(&thread); - d.clear_background(Color::BLACK); - grid::draw_grid(&mut d, screen_width, screen_height, &transform); - editor.map().draw(&mut d, &transform); - - editor.draw_tools(&mut d, &transform); - tool_sidebar.draw(screen_height as u16, &mut d, &mut editor); - snapper.draw(&mut d); - gui::position_indicator_draw(&mut d, last_mouse_pos.into(), &transform, &snapper); - dimension_indicator.draw(&mut d, &transform); - cli.draw(&mut d); - } - } -} |
