use std::default::Default; use bevy::core::FixedTimestep; use bevy::prelude::*; use bevy::render::pass::ClearColor; pub mod components; use crate::components as c; pub mod game; pub mod snake; fn main() { App::build() .insert_resource(WindowDescriptor { title: "Snake!".to_string(), width: 500.0, height: 500.0, ..Default::default() }) .insert_resource(ClearColor(Color::rgb(0.04, 0.04, 0.04))) .insert_resource(c::SnakeSegments::default()) .insert_resource(c::LastTailPosition::default()) .add_startup_system(game::setup.system()) .add_startup_stage("game_setup", SystemStage::single(snake::spawn.system())) .add_plugins(DefaultPlugins) .add_system( snake::input .system() .label(c::SnakeMovement::Input) .before(c::SnakeMovement::Movement), ) .add_system(snake::die.system().after(c::SnakeMovement::Movement)) .add_system_set( SystemSet::new() .with_run_criteria(FixedTimestep::step(0.3)) .with_system(snake::movement.system().label(c::SnakeMovement::Movement)) .with_system( snake::eating .system() .label(c::SnakeMovement::Eating) .after(c::SnakeMovement::Movement), ) .with_system( snake::growth .system() .label(c::SnakeMovement::Growth) .after(c::SnakeMovement::Eating), ), ) .add_system_set_to_stage( CoreStage::PostUpdate, SystemSet::new() .with_system(game::position_translation.system()) .with_system(game::size_scaling.system()), ) .add_system_set( SystemSet::new() .with_run_criteria(FixedTimestep::step(0.9)) .with_system(snake::food.system()), ) .add_event::() .add_event::() .run(); }