main.rs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. use std::default::Default;
  2. use bevy::core::FixedTimestep;
  3. use bevy::prelude::*;
  4. use bevy::render::pass::ClearColor;
  5. pub mod components;
  6. use crate::components as c;
  7. pub mod game;
  8. pub mod snake;
  9. fn main() {
  10. App::build()
  11. .insert_resource(WindowDescriptor {
  12. title: "Snake!".to_string(),
  13. width: 500.0,
  14. height: 500.0,
  15. ..Default::default()
  16. })
  17. .insert_resource(ClearColor(Color::rgb(0.04, 0.04, 0.04)))
  18. .insert_resource(c::SnakeSegments::default())
  19. .insert_resource(c::LastTailPosition::default())
  20. .add_startup_system(game::setup.system())
  21. .add_startup_stage("game_setup", SystemStage::single(snake::spawn.system()))
  22. .add_plugins(DefaultPlugins)
  23. .add_system(
  24. snake::input
  25. .system()
  26. .label(c::SnakeMovement::Input)
  27. .before(c::SnakeMovement::Movement),
  28. )
  29. .add_system(snake::die.system().after(c::SnakeMovement::Movement))
  30. .add_system_set(
  31. SystemSet::new()
  32. .with_run_criteria(FixedTimestep::step(0.3))
  33. .with_system(snake::movement.system().label(c::SnakeMovement::Movement))
  34. .with_system(
  35. snake::eating
  36. .system()
  37. .label(c::SnakeMovement::Eating)
  38. .after(c::SnakeMovement::Movement),
  39. )
  40. .with_system(
  41. snake::growth
  42. .system()
  43. .label(c::SnakeMovement::Growth)
  44. .after(c::SnakeMovement::Eating),
  45. ),
  46. )
  47. .add_system_set_to_stage(
  48. CoreStage::PostUpdate,
  49. SystemSet::new()
  50. .with_system(game::position_translation.system())
  51. .with_system(game::size_scaling.system()),
  52. )
  53. .add_system_set(
  54. SystemSet::new()
  55. .with_run_criteria(FixedTimestep::step(0.9))
  56. .with_system(snake::food.system()),
  57. )
  58. .add_event::<c::GrowthEvent>()
  59. .add_event::<c::GameOverEvent>()
  60. .run();
  61. }