From fcacd91e3a0411497c62d02ce2a181d37536c9e5 Mon Sep 17 00:00:00 2001 From: Thinkofdeath Date: Fri, 25 Sep 2015 15:20:55 +0100 Subject: [PATCH] Clean up --- src/protocol/mojang.rs | 2 +- src/render/atlas.rs | 4 ---- src/render/mod.rs | 3 +-- src/render/ui.rs | 8 -------- src/screen/mod.rs | 7 ++++--- src/screen/server_list.rs | 40 +++++++++++++++++++++++++++++---------- src/types/bit/map.rs | 10 +++++++++- src/types/blockpos.rs | 1 + src/ui/mod.rs | 8 ++++---- 9 files changed, 50 insertions(+), 33 deletions(-) diff --git a/src/protocol/mojang.rs b/src/protocol/mojang.rs index 8798f85..542de20 100644 --- a/src/protocol/mojang.rs +++ b/src/protocol/mojang.rs @@ -38,7 +38,7 @@ impl Profile { if negative { twos_compliment(&mut hash); } - let hash_str = hash.iter().map(|b| format!("{:02X}", b)).collect::>().connect(""); + let hash_str = hash.iter().map(|b| format!("{:02X}", b)).collect::>().join(""); let hash_val = hash_str.trim_matches('0'); let hash_str = if negative { "-".to_owned() + &hash_val[..] diff --git a/src/render/atlas.rs b/src/render/atlas.rs index aed8096..8e05bfe 100644 --- a/src/render/atlas.rs +++ b/src/render/atlas.rs @@ -13,8 +13,6 @@ // limitations under the License. pub struct Atlas { - width: usize, - height: usize, free_space: Vec, } @@ -29,8 +27,6 @@ pub struct Rect { impl Atlas { pub fn new(width: usize, height: usize) -> Atlas { let mut a = Atlas { - width: width, - height: height, free_space: Vec::new(), }; a.free_space.push(Rect{ diff --git a/src/render/mod.rs b/src/render/mod.rs index 80cc2ca..a6d7bef 100644 --- a/src/render/mod.rs +++ b/src/render/mod.rs @@ -32,7 +32,6 @@ pub struct Renderer { resource_version: usize, pub resources: Arc>, textures: Arc>, - glsl: glsl::Registry, pub ui: ui::UIState, gl_texture: gl::Texture, @@ -62,7 +61,6 @@ impl Renderer { Renderer { resource_version: version, textures: textures, - glsl: greg, ui: ui, resources: res, gl_texture: tex, @@ -476,6 +474,7 @@ impl TextureManager { } } +#[allow(dead_code)] struct AnimatedTexture { frames: Vec, data: Vec, diff --git a/src/render/ui.rs b/src/render/ui.rs index bdbbc47..7a6aef8 100644 --- a/src/render/ui.rs +++ b/src/render/ui.rs @@ -41,10 +41,6 @@ pub struct UIState { max_index: usize, shader: gl::Program, - s_position: gl::Attribute, - s_texture_info: gl::Attribute, - s_texture_offset: gl::Attribute, - s_color: gl::Attribute, s_texture: gl::Uniform, s_screensize: gl::Uniform, @@ -113,10 +109,6 @@ impl UIState { max_index: 0, shader: shader, - s_position: s_position, - s_texture_info: s_texture_info, - s_texture_offset: s_texture_offset, - s_color: s_color, s_texture: s_texture, s_screensize: s_screensize, diff --git a/src/screen/mod.rs b/src/screen/mod.rs index 91a8d10..801b207 100644 --- a/src/screen/mod.rs +++ b/src/screen/mod.rs @@ -7,10 +7,11 @@ use std::rc::Rc; use render; use ui; +#[allow(unused_variables)] pub trait Screen { // Called once - fn init(&mut self, renderer: &mut render::Renderer, ui_container: &mut ui::Container); - fn deinit(&mut self, renderer: &mut render::Renderer, ui_container: &mut ui::Container); + fn init(&mut self, _renderer: &mut render::Renderer, ui_container: &mut ui::Container) {} + fn deinit(&mut self, _renderer: &mut render::Renderer, ui_container: &mut ui::Container) {} // May be called multiple times fn on_active(&mut self, renderer: &mut render::Renderer, ui_container: &mut ui::Container); @@ -150,7 +151,7 @@ pub fn button_action(ui_container: &mut ui::Container, click: Option ) { let batch = ui_container.get_mut(&btn); - batch.add_hover_func(Rc::new(move |over, screen_sys, renderer, ui_container| { + batch.add_hover_func(Rc::new(move |over, _, renderer, ui_container| { let texture = render::Renderer::get_texture(renderer.get_textures_ref(), "gui/widgets").relative( 0.0, (if over { 86.0 } else { 66.0 }) / 256.0, 200.0 / 256.0, 20.0 / 256.0 ); diff --git a/src/screen/server_list.rs b/src/screen/server_list.rs index 3dc65f4..07f7878 100644 --- a/src/screen/server_list.rs +++ b/src/screen/server_list.rs @@ -83,6 +83,7 @@ impl ServerList { let elements = self.elements.as_mut().unwrap(); *self.needs_reload.borrow_mut() = false; { + // Clean up previous list entries and icons. let mut tex = renderer.get_textures_ref().write().unwrap(); for server in &mut elements.servers { server.collection.remove_all(ui_container); @@ -101,7 +102,9 @@ impl ServerList { let servers = servers_info.find("servers").unwrap().as_array().unwrap(); let mut offset = 0.0; + // Default icon whilst we ping the servers or if the server doesn't provide one let default_icon = render::Renderer::get_texture(renderer.get_textures_ref(), "misc/unknown_server"); + // General gui icons let icons = render::Renderer::get_texture(renderer.get_textures_ref(), "gui/icons"); for svr in servers { @@ -110,6 +113,7 @@ impl ServerList { let solid = render::Renderer::get_texture(renderer.get_textures_ref(), "steven:solid"); + // Everything is attached to this let mut back = ui::Image::new(solid, 0.0, offset * 100.0, 700.0, 100.0, 0.0, 0.0, 1.0, 1.0, 0, 0, 0); back.set_a(100); back.set_v_attach(ui::VAttach::Middle); @@ -134,48 +138,55 @@ impl ServerList { }; server.collection.add(server.back.clone()); server.update_position(); + // Make whole entry interactable { let back = ui_container.get_mut(&server.back); let back_ref = server.back.clone(); let address = address.clone(); - back.add_hover_func(Rc::new(move |over, screen_sys, renderer, ui_container| { + back.add_hover_func(Rc::new(move |over, _, _, ui_container| { let back = ui_container.get_mut(&back_ref); back.set_a(if over { 200 } else { 100 }); })); - back.add_click_func(Rc::new(move |screen_sys, renderer, ui_container| { + back.add_click_func(Rc::new(move |_, _, _| { println!("Connecting to {}", address); })); } + // Server name let mut text = ui::Text::new(renderer, &name, 100.0, 5.0, 255, 255, 255); text.set_parent(&server.back); server.collection.add(ui_container.add(text)); + // Server icon let mut icon = ui::Image::new(default_icon.clone(), 5.0, 5.0, 90.0, 90.0, 0.0, 0.0, 1.0, 1.0, 255, 255, 255); icon.set_parent(&server.back); server.icon = server.collection.add(ui_container.add(icon)); + // Ping indicator let mut ping = ui::Image::new(icons.clone(), 5.0, 5.0, 20.0, 16.0, 0.0, 56.0/256.0, 10.0/256.0, 8.0/256.0, 255, 255, 255); ping.set_h_attach(ui::HAttach::Right); ping.set_parent(&server.back); server.ping = server.collection.add(ui_container.add(ping)); + // Player count let mut players = ui::Text::new(renderer, "???", 30.0, 5.0, 255, 255, 255); players.set_h_attach(ui::HAttach::Right); players.set_parent(&server.back); server.players = server.collection.add(ui_container.add(players)); + // Server's message of the day let mut motd = ui::Formatted::with_width_limit(renderer, Component::Text(TextComponent::new("Connecting...")), 100.0, 23.0, 700.0 - (90.0 + 10.0 + 5.0)); motd.set_parent(&server.back); server.motd = server.collection.add(ui_container.add(motd)); + // Version information let mut version = ui::Formatted::with_width_limit(renderer, Component::Text(TextComponent::new("")), 100.0, 5.0, 700.0 - (90.0 + 10.0 + 5.0)); version.set_v_attach(ui::VAttach::Bottom); version.set_parent(&server.back); server.version = server.collection.add(ui_container.add(version)); - + // Delete entry button let (mut del, mut txt) = super::new_button_text(renderer, "X", 0.0, 0.0, 25.0, 25.0); del.set_v_attach(ui::VAttach::Bottom); del.set_h_attach(ui::HAttach::Right); @@ -187,6 +198,7 @@ impl ServerList { server.collection.add(re); server.collection.add(tre); + // Edit entry button let (mut edit, mut txt) = super::new_button_text(renderer, "E", 25.0, 0.0, 25.0, 25.0); edit.set_v_attach(ui::VAttach::Bottom); edit.set_h_attach(ui::HAttach::Right); @@ -201,6 +213,7 @@ impl ServerList { elements.servers.push(server); offset += 1.0; + // Don't block the main thread whilst pinging the server thread::spawn(move || { match protocol::Conn::new(&address).and_then(|conn| conn.do_status()) { Ok(res) => { @@ -247,13 +260,11 @@ impl ServerList { } impl super::Screen for ServerList { - fn init(&mut self, renderer: &mut render::Renderer, ui_container: &mut ui::Container) {} - fn deinit(&mut self, renderer: &mut render::Renderer, ui_container: &mut ui::Container) {} - fn on_active(&mut self, renderer: &mut render::Renderer, ui_container: &mut ui::Container) { let logo = ui::logo::Logo::new(renderer.resources.clone(), renderer, ui_container); let mut elements = ui::Collection::new(); + // Refresh the server list let (mut refresh, mut txt) = super::new_button_text(renderer, "Refresh", 300.0, -50.0-15.0, 100.0, 30.0); refresh.set_v_attach(ui::VAttach::Middle); refresh.set_h_attach(ui::HAttach::Center); @@ -261,12 +272,13 @@ impl super::Screen for ServerList { txt.set_parent(&re); let tre = ui_container.add(txt); let nr = self.needs_reload.clone(); - super::button_action(ui_container, re.clone(), Some(tre.clone()), Some(Rc::new(move |screen_sys, renderer, ui_container| { + super::button_action(ui_container, re.clone(), Some(tre.clone()), Some(Rc::new(move |_, _, _| { *nr.borrow_mut() = true; }))); elements.add(re); elements.add(tre); + // Add a new server to the list let (mut add, mut txt) = super::new_button_text(renderer, "Add", 200.0, -50.0-15.0, 100.0, 30.0); add.set_v_attach(ui::VAttach::Middle); add.set_h_attach(ui::HAttach::Center); @@ -277,6 +289,7 @@ impl super::Screen for ServerList { elements.add(re); elements.add(tre); + // Options menu let mut options = super::new_button(renderer, 5.0, 25.0, 40.0, 40.0); options.set_v_attach(ui::VAttach::Bottom); options.set_h_attach(ui::HAttach::Right); @@ -288,12 +301,14 @@ impl super::Screen for ServerList { super::button_action(ui_container, re.clone(), None, None); elements.add(re); elements.add(ui_container.add(cog)); - + + // Disclaimer let mut warn = ui::Text::new(renderer, "Not affiliated with Mojang/Minecraft", 5.0, 5.0, 255, 200, 200); warn.set_v_attach(ui::VAttach::Bottom); warn.set_h_attach(ui::HAttach::Right); elements.add(ui_container.add(warn)); + // If we are kicked from a server display the reason if let Some(ref disconnect_reason) = self.disconnect_reason { let mut dis_msg = ui::Text::new(renderer, "Disconnected", 0.0, 32.0, 255, 0, 0); dis_msg.set_h_attach(ui::HAttach::Center); @@ -320,7 +335,8 @@ impl super::Screen for ServerList { }); self.reload_server_list(renderer, ui_container); } - fn on_deactive(&mut self, renderer: &mut render::Renderer, ui_container: &mut ui::Container) { + fn on_deactive(&mut self, _renderer: &mut render::Renderer, ui_container: &mut ui::Container) { + // Clean up { let elements = self.elements.as_mut().unwrap(); elements.logo.remove(ui_container); @@ -342,6 +358,7 @@ impl super::Screen for ServerList { elements.logo.tick(renderer, ui_container); for s in &mut elements.servers { + // Animate the entries { let back = ui_container.get_mut(&s.back); let dy = s.y - back.get_y(); @@ -353,6 +370,8 @@ impl super::Screen for ServerList { } } + // Keep checking to see if the server has finished being + // pinged if !s.done_ping { match s.recv.try_recv() { Ok(res) => { @@ -363,6 +382,7 @@ impl super::Screen for ServerList { } { let ping = ui_container.get_mut(&s.ping); + // Selects the icon for the given ping range let y = match res.ping.num_milliseconds() { _x @ 0 ... 75 => 16.0 / 256.0, _x @ 76 ... 150 => 24.0 / 256.0, @@ -418,7 +438,7 @@ impl super::Screen for ServerList { } } - fn on_scroll(&mut self, x: f64, y: f64) { + fn on_scroll(&mut self, _: f64, y: f64) { let elements = self.elements.as_mut().unwrap(); if elements.servers.is_empty() { return; diff --git a/src/types/bit/map.rs b/src/types/bit/map.rs index 8d289c0..b1b9e05 100644 --- a/src/types/bit/map.rs +++ b/src/types/bit/map.rs @@ -60,6 +60,14 @@ impl Map { map } + pub fn resize(self, size: usize) -> Map { + let mut n = Map::new(self.length, size); + for i in 0 .. self.length { + n.set(i, self.get(i)); + } + n + } + pub fn set(&mut self, i: usize, val: usize) { let i = i * self.bit_size; let pos = i / 64; @@ -74,7 +82,7 @@ impl Map { } } - pub fn get(&mut self, i: usize) -> usize { + pub fn get(&self, i: usize) -> usize { let i = i * self.bit_size; let pos = i / 64; let mask = (1 << self.bit_size) - 1; diff --git a/src/types/blockpos.rs b/src/types/blockpos.rs index 7e36c55..cc38604 100644 --- a/src/types/blockpos.rs +++ b/src/types/blockpos.rs @@ -24,6 +24,7 @@ use self::byteorder::{BigEndian, WriteBytesExt, ReadBytesExt}; pub struct Position(u64); impl Position { + #[allow(dead_code)] fn new(x: i32, y: i32, z: i32) -> Position { Position( (((x as u64) & 0x3FFFFFF) << 38) | diff --git a/src/ui/mod.rs b/src/ui/mod.rs index 1eeccee..975bdcc 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -590,9 +590,9 @@ impl Image { }) } - fn update(&mut self, renderer: &mut render::Renderer) {} + fn update(&mut self, _: &mut render::Renderer) {} - fn draw(&mut self, renderer: &mut render::Renderer, r: &Region, width: f64, height: f64, delta: f64) -> &Vec { + fn draw(&mut self, renderer: &mut render::Renderer, r: &Region, width: f64, height: f64, _: f64) -> &Vec { if self.dirty { self.dirty = false; self.texture = renderer.check_texture(self.texture.clone()); @@ -681,7 +681,7 @@ impl Batch { }) } - fn update(&mut self, renderer: &mut render::Renderer) {} + fn update(&mut self, _: &mut render::Renderer) {} fn draw(&mut self, renderer: &mut render::Renderer, r: &Region, width: f64, height: f64, delta: f64) -> &Vec { if self.dirty { @@ -788,7 +788,7 @@ impl Text { self.width = renderer.ui.size_of_string(&self.val); } - fn draw(&mut self, renderer: &mut render::Renderer, r: &Region, width: f64, height: f64, delta: f64) -> &Vec { + fn draw(&mut self, renderer: &mut render::Renderer, r: &Region, width: f64, height: f64, _: f64) -> &Vec { if self.dirty { self.dirty = false; let sx = r.w / self.width;