|
|
|
@ -12,6 +12,7 @@ pub struct Viewport { |
|
|
|
|
start: Vector2, |
|
|
|
|
prev_start: Vector2, |
|
|
|
|
size: Vector2, |
|
|
|
|
orig_size: Vector2, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
impl Viewport { |
|
|
|
@ -19,10 +20,6 @@ impl Viewport { |
|
|
|
|
Self::default() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
pub fn start(&self) -> &Vector2 { |
|
|
|
|
&self.start |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// Must be called at least once before calling
|
|
|
|
|
/// [`update`](Self::update)
|
|
|
|
|
pub fn init(&mut self, ctx: &mut Context) { |
|
|
|
@ -30,6 +27,7 @@ impl Viewport { |
|
|
|
|
self.start = Vector2::new(x, y); |
|
|
|
|
self.prev_start = self.start; |
|
|
|
|
self.size = Vector2::new(w, h); |
|
|
|
|
self.orig_size = self.size; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// Update the game state with the curent viewport data
|
|
|
|
@ -49,15 +47,25 @@ impl Viewport { |
|
|
|
|
|
|
|
|
|
/// Apply changes from the input handle to the viewport
|
|
|
|
|
pub fn apply(&mut self, _: &mut Context, input: &InputHandle) -> GameResult<()> { |
|
|
|
|
|
|
|
|
|
// Move the viewport around
|
|
|
|
|
if input.middle_pressed { |
|
|
|
|
let drag = input.drag_point.as_ref().unwrap().clone(); |
|
|
|
|
let pos = input.mouse_pos.clone(); |
|
|
|
|
self.start = self.prev_start + (drag - pos); |
|
|
|
|
debug!("Changing VP start: {}", self.start); |
|
|
|
|
} else { |
|
|
|
|
self.prev_start = self.start; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Compute the scroll level
|
|
|
|
|
Ok(()) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// Called when the input handler scroll event is handled
|
|
|
|
|
pub fn zoom(&mut self, zoom: f32) { |
|
|
|
|
let new_size = self.orig_size * zoom; |
|
|
|
|
let diff = self.size - new_size; |
|
|
|
|
self.start += diff / 2.0; |
|
|
|
|
self.size = new_size; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|