Add the tail
This commit is contained in:
parent
feb2fc0ce6
commit
676dbf0a96
31
src/main.rs
31
src/main.rs
@ -43,10 +43,11 @@ impl Direction {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
struct SegmentMaterial(Handle<ColorMaterial>);
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
struct SnakeSegment {
|
struct SnakeSegment {
|
||||||
next_segment: Option<Entity>
|
next_segment: Option<Entity>,
|
||||||
}
|
}
|
||||||
|
|
||||||
struct SnakeHead {
|
struct SnakeHead {
|
||||||
@ -56,6 +57,17 @@ struct SnakeHead {
|
|||||||
struct SnakeMoveTimer(Timer);
|
struct SnakeMoveTimer(Timer);
|
||||||
struct HeadMaterial(Handle<ColorMaterial>);
|
struct HeadMaterial(Handle<ColorMaterial>);
|
||||||
|
|
||||||
|
fn spawn_segment(commands: &mut Commands, material: Handle<ColorMaterial>, position: Position) {
|
||||||
|
commands
|
||||||
|
.spawn(SpriteComponents {
|
||||||
|
material,
|
||||||
|
..Default::default()
|
||||||
|
})
|
||||||
|
.with(SnakeSegment { next_segment: None })
|
||||||
|
.with(position)
|
||||||
|
.with(Size::square(0.65));
|
||||||
|
}
|
||||||
|
|
||||||
fn snake_movement(
|
fn snake_movement(
|
||||||
time: Res<Time>,
|
time: Res<Time>,
|
||||||
keyboard_input: Res<Input<KeyCode>>,
|
keyboard_input: Res<Input<KeyCode>>,
|
||||||
@ -128,16 +140,27 @@ fn setup(mut commands: Commands, mut materials: ResMut<Assets<ColorMaterial>>) {
|
|||||||
commands.insert_resource(HeadMaterial(
|
commands.insert_resource(HeadMaterial(
|
||||||
materials.add(Color::rgb(0.7, 0.7, 0.7).into()),
|
materials.add(Color::rgb(0.7, 0.7, 0.7).into()),
|
||||||
));
|
));
|
||||||
|
commands.insert_resource(SegmentMaterial(
|
||||||
|
materials.add(Color::rgb(0.3, 0.3, 0.3).into()),
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
fn game_setup(mut commands: Commands, head_material: Res<HeadMaterial>) {
|
fn game_setup(
|
||||||
|
mut commands: Commands,
|
||||||
|
head_material: Res<HeadMaterial>,
|
||||||
|
segment_material: Res<SegmentMaterial>,
|
||||||
|
) {
|
||||||
|
spawn_segment(&mut commands, segment_material.0, Position { x: 10, y: 9 });
|
||||||
|
let first_segment = commands.current_entity().unwrap();
|
||||||
commands
|
commands
|
||||||
.spawn(SpriteComponents {
|
.spawn(SpriteComponents {
|
||||||
material: head_material.0,
|
material: head_material.0,
|
||||||
sprite: Sprite::new(Vec2::new(10.0, 10.0)),
|
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
.with(SnakeHead { direction: Direction::Up })
|
.with(SnakeHead {
|
||||||
|
direction: Direction::Up,
|
||||||
|
next_segment: first_segment,
|
||||||
|
})
|
||||||
.with(Position { x: 10, y: 10 })
|
.with(Position { x: 10, y: 10 })
|
||||||
.with(Size::square(0.8));
|
.with(Size::square(0.8));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user