mirror of
https://github.com/lisk77/comet.git
synced 2025-10-24 13:58:49 +00:00
feat: added a camera with orthographic projection and did some work restructuring the comet_app to make the setup system optional. Input handling is moved to the app
This commit is contained in:
parent
780365aeb8
commit
5a9f632e3a
22 changed files with 1173 additions and 349 deletions
|
|
@ -6,4 +6,8 @@ pub use comet_ecs as ecs;
|
|||
pub use comet_app as app;
|
||||
pub use comet_colors as colors;
|
||||
pub use comet_input as input;
|
||||
pub use comet_log as log;
|
||||
pub use comet_log as log;
|
||||
|
||||
pub mod prelude {
|
||||
pub use comet_app::App;
|
||||
}
|
||||
118
src/main.rs
118
src/main.rs
|
|
@ -4,64 +4,89 @@ use comet::{
|
|||
ApplicationType::*
|
||||
},
|
||||
renderer::Renderer,
|
||||
ecs::World,
|
||||
ecs::*,
|
||||
math::*,
|
||||
input::keyboard::*,
|
||||
log::*
|
||||
};
|
||||
use winit::event::{WindowEvent};
|
||||
use comet_ecs::{Component, ComponentSet, Render, Renderer2D, Transform2D};
|
||||
use comet_input::mouse::{mouse_entered, mouse_pressed, Button};
|
||||
|
||||
fn input(event: &WindowEvent, app: &mut App, renderer: &mut Renderer) {
|
||||
match event {
|
||||
_ if key_pressed(event, Key::Escape) => app.quit(),
|
||||
_ if key_pressed(event, Key::KeyC) => { renderer.clear_buffers() }
|
||||
_ if key_pressed(event, Key::KeyE) => {
|
||||
let mut renderer2d = Renderer2D::new();
|
||||
renderer2d.set_texture(r"resources/textures/comet_icon.png");
|
||||
renderer2d.set_visibility(true);
|
||||
use winit_input_helper::WinitInputHelper;
|
||||
use comet_input::input_handler::InputHandler;
|
||||
|
||||
let id = app.world_mut().new_entity();
|
||||
app.world_mut().add_component(id as usize, renderer2d.clone());
|
||||
app.world_mut().add_component(0, renderer2d);
|
||||
fn update_position(input: WinitInputHelper, transform: &mut Transform2D, dt: f32) {
|
||||
let mut direction = Vec2::ZERO;
|
||||
let previous = transform.position().clone();
|
||||
|
||||
let transform = app.world_mut().get_component_mut::<Transform2D>(id as usize);
|
||||
transform.position_mut().set_x(0.5);
|
||||
if input.key_held(Key::KeyW) {
|
||||
direction += Vec2::Y;
|
||||
}
|
||||
if input.key_held(Key::KeyA) {
|
||||
direction -= Vec2::X;
|
||||
}
|
||||
if input.key_held(Key::KeyS) {
|
||||
direction -= Vec2::Y;
|
||||
}
|
||||
if input.key_held(Key::KeyD) {
|
||||
direction += Vec2::X;
|
||||
}
|
||||
|
||||
debug!(format!("{:?}", app.world().components().get_component::<Renderer2D>(0)));
|
||||
},
|
||||
_ if key_pressed(event, Key::KeyW) => {
|
||||
let transform = app.world_mut().get_component_mut::<Transform2D>(0);
|
||||
let y = transform.position().y();
|
||||
transform.position_mut().set_y(y + 0.1);
|
||||
},
|
||||
_ if key_pressed(event, Key::KeyA) => {
|
||||
let transform = app.world_mut().get_component_mut::<Transform2D>(0);
|
||||
let x = transform.position().x();
|
||||
transform.position_mut().set_x(x - 0.1);
|
||||
},
|
||||
_ if key_pressed(event, Key::KeyS) => {
|
||||
let transform = app.world_mut().get_component_mut::<Transform2D>(0);
|
||||
let y = transform.position().y();
|
||||
transform.position_mut().set_y(y - 0.1);
|
||||
},
|
||||
_ if key_pressed(event, Key::KeyD) => {
|
||||
let transform = app.world_mut().get_component_mut::<Transform2D>(0);
|
||||
let x = transform.position().x();
|
||||
transform.position_mut().set_x(x + 0.1);
|
||||
if direction != Vec2::ZERO {
|
||||
let normalized_dir = direction.normalize();
|
||||
if normalized_dir.x().is_nan() || normalized_dir.y().is_nan() {
|
||||
error!("Direction is NaN! X: {}, Y: {}", normalized_dir.x(), normalized_dir.y());
|
||||
}
|
||||
_ => {}
|
||||
let displacement = normalized_dir * 777.7 * dt;
|
||||
transform.translate(displacement);
|
||||
}
|
||||
|
||||
if (transform.position().as_vec() - previous.as_vec()).x() > 13.0 {
|
||||
debug!("Actual Displacement: {:?}", transform.position().as_vec() - previous.as_vec());
|
||||
}
|
||||
}
|
||||
|
||||
fn update(world: &mut World, renderer: &mut Renderer) {
|
||||
if !world.components().contains_components(ComponentSet::from_ids(vec![Transform2D::type_id(), Renderer2D::type_id()])) {
|
||||
world.register_component::<Renderer2D>();
|
||||
}
|
||||
if world.entities().len() == 0 {
|
||||
let id = world.new_entity();
|
||||
fn setup(world: &mut World) {
|
||||
world.register_component::<Renderer2D>();
|
||||
//world.register_component::<Rectangle2D>();
|
||||
|
||||
let mut renderer2d = Renderer2D::new();
|
||||
renderer2d.set_texture(r"resources/textures/comet_icon.png");
|
||||
renderer2d.set_visibility(true);
|
||||
|
||||
let id = world.new_entity();
|
||||
world.add_component(id as usize, renderer2d.clone());
|
||||
|
||||
let transform = world.get_component_mut::<Transform2D>(id as usize);
|
||||
transform.translate(Vec2::X*5.0);
|
||||
|
||||
world.add_component(id as usize, renderer2d);
|
||||
|
||||
/*let rectangle2d = Rectangle2D::new(*tranform.position(), Vec2::new(0.1, 0.1));
|
||||
world.add_component(id as usize, rectangle2d);
|
||||
|
||||
let id2 = world.new_entity();
|
||||
let tranform2 = world.get_component_mut::<Transform2D>(id as usize);
|
||||
let rectangle = Rectangle2D::new(*tranform2.position(), Vec2::new(0.1, 0.1));
|
||||
|
||||
world.add_component(id2 as usize, rectangle);*/
|
||||
|
||||
}
|
||||
|
||||
fn update(app: &mut App, renderer: &mut Renderer, dt: f32) {
|
||||
if app.key_pressed(Key::Escape) { app.quit() }
|
||||
if app.key_pressed(Key::KeyC) { app.set_time_step(0.0016667) }
|
||||
if app.key_pressed(Key::KeyV) { app.set_time_step(0.0166667) }
|
||||
if app.key_pressed(Key::KeyE) { app.world_mut().get_component_mut::<Transform2D>(0).translate([0f32,0f32].into()) }
|
||||
if app.key_held(Key::KeyW)
|
||||
|| app.key_held(Key::KeyA)
|
||||
|| app.key_held(Key::KeyS)
|
||||
|| app.key_held(Key::KeyD)
|
||||
{
|
||||
update_position(app.input_manager().clone(), app.world_mut().get_component_mut::<Transform2D>(0), dt);
|
||||
}
|
||||
|
||||
let mut transform = app.world_mut().get_component_mut::<Transform2D>(0);
|
||||
|
||||
|
||||
}
|
||||
|
||||
fn main() {
|
||||
|
|
@ -69,6 +94,7 @@ fn main() {
|
|||
.with_title("Comet App")
|
||||
.with_icon(r"resources/textures/comet_icon.png")
|
||||
.with_size(1920, 1080)
|
||||
.run(input, update)
|
||||
.with_setup(setup)
|
||||
.run(update)
|
||||
;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue