From a75ca14eadd3b5e5d8e990975fb0afcbf57cb8ce Mon Sep 17 00:00:00 2001 From: Mark Date: Mon, 1 Jan 2024 16:43:29 -0800 Subject: [PATCH] More cleanup --- Cargo.lock | 11 +++++++ Cargo.toml | 2 ++ crates/ui/Cargo.toml | 10 ++++++ crates/ui/src/lib.rs | 3 ++ crates/ui/src/radar.rs | 51 +++++++++++++++++++++++++++++ src/{game => }/camera.rs | 0 src/{game => }/game.rs | 69 +++------------------------------------- src/game/mod.rs | 6 ---- src/main.rs | 1 + 9 files changed, 83 insertions(+), 70 deletions(-) create mode 100644 crates/ui/Cargo.toml create mode 100644 crates/ui/src/lib.rs create mode 100644 crates/ui/src/radar.rs rename src/{game => }/camera.rs (100%) rename src/{game => }/game.rs (77%) delete mode 100644 src/game/mod.rs diff --git a/Cargo.lock b/Cargo.lock index 4be0554..9513f45 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -585,6 +585,7 @@ dependencies = [ "galactica-gameobject", "galactica-render", "galactica-shipbehavior", + "galactica-ui", "galactica-world", "image", "nalgebra", @@ -650,6 +651,16 @@ dependencies = [ "galactica-world", ] +[[package]] +name = "galactica-ui" +version = "0.0.0" +dependencies = [ + "cgmath", + "galactica-content", + "galactica-render", + "galactica-world", +] + [[package]] name = "galactica-world" version = "0.0.0" diff --git a/Cargo.toml b/Cargo.toml index 2ada59f..953fc8c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,6 +35,7 @@ members = [ "crates/world", "crates/shipbehavior", "crates/gameobject", + "crates/ui", ] @@ -46,6 +47,7 @@ galactica-constants = { path = "crates/constants" } galactica-world = { path = "crates/world" } galactica-shipbehavior = { path = "crates/shipbehavior" } galactica-gameobject = { path = "crates/gameobject" } +galactica-ui = { path = "crates/ui" } # Files image = { version = "0.24", features = ["png"] } diff --git a/crates/ui/Cargo.toml b/crates/ui/Cargo.toml new file mode 100644 index 0000000..5862151 --- /dev/null +++ b/crates/ui/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "galactica-ui" +version = "0.0.0" +edition = "2021" + +[dependencies] +galactica-content = { path = "../content" } +galactica-world = { path = "../world" } +galactica-render = { path = "../render" } +cgmath = "0.18.0" diff --git a/crates/ui/src/lib.rs b/crates/ui/src/lib.rs new file mode 100644 index 0000000..2a88cdf --- /dev/null +++ b/crates/ui/src/lib.rs @@ -0,0 +1,3 @@ +mod radar; + +pub use radar::build_radar; diff --git a/crates/ui/src/radar.rs b/crates/ui/src/radar.rs new file mode 100644 index 0000000..f2e8517 --- /dev/null +++ b/crates/ui/src/radar.rs @@ -0,0 +1,51 @@ +use cgmath::{Deg, InnerSpace, Point2}; +use galactica_content as content; +use galactica_render::{AnchoredUiPosition, UiSprite}; +use galactica_world::{util, ShipPhysicsHandle, World}; + +pub fn build_radar( + player: &ShipPhysicsHandle, + physics: &World, + ct: &content::Content, +) -> Vec { + let mut out = Vec::new(); + + let radar_range = 2000.0; + let radar_size = 300.0; + + out.push(UiSprite { + texture: ct.get_texture_handle("ui::radar"), + pos: AnchoredUiPosition::NorthWest(Point2 { x: 10.0, y: -10.0 }), + dimensions: Point2 { + x: radar_size, + y: radar_size, + }, + angle: Deg(0.0), + }); + + let (_, pr) = physics.get_ship_body(player).unwrap(); + let pr = util::rigidbody_position(pr); + for (s, r) in physics.iter_ship_body() { + if s.physics_handle == *player { + continue; + } + let r = util::rigidbody_position(r); + let d = r - pr; + let m = d.magnitude() / radar_range; + if m < 0.8 { + out.push(UiSprite { + texture: ct.get_texture_handle("ui::blip"), + pos: AnchoredUiPosition::NorthWest( + Point2 { + x: radar_size / 2.0 + 10.0, + y: radar_size / -2.0 - 10.0, + } + (d / radar_range * 150.0), + ), + dimensions: Point2 { x: 1.0, y: 1.0 } * 5.0f32.min((0.8 - m) * 50.0), + angle: Deg(0.0), + }); + } + } + + return out; +} diff --git a/src/game/camera.rs b/src/camera.rs similarity index 100% rename from src/game/camera.rs rename to src/camera.rs diff --git a/src/game/game.rs b/src/game.rs similarity index 77% rename from src/game/game.rs rename to src/game.rs index e14f78e..83d2b12 100644 --- a/src/game/game.rs +++ b/src/game.rs @@ -1,72 +1,17 @@ -use cgmath::{Deg, InnerSpace, Point2}; +use cgmath::Point2; use content::SystemHandle; use std::time::Instant; use winit::event::{ElementState, MouseButton, MouseScrollDelta, TouchPhase, VirtualKeyCode}; -use super::camera::Camera; +use crate::camera::Camera; use crate::{content, inputstatus::InputStatus}; use galactica_constants; use galactica_gameobject as object; -use galactica_render::{AnchoredUiPosition, ObjectSprite, UiSprite}; +use galactica_render::{ObjectSprite, UiSprite}; use galactica_shipbehavior::{behavior, ShipBehavior}; +use galactica_ui as ui; use galactica_world::{util, ShipPhysicsHandle, World}; -struct Ui {} - -impl Ui { - fn new() -> Self { - Self {} - } - - fn build_radar( - &self, - player: &ShipPhysicsHandle, - physics: &World, - ct: &content::Content, - ) -> Vec { - let mut out = Vec::new(); - - let radar_range = 2000.0; - let radar_size = 300.0; - - out.push(UiSprite { - texture: ct.get_texture_handle("ui::radar"), - pos: AnchoredUiPosition::NorthWest(Point2 { x: 10.0, y: -10.0 }), - dimensions: Point2 { - x: radar_size, - y: radar_size, - }, - angle: Deg(0.0), - }); - - let (_, pr) = physics.get_ship_body(player).unwrap(); - let pr = util::rigidbody_position(pr); - for (s, r) in physics.iter_ship_body() { - if s.physics_handle == *player { - continue; - } - let r = util::rigidbody_position(r); - let d = r - pr; - let m = d.magnitude() / radar_range; - if m < 0.8 { - out.push(UiSprite { - texture: ct.get_texture_handle("ui::blip"), - pos: AnchoredUiPosition::NorthWest( - Point2 { - x: radar_size / 2.0 + 10.0, - y: radar_size / -2.0 - 10.0, - } + (d / radar_range * 150.0), - ), - dimensions: Point2 { x: 1.0, y: 1.0 } * 5.0f32.min((0.8 - m) * 50.0), - angle: Deg(0.0), - }); - } - } - - return out; - } -} - pub struct Game { pub input: InputStatus, pub last_update: Instant, @@ -76,7 +21,6 @@ pub struct Game { paused: bool, pub time_scale: f32, - ui: Ui, physics: World, shipbehaviors: Vec>, playerbehavior: behavior::Player, @@ -151,7 +95,6 @@ impl Game { shipbehaviors, content: ct, playerbehavior: behavior::Player::new(h1), - ui: Ui::new(), } } @@ -236,8 +179,6 @@ impl Game { } pub fn get_ui_sprites(&self) -> Vec { - return self - .ui - .build_radar(&self.player, &self.physics, &self.content); + return ui::build_radar(&self.player, &self.physics, &self.content); } } diff --git a/src/game/mod.rs b/src/game/mod.rs deleted file mode 100644 index b1e95b2..0000000 --- a/src/game/mod.rs +++ /dev/null @@ -1,6 +0,0 @@ -//! This module is responsible for high-level game control logic. - -mod camera; -mod game; - -pub use game::Game; diff --git a/src/main.rs b/src/main.rs index c427b96..23a1a8d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,4 @@ +mod camera; mod game; mod inputstatus;