Add tooltips system, names
This commit is contained in:
parent
cf599dd2be
commit
4aa39bfd6a
@ -26,3 +26,6 @@ pub struct Health {
|
|||||||
pub current: i32,
|
pub current: i32,
|
||||||
pub max: i32,
|
pub max: i32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, PartialEq)]
|
||||||
|
pub struct Name(pub String);
|
||||||
|
@ -74,6 +74,8 @@ impl GameState for State {
|
|||||||
ctx.cls();
|
ctx.cls();
|
||||||
|
|
||||||
self.resources.insert(ctx.key);
|
self.resources.insert(ctx.key);
|
||||||
|
ctx.set_active_console(0);
|
||||||
|
self.resources.insert(Point::from_tuple(ctx.mouse_pos()));
|
||||||
|
|
||||||
let current_state = *self.resources.get::<TurnState>().unwrap();
|
let current_state = *self.resources.get::<TurnState>().unwrap();
|
||||||
|
|
||||||
|
@ -12,22 +12,36 @@ pub fn spawn_player(ecs: &mut World, pos: Point) {
|
|||||||
current: 20,
|
current: 20,
|
||||||
max: 20,
|
max: 20,
|
||||||
},
|
},
|
||||||
|
Name("Player 1".to_string()),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn spawn_monster(ecs: &mut World, rng: &mut RandomNumberGenerator, pos: Point) {
|
pub fn spawn_monster(ecs: &mut World, rng: &mut RandomNumberGenerator, pos: Point) {
|
||||||
|
let (hp, name, glyph) = match rng.roll_dice(1, 10) {
|
||||||
|
1..=8 => goblin(),
|
||||||
|
_ => orc(),
|
||||||
|
};
|
||||||
|
|
||||||
ecs.push((
|
ecs.push((
|
||||||
Enemy,
|
Enemy,
|
||||||
pos,
|
pos,
|
||||||
Render {
|
Render {
|
||||||
color: ColorPair::new(WHITE, BLACK),
|
color: ColorPair::new(WHITE, BLACK),
|
||||||
glyph: match rng.range(0, 4) {
|
glyph,
|
||||||
0 => to_cp437('E'),
|
|
||||||
1 => to_cp437('O'),
|
|
||||||
2 => to_cp437('o'),
|
|
||||||
_ => to_cp437('g'),
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
MovingRandomly,
|
MovingRandomly,
|
||||||
|
Health {
|
||||||
|
current: hp,
|
||||||
|
max: hp,
|
||||||
|
},
|
||||||
|
Name(name),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn goblin() -> (i32, String, FontCharType) {
|
||||||
|
(1, "Goblin".to_string(), to_cp437('g'))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn orc() -> (i32, String, FontCharType) {
|
||||||
|
(2, "Orc".to_string(), to_cp437('o'))
|
||||||
|
}
|
||||||
|
@ -6,6 +6,7 @@ mod map_render;
|
|||||||
mod movement;
|
mod movement;
|
||||||
mod player_input;
|
mod player_input;
|
||||||
mod random_move;
|
mod random_move;
|
||||||
|
mod tooltips;
|
||||||
|
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
|
|
||||||
@ -16,6 +17,7 @@ pub fn build_input_scheduler() -> Schedule {
|
|||||||
.add_system(map_render::map_render_system())
|
.add_system(map_render::map_render_system())
|
||||||
.add_system(entity_render::entity_render_system())
|
.add_system(entity_render::entity_render_system())
|
||||||
.add_system(hud::hud_system())
|
.add_system(hud::hud_system())
|
||||||
|
.add_system(tooltips::tooltips_system())
|
||||||
.build()
|
.build()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -28,6 +30,7 @@ pub fn build_player_scheduler() -> Schedule {
|
|||||||
.add_system(map_render::map_render_system())
|
.add_system(map_render::map_render_system())
|
||||||
.add_system(entity_render::entity_render_system())
|
.add_system(entity_render::entity_render_system())
|
||||||
.add_system(hud::hud_system())
|
.add_system(hud::hud_system())
|
||||||
|
.add_system(tooltips::tooltips_system())
|
||||||
.add_system(end_turn::end_turn_system())
|
.add_system(end_turn::end_turn_system())
|
||||||
.build()
|
.build()
|
||||||
}
|
}
|
||||||
@ -41,6 +44,7 @@ pub fn build_monster_scheduler() -> Schedule {
|
|||||||
.add_system(map_render::map_render_system())
|
.add_system(map_render::map_render_system())
|
||||||
.add_system(entity_render::entity_render_system())
|
.add_system(entity_render::entity_render_system())
|
||||||
.add_system(hud::hud_system())
|
.add_system(hud::hud_system())
|
||||||
|
.add_system(tooltips::tooltips_system())
|
||||||
.add_system(end_turn::end_turn_system())
|
.add_system(end_turn::end_turn_system())
|
||||||
.build()
|
.build()
|
||||||
}
|
}
|
||||||
|
27
src/systems/tooltips.rs
Normal file
27
src/systems/tooltips.rs
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
use crate::prelude::*;
|
||||||
|
|
||||||
|
#[system]
|
||||||
|
#[read_component(Point)]
|
||||||
|
#[read_component(Name)]
|
||||||
|
#[read_component(Health)]
|
||||||
|
pub fn tooltips(ecs: &SubWorld, #[resource] mouse_pos: &Point, #[resource] camera: &Camera) {
|
||||||
|
let mut positions = <(Entity, &Point, &Name)>::query();
|
||||||
|
let offset = Point::new(camera.left_x, camera.top_y);
|
||||||
|
let map_pos = *mouse_pos + offset;
|
||||||
|
let mut draw_batch = DrawBatch::new();
|
||||||
|
draw_batch.target(2);
|
||||||
|
positions
|
||||||
|
.iter(ecs)
|
||||||
|
.filter(|(_, pos, _)| **pos == map_pos)
|
||||||
|
.for_each(|(entity, _, name)| {
|
||||||
|
let screen_pos = *mouse_pos * 4;
|
||||||
|
let display =
|
||||||
|
if let Ok(health) = ecs.entry_ref(*entity).unwrap().get_component::<Health>() {
|
||||||
|
format!("{} : {} hp", &name.0, health.current)
|
||||||
|
} else {
|
||||||
|
name.0.clone()
|
||||||
|
};
|
||||||
|
draw_batch.print(screen_pos, &display);
|
||||||
|
});
|
||||||
|
draw_batch.submit(10100).expect("Batch error");
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user