amethyst / rustrogueliketutorial

Roguelike Tutorial in Rust - using RLTK
MIT License
905 stars 156 forks source link

Chapter 9: May not need `maintain` after each RunState call to dispatch #173

Open umaYnit opened 3 years ago

umaYnit commented 3 years ago

In this section of Chapter 9 :

Testing this with cargo run gives a surprise: the potion isn't deleted after use! This is because the ECS simply marks entities as dead - it doesn't delete them in systems (so as to not mess up iterators and threading). So after every call to dispatch, we need to add a call to maintain. In main.ecs:

RunState::PreRun => {
    self.run_systems();
    self.ecs.maintain();
    newrunstate = RunState::AwaitingInput;
}

Maybe it is not necessary to do this here, because the maintain is called in self.run_systems();.

the potion isn't deleted after use!

It is because return to RunState::AwaitingInput when use the potion, It will keep waiting for input, and then keypress i, jump to the ShowInventory again.

tigerplush commented 1 year ago

Oh I think I made a second issue for the same problem, #203 . Mine might be a duplicate

tigerplush commented 1 year ago

Nevermind, I misread, #203 is closed and not a bug at all