FINISHED THE BOOK
This commit is contained in:
parent
488e73ea46
commit
8c007af22e
@ -10,3 +10,6 @@ bracket-lib = "~0.8.1"
|
|||||||
legion = "~0.3.1"
|
legion = "~0.3.1"
|
||||||
serde = { version = "=1.0.115"}
|
serde = { version = "=1.0.115"}
|
||||||
ron = "=0.6.1"
|
ron = "=0.6.1"
|
||||||
|
|
||||||
|
[profile.release]
|
||||||
|
lto = "thin"
|
@ -55,10 +55,26 @@ Templates(
|
|||||||
Template(
|
Template(
|
||||||
entity_type: Item,
|
entity_type: Item,
|
||||||
name : "Rusty Sword",
|
name : "Rusty Sword",
|
||||||
glyph: '/',
|
glyph: 's',
|
||||||
levels : [0,1,2],
|
levels : [0,1,2],
|
||||||
frequency: 2,
|
frequency: 1,
|
||||||
|
base_damage: Some(1)
|
||||||
|
),
|
||||||
|
Template(
|
||||||
|
entity_type: Item,
|
||||||
|
name : "Shiny Sword",
|
||||||
|
glyph: 'S',
|
||||||
|
levels : [0,1,2],
|
||||||
|
frequency: 1,
|
||||||
base_damage: Some(2)
|
base_damage: Some(2)
|
||||||
)
|
),
|
||||||
|
Template(
|
||||||
|
entity_type: Item,
|
||||||
|
name : "Huge Sword",
|
||||||
|
glyph: '/',
|
||||||
|
levels : [1,2],
|
||||||
|
frequency: 1,
|
||||||
|
base_damage: Some(3)
|
||||||
|
),
|
||||||
]
|
]
|
||||||
)
|
)
|
@ -11,10 +11,10 @@ mod prelude {
|
|||||||
pub use legion::systems::CommandBuffer;
|
pub use legion::systems::CommandBuffer;
|
||||||
pub use legion::world::SubWorld;
|
pub use legion::world::SubWorld;
|
||||||
pub use legion::*;
|
pub use legion::*;
|
||||||
pub const SCREEN_WIDTH: i32 = 80;
|
pub const SCREEN_WIDTH: i32 = 100;
|
||||||
pub const SCREEN_HEIGHT: i32 = 50;
|
pub const SCREEN_HEIGHT: i32 = 80;
|
||||||
pub const DISPLAY_WIDTH: i32 = SCREEN_WIDTH / 2;
|
pub const DISPLAY_WIDTH: i32 = 40;
|
||||||
pub const DISPLAY_HEIGHT: i32 = SCREEN_HEIGHT / 2;
|
pub const DISPLAY_HEIGHT: i32 = 25;
|
||||||
pub use crate::camera::*;
|
pub use crate::camera::*;
|
||||||
pub use crate::components::*;
|
pub use crate::components::*;
|
||||||
pub use crate::map::*;
|
pub use crate::map::*;
|
||||||
|
@ -7,7 +7,6 @@ mod themes;
|
|||||||
|
|
||||||
use automata::CellularAutomataArchitect;
|
use automata::CellularAutomataArchitect;
|
||||||
use drunkard::DrunkardsWalkArchitect;
|
use drunkard::DrunkardsWalkArchitect;
|
||||||
use empty::EmptyArchitect;
|
|
||||||
use rooms::RoomsArchitect;
|
use rooms::RoomsArchitect;
|
||||||
use themes::*;
|
use themes::*;
|
||||||
|
|
||||||
|
@ -2,17 +2,18 @@ use crate::prelude::*;
|
|||||||
|
|
||||||
const FORTRESS: (&str, i32, i32) = (
|
const FORTRESS: (&str, i32, i32) = (
|
||||||
"
|
"
|
||||||
#-##########
|
------------
|
||||||
#-#--------#
|
-##########-
|
||||||
#-#-######-#
|
----------#-
|
||||||
#-#-#MMMM#-#
|
-########-#-
|
||||||
#-#-#MMMM#-#
|
-#------#-#-
|
||||||
#-#-#----#-#
|
-#-####-#-#-
|
||||||
#-#-####-#-#
|
-#-#MMMM#-#-
|
||||||
#-#------#-#
|
-#-#MMMM#-#-
|
||||||
#-########-#
|
-#-######-#-
|
||||||
#----------#
|
-#--------#-
|
||||||
############
|
-##########-
|
||||||
|
------------
|
||||||
",
|
",
|
||||||
12,
|
12,
|
||||||
11,
|
11,
|
||||||
|
@ -12,12 +12,14 @@ pub fn combat(ecs: &mut SubWorld, commands: &mut CommandBuffer) {
|
|||||||
.iter(ecs)
|
.iter(ecs)
|
||||||
.map(|(entity, attack)| (*entity, attack.attacker, attack.victim))
|
.map(|(entity, attack)| (*entity, attack.attacker, attack.victim))
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
victims.iter().for_each(|(message, attacker, victim)| {
|
victims.iter().for_each(|(message, attacker, victim)| {
|
||||||
let is_player = ecs
|
let is_player = ecs
|
||||||
.entry_ref(*victim)
|
.entry_ref(*victim)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.get_component::<Player>()
|
.get_component::<Player>()
|
||||||
.is_ok();
|
.is_ok();
|
||||||
|
|
||||||
let base_damage = if let Ok(v) = ecs.entry_ref(*attacker) {
|
let base_damage = if let Ok(v) = ecs.entry_ref(*attacker) {
|
||||||
if let Ok(dmg) = v.get_component::<Damage>() {
|
if let Ok(dmg) = v.get_component::<Damage>() {
|
||||||
dmg.0
|
dmg.0
|
||||||
@ -26,16 +28,21 @@ pub fn combat(ecs: &mut SubWorld, commands: &mut CommandBuffer) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
0
|
0
|
||||||
};
|
}; // (1)
|
||||||
|
|
||||||
let weapon_damage: i32 = <(&Carried, &Damage)>::query()
|
let weapon_damage: i32 = <(&Carried, &Damage)>::query()
|
||||||
.iter(ecs)
|
.iter(ecs)
|
||||||
.filter(|(carried, _)| carried.0 == *attacker)
|
.filter(|(carried, _)| carried.0 == *attacker)
|
||||||
.map(|(_, dmg)| dmg.0)
|
.map(|(_, dmg)| dmg.0)
|
||||||
.sum();
|
.sum(); // (2)
|
||||||
|
|
||||||
let final_damage = base_damage + weapon_damage;
|
let final_damage = base_damage + weapon_damage;
|
||||||
|
|
||||||
if let Ok(mut health) = ecs.entry_mut(*victim).unwrap().get_component::<Health>() {
|
if let Ok(mut health) = ecs
|
||||||
|
.entry_mut(*victim)
|
||||||
|
.unwrap()
|
||||||
|
.get_component_mut::<Health>()
|
||||||
|
{
|
||||||
health.current -= final_damage;
|
health.current -= final_damage;
|
||||||
if health.current < 1 && !is_player {
|
if health.current < 1 && !is_player {
|
||||||
commands.remove(*victim);
|
commands.remove(*victim);
|
||||||
|
@ -29,7 +29,7 @@ pub fn hud(ecs: &SubWorld) {
|
|||||||
ColorPair::new(WHITE, RED),
|
ColorPair::new(WHITE, RED),
|
||||||
);
|
);
|
||||||
|
|
||||||
let (player, map_level) = <(Entity, &Player)>::query()
|
let (_player, map_level) = <(Entity, &Player)>::query()
|
||||||
.iter(ecs)
|
.iter(ecs)
|
||||||
.find_map(|(entity, player)| Some((*entity, player.map_level)))
|
.find_map(|(entity, player)| Some((*entity, player.map_level)))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
@ -7,6 +7,7 @@ use crate::prelude::*;
|
|||||||
#[write_component(Health)]
|
#[write_component(Health)]
|
||||||
#[read_component(Item)]
|
#[read_component(Item)]
|
||||||
#[read_component(Carried)]
|
#[read_component(Carried)]
|
||||||
|
#[read_component(Weapon)]
|
||||||
pub fn player_input(
|
pub fn player_input(
|
||||||
ecs: &mut SubWorld,
|
ecs: &mut SubWorld,
|
||||||
commands: &mut CommandBuffer,
|
commands: &mut CommandBuffer,
|
||||||
@ -25,6 +26,7 @@ pub fn player_input(
|
|||||||
.iter(ecs)
|
.iter(ecs)
|
||||||
.find_map(|(entity, pos)| Some((*entity, *pos)))
|
.find_map(|(entity, pos)| Some((*entity, *pos)))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let mut items = <(Entity, &Item, &Point)>::query();
|
let mut items = <(Entity, &Item, &Point)>::query();
|
||||||
items
|
items
|
||||||
.iter(ecs)
|
.iter(ecs)
|
||||||
@ -32,7 +34,19 @@ pub fn player_input(
|
|||||||
.for_each(|(entity, _item, _item_pos)| {
|
.for_each(|(entity, _item, _item_pos)| {
|
||||||
commands.remove_component::<Point>(*entity);
|
commands.remove_component::<Point>(*entity);
|
||||||
commands.add_component(*entity, Carried(player));
|
commands.add_component(*entity, Carried(player));
|
||||||
|
|
||||||
|
if let Ok(e) = ecs.entry_ref(*entity) {
|
||||||
|
if e.get_component::<Weapon>().is_ok() {
|
||||||
|
<(Entity, &Carried, &Weapon)>::query()
|
||||||
|
.iter(ecs)
|
||||||
|
.filter(|(_, c, _)| c.0 == player)
|
||||||
|
.for_each(|(e, _c, _w)| {
|
||||||
|
commands.remove(*e);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Point::new(0, 0)
|
Point::new(0, 0)
|
||||||
}
|
}
|
||||||
VirtualKeyCode::Key1 => use_item(0, ecs, commands),
|
VirtualKeyCode::Key1 => use_item(0, ecs, commands),
|
||||||
|
Loading…
Reference in New Issue
Block a user