67 lines
1.7 KiB
Rust
67 lines
1.7 KiB
Rust
use bevy::prelude::*;
|
|
|
|
mod camera;
|
|
mod citizen;
|
|
mod game;
|
|
mod item;
|
|
mod tile;
|
|
mod tiles;
|
|
|
|
use bevy::color::palettes::basic::WHITE;
|
|
use game::PIXEL_RATIO;
|
|
|
|
fn main() {
|
|
App::new()
|
|
.add_plugins(
|
|
DefaultPlugins
|
|
.set(WindowPlugin {
|
|
primary_window: Some(Window {
|
|
title: String::from("Dorf"),
|
|
..Default::default()
|
|
}),
|
|
..Default::default()
|
|
})
|
|
.set(ImagePlugin::default_nearest()),
|
|
)
|
|
.insert_resource(ClearColor(Color::srgb(0.1, 0.1, 0.15)))
|
|
.add_systems(Startup, (game::setup_level, camera::spawn_panning_camera))
|
|
.add_systems(
|
|
FixedUpdate,
|
|
(
|
|
camera::camera_movement,
|
|
citizen::citizen_movement,
|
|
tile::tile_sprite_update,
|
|
),
|
|
)
|
|
.add_systems(FixedUpdate, draw_cursor)
|
|
.run();
|
|
}
|
|
|
|
fn draw_cursor(
|
|
camera_query: Single<(&Camera, &GlobalTransform)>,
|
|
windows: Query<&Window>,
|
|
mut gizmos: Gizmos,
|
|
) {
|
|
let (camera, camera_transform) = *camera_query;
|
|
|
|
let Ok(window) = windows.get_single() else {
|
|
return;
|
|
};
|
|
|
|
let Some(cursor_position) = window.cursor_position() else {
|
|
return;
|
|
};
|
|
|
|
// Calculate a world position based on the cursor's position.
|
|
let Ok(point) = camera.viewport_to_world_2d(camera_transform, cursor_position) else {
|
|
return;
|
|
};
|
|
println!(
|
|
"pos: {}, {}",
|
|
(point.x / (16. * PIXEL_RATIO)) as i32,
|
|
(point.y / (16. * PIXEL_RATIO)) as i32
|
|
);
|
|
|
|
gizmos.circle_2d(point, 10., WHITE);
|
|
}
|