mirror of
https://github.com/Noratrieb/game-wip-dontplay.git
synced 2026-01-16 12:25:02 +01:00
Fix mouse position
This commit is contained in:
parent
c54af3ee67
commit
4fb622989b
1 changed files with 18 additions and 6 deletions
24
src/app.rs
24
src/app.rs
|
|
@ -8,13 +8,14 @@ use sfml::{
|
||||||
graphics::{
|
graphics::{
|
||||||
Color, Rect, RenderTarget, RenderTexture, RenderWindow, Sprite, Transformable, View,
|
Color, Rect, RenderTarget, RenderTexture, RenderWindow, Sprite, Transformable, View,
|
||||||
},
|
},
|
||||||
|
system::Vector2u,
|
||||||
window::{Event, Key},
|
window::{Event, Key},
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
debug::DebugState,
|
debug::DebugState,
|
||||||
game::{for_each_tile_on_screen, Biome, GameState},
|
game::{for_each_tile_on_screen, Biome, GameState},
|
||||||
graphics::{self, ScreenPosScalar, NATIVE_RESOLUTION},
|
graphics::{self, ScreenPos, ScreenPosScalar, NATIVE_RESOLUTION},
|
||||||
input::Input,
|
input::Input,
|
||||||
math::{center_offset, px_per_frame_to_km_h, WorldPos, M_PER_PX, TILE_SIZE},
|
math::{center_offset, px_per_frame_to_km_h, WorldPos, M_PER_PX, TILE_SIZE},
|
||||||
res::Res,
|
res::Res,
|
||||||
|
|
@ -163,6 +164,9 @@ impl App {
|
||||||
(y - NATIVE_RESOLUTION.h as i32 / 2).try_into().unwrap_or(0);
|
(y - NATIVE_RESOLUTION.h as i32 / 2).try_into().unwrap_or(0);
|
||||||
}
|
}
|
||||||
let mut loc = self.input.mouse_down_loc;
|
let mut loc = self.input.mouse_down_loc;
|
||||||
|
let vco = viewport_center_offset(self.rw.size(), self.rt.size(), self.scale);
|
||||||
|
loc.x -= vco.x;
|
||||||
|
loc.y -= vco.y;
|
||||||
loc.x /= self.scale as ScreenPosScalar;
|
loc.x /= self.scale as ScreenPosScalar;
|
||||||
loc.y /= self.scale as ScreenPosScalar;
|
loc.y /= self.scale as ScreenPosScalar;
|
||||||
let mut wpos = self.game.camera_offset;
|
let mut wpos = self.game.camera_offset;
|
||||||
|
|
@ -243,11 +247,8 @@ impl App {
|
||||||
self.rt.display();
|
self.rt.display();
|
||||||
let mut spr = Sprite::with_texture(self.rt.texture());
|
let mut spr = Sprite::with_texture(self.rt.texture());
|
||||||
spr.set_scale((self.scale as f32, self.scale as f32));
|
spr.set_scale((self.scale as f32, self.scale as f32));
|
||||||
let rw_size = self.rw.size();
|
let vco = viewport_center_offset(self.rw.size(), self.rt.size(), self.scale);
|
||||||
let rt_size = self.rt.size() * self.scale as u32;
|
spr.set_position((vco.x as f32, vco.y as f32));
|
||||||
let x = center_offset(rt_size.x as i32, rw_size.x as i32);
|
|
||||||
let y = center_offset(rt_size.y as i32, rw_size.y as i32);
|
|
||||||
spr.set_position((x as f32, y as f32));
|
|
||||||
self.rw.clear(Color::rgb(40, 10, 70));
|
self.rw.clear(Color::rgb(40, 10, 70));
|
||||||
self.rw.draw(&spr);
|
self.rw.draw(&spr);
|
||||||
self.sf_egui
|
self.sf_egui
|
||||||
|
|
@ -268,6 +269,17 @@ impl App {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn viewport_center_offset(rw_size: Vector2u, rt_size: Vector2u, scale: u8) -> ScreenPos {
|
||||||
|
let rw_size = rw_size;
|
||||||
|
let rt_size = rt_size * scale as u32;
|
||||||
|
let x = center_offset(rt_size.x as i32, rw_size.x as i32);
|
||||||
|
let y = center_offset(rt_size.y as i32, rw_size.y as i32);
|
||||||
|
ScreenPos {
|
||||||
|
x: x as ScreenPosScalar,
|
||||||
|
y: y as ScreenPosScalar,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn debug_panel_ui(
|
fn debug_panel_ui(
|
||||||
debug: &mut DebugState,
|
debug: &mut DebugState,
|
||||||
game: &mut GameState,
|
game: &mut GameState,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue