show an imgui window with entity info, etc

This commit is contained in:
Gered 2023-04-14 13:59:38 -04:00
parent 1d64384088
commit 21259bfb10
3 changed files with 29 additions and 20 deletions

View file

@ -86,7 +86,7 @@ impl AppContext<Standard> for GameContext {
} }
impl GameContext { impl GameContext {
pub fn new(mut system: System<Standard>) -> Result<Self> { pub fn new(system: System<Standard>) -> Result<Self> {
let palette = load_palette(Path::new("./assets/db16.pal"))?; let palette = load_palette(Path::new("./assets/db16.pal"))?;
let font = load_font(Path::new("./assets/dp.fnt"))?; let font = load_font(Path::new("./assets/dp.fnt"))?;
@ -97,7 +97,7 @@ impl GameContext {
let blue_slime = Rc::new(load_bitmap_atlas_autogrid(Path::new("./assets/blue_slime.pcx"))?); let blue_slime = Rc::new(load_bitmap_atlas_autogrid(Path::new("./assets/blue_slime.pcx"))?);
let orange_slime = Rc::new(load_bitmap_atlas_autogrid(Path::new("./assets/orange_slime.pcx"))?); let orange_slime = Rc::new(load_bitmap_atlas_autogrid(Path::new("./assets/orange_slime.pcx"))?);
let mut tilemap = TileMap::load_from(Path::new("./assets/arena.map.json"))?; let tilemap = TileMap::load_from(Path::new("./assets/arena.map.json"))?;
let entities = Entities::new(); let entities = Entities::new();
let component_systems = ComponentSystems::new(); let component_systems = ComponentSystems::new();

View file

@ -261,7 +261,7 @@ pub enum Event {
fn event_handler(event: &Event, context: &mut CoreContext) -> bool { fn event_handler(event: &Event, context: &mut CoreContext) -> bool {
match event { match event {
Event::AnimationFinished(entity) => { Event::AnimationFinished(_entity) => {
// no-op // no-op
} }
Event::MoveForward(entity) => { Event::MoveForward(entity) => {
@ -471,7 +471,7 @@ fn update_system_pushing(context: &mut CoreContext) {
let pusher_bounds = bounds.get(pusher_entity).unwrap(); let pusher_bounds = bounds.get(pusher_entity).unwrap();
let pusher_circle = Circle::new(pusher_position.0.x as i32, pusher_position.0.y as i32, pusher_bounds.radius); let pusher_circle = Circle::new(pusher_position.0.x as i32, pusher_position.0.y as i32, pusher_bounds.radius);
for (pushable_entity, pushable) in pushable.iter() { for (pushable_entity, _pushable) in pushable.iter() {
// don't push ourself ... // don't push ourself ...
if *pushable_entity == *pusher_entity { if *pushable_entity == *pusher_entity {
continue; continue;
@ -633,7 +633,6 @@ fn update_system_current_entity_activity(context: &mut CoreContext) {
context.event_publisher.queue(Event::SetActivity(*entity, EntityActivity::Idle)); context.event_publisher.queue(Event::SetActivity(*entity, EntityActivity::Idle));
} }
} }
_ => {}
} }
} }
} }
@ -648,7 +647,7 @@ fn render_system_sprites(context: &mut CoreContext) {
// build up list of entities to be rendered with their positions so we can sort them // build up list of entities to be rendered with their positions so we can sort them
// and render these entities with a proper y-based sort order // and render these entities with a proper y-based sort order
for (entity, _) in sprites.iter() { for (entity, _) in sprites.iter() {
let mut blit_method = RgbaBlitMethod::Transparent(context.transparent_color); let blit_method = RgbaBlitMethod::Transparent(context.transparent_color);
let position = positions.get(entity).unwrap(); let position = positions.get(entity).unwrap();
context.sprite_render_list.push((*entity, position.0, blit_method)); context.sprite_render_list.push((*entity, position.0, blit_method));

View file

@ -3,30 +3,40 @@ mod entities;
mod support; mod support;
mod tilemap; mod tilemap;
use anyhow::{Context, Result}; use anyhow::Result;
use crate::context::GameContext; use crate::context::GameContext;
use crate::entities::{Position, Slime};
use crate::tilemap::{TILE_HEIGHT, TILE_WIDTH}; use crate::tilemap::{TILE_HEIGHT, TILE_WIDTH};
use ggdt::prelude::*; use ggdt::prelude::*;
use ggdt_imgui::UiSupport;
pub struct DemoState; pub struct DemoState;
impl AppState<GameContext> for DemoState { impl AppState<GameContext> for DemoState {
fn update(&mut self, state: State, context: &mut GameContext) -> Option<StateChange<GameContext>> { fn update(&mut self, _state: State, context: &mut GameContext) -> Option<StateChange<GameContext>> {
if context.core.system.res.keyboard.is_key_pressed(Scancode::Escape) { if context.core.system.res.keyboard.is_key_pressed(Scancode::Escape) {
return Some(StateChange::Pop(1)); return Some(StateChange::Pop(1));
} }
let ui = context.support.imgui.new_frame(&context.core.system.res.video); let ui = context.support.imgui.new_frame(&context.core.system.res.video);
ui.window("Entities").build(|| { ui.window("Entities")
ui.text("TODO: display entity list or something"); .position([10.0, 10.0], imgui::Condition::FirstUseEver)
}); .size([160.0, 200.0], imgui::Condition::FirstUseEver)
.build(|| {
ui.text(format!("Camera: {}, {}", context.core.camera_x, context.core.camera_y));
let ui_focused = ui.is_window_hovered_with_flags(imgui::WindowHoveredFlags::ANY_WINDOW) ui.separator();
|| ui.is_window_focused_with_flags(imgui::WindowFocusedFlags::ANY_WINDOW); ui.text_colored([1.0, 1.0, 0.0, 1.0], "Slimes");
let positions = context.core.entities.components::<Position>().unwrap();
for (slime, _) in context.core.entities.components::<Slime>().unwrap().iter() {
let position = positions.get(slime).unwrap();
ui.text(format!("{:2} @ {:3.0},{:3.0}", *slime, position.0.x, position.0.y));
}
});
if !ui_focused { if !ui.is_any_hovered() {
if context.core.system.res.mouse.is_button_down(1) { if context.core.system.res.mouse.is_button_down(MouseButton::Right) {
context.core.camera_x -= context.core.system.res.mouse.x_delta() * 2; context.core.camera_x -= context.core.system.res.mouse.x_delta() * 2;
context.core.camera_y -= context.core.system.res.mouse.y_delta() * 2; context.core.camera_y -= context.core.system.res.mouse.y_delta() * 2;
} }
@ -38,7 +48,7 @@ impl AppState<GameContext> for DemoState {
None None
} }
fn render(&mut self, state: State, context: &mut GameContext) { fn render(&mut self, _state: State, context: &mut GameContext) {
context.core.system.res.video.clear(context.core.palette[0]); context.core.system.res.video.clear(context.core.palette[0]);
context.core.tilemap.draw( context.core.tilemap.draw(
&mut context.core.system.res.video, &mut context.core.system.res.video,
@ -52,11 +62,11 @@ impl AppState<GameContext> for DemoState {
context.support.imgui.render(&mut context.core.system.res.video); context.support.imgui.render(&mut context.core.system.res.video);
} }
fn transition(&mut self, state: State, context: &mut GameContext) -> bool { fn transition(&mut self, _state: State, _context: &mut GameContext) -> bool {
true true
} }
fn state_change(&mut self, new_state: State, old_state: State, context: &mut GameContext) { fn state_change(&mut self, new_state: State, _old_state: State, context: &mut GameContext) {
if new_state == State::Pending { if new_state == State::Pending {
entities::init(context); entities::init(context);
for _ in 0..10 { for _ in 0..10 {
@ -83,7 +93,7 @@ fn main() -> Result<()> {
let mut game = GameContext::new(system)?; let mut game = GameContext::new(system)?;
let mut states = States::new(); let mut states = States::new();
states.push(DemoState); states.push(DemoState)?;
let mut last_ticks = game.core.system.ticks(); let mut last_ticks = game.core.system.ticks();
@ -98,7 +108,7 @@ fn main() -> Result<()> {
} }
last_ticks = game.core.update_frame_delta(last_ticks); last_ticks = game.core.update_frame_delta(last_ticks);
states.update(&mut game); states.update(&mut game)?;
game.core.system.update()?; game.core.system.update()?;
states.render(&mut game); states.render(&mut game);
game.core.system.display()?; game.core.system.display()?;