From e540dfb29731556e670f09cc2cd35ac163e73549 Mon Sep 17 00:00:00 2001 From: Alula Date: Wed, 2 Dec 2020 12:47:40 +0100 Subject: [PATCH] camera improvements --- src/bmfont_renderer.rs | 4 ++++ src/player/mod.rs | 4 ++-- src/scene/game_scene.rs | 19 ++++++++++--------- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/bmfont_renderer.rs b/src/bmfont_renderer.rs index 25ea65d..9fb9319 100644 --- a/src/bmfont_renderer.rs +++ b/src/bmfont_renderer.rs @@ -49,6 +49,10 @@ impl BMFontRenderer { }) } + pub fn line_height(&self, constants: &EngineConstants) -> f32 { + self.font.line_height as f32 * constants.font_scale + } + pub fn text_width>(&self, iter: I, constants: &EngineConstants) -> f32 { let mut offset_x = 0.0; diff --git a/src/player/mod.rs b/src/player/mod.rs index 28fdd5d..fd4e4b4 100644 --- a/src/player/mod.rs +++ b/src/player/mod.rs @@ -477,12 +477,12 @@ impl Player { // camera self.index_x = clamp(self.index_x + self.direction.vector_x() * 0x200, -0x8000, 0x8000); - if state.control_flags.control_enabled() && self.controller.move_up() { + if state.control_flags.control_enabled() && self.controller.look_up() { self.index_y -= 0x200; // 1.0fix9 if self.index_y < -0x8000 { // -64.0fix9 self.index_y = -0x8000; } - } else if state.control_flags.control_enabled() && self.controller.move_down() { + } else if state.control_flags.control_enabled() && self.controller.look_down() { self.index_y += 0x200; // 1.0fix9 if self.index_y > 0x8000 { // -64.0fix9 self.index_y = 0x8000; diff --git a/src/scene/game_scene.rs b/src/scene/game_scene.rs index 7859b05..c5975c5 100644 --- a/src/scene/game_scene.rs +++ b/src/scene/game_scene.rs @@ -5,6 +5,7 @@ use ggez::graphics::{BlendMode, Color, Drawable, DrawParam, FilterMode, mint}; use ggez::graphics::spritebatch::SpriteBatch; use ggez::nalgebra::{clamp, Vector2}; use log::info; +use num_traits::abs; use crate::bullet::BulletManager; use crate::caret::CaretType; @@ -1050,15 +1051,14 @@ impl GameScene { match self.frame.update_target { UpdateTarget::Player => { - if !self.player2.cond.hidden() { + if !self.player2.cond.hidden() + && abs(self.player1.target_x - self.player2.x) < 200 * 0x200 + && abs(self.player1.target_y - self.player2.y) < 160 * 0x200 { self.frame.target_x = (self.player1.target_x + self.player2.target_x) / 2; self.frame.target_y = (self.player1.target_y + self.player2.target_y) / 2; - let up = if self.player1.up { 0x10000 } else { 0x8000 }; - let down = if self.player1.down { 0x10000 } else { 0x8000 }; - self.frame.target_x = clamp(self.frame.target_x, self.player1.x - 0x8000, self.player1.x + 0x8000); - self.frame.target_y = clamp(self.frame.target_y, self.player1.y - down, self.player1.y + up); + self.frame.target_y = clamp(self.frame.target_y, self.player1.y, self.player1.y); } else { self.frame.target_x = self.player1.target_x; self.frame.target_y = self.player1.target_y; @@ -1377,25 +1377,26 @@ impl Scene for GameScene { if !self.player2.cond.hidden() { let y = interpolate_fix9_scale(self.player2.prev_y - self.frame.prev_y, self.player2.y - self.frame.y, state.frame_time); + let y = clamp(y, 8.0, state.canvas_size.1 - 8.0 - state.font.line_height(&state.constants)); if self.player2.x + 8 * 0x200 < self.frame.x { state.font.draw_colored_text(P2_LEFT_TEXT.chars(), 9.0, y + 1.0, - (0, 0, 100), &state.constants, &mut state.texture_set, ctx)?; + (0, 0, 130), &state.constants, &mut state.texture_set, ctx)?; state.font.draw_colored_text(P2_LEFT_TEXT.chars(), 8.0, y, - (64, 64, 255), &state.constants, &mut state.texture_set, ctx)?; + (96, 96, 255), &state.constants, &mut state.texture_set, ctx)?; } else if self.player2.x - 8 * 0x200 > self.frame.x + state.canvas_size.0 as isize * 0x200 { let width = state.font.text_width(P2_RIGHT_TEXT.chars(), &state.constants); state.font.draw_colored_text(P2_RIGHT_TEXT.chars(), state.canvas_size.0 - width - 8.0 + 1.0, y + 1.0, - (0, 0, 100), &state.constants, &mut state.texture_set, ctx)?; + (0, 0, 130), &state.constants, &mut state.texture_set, ctx)?; state.font.draw_colored_text(P2_RIGHT_TEXT.chars(), state.canvas_size.0 - width - 8.0, y, - (64, 64, 255), &state.constants, &mut state.texture_set, ctx)?; + (96, 96, 255), &state.constants, &mut state.texture_set, ctx)?; } } }