use games::*;

fn main() {
    App::new()
        .add_plugins((BaseGamePlugin {
            target_resolution: (640, 480).into(),
            name: "parallax example".into(),
            title: "Parallax".into(),
            game_type: GameType::Two,
        },))
        .add_systems(Startup, spawn_background)
        .add_systems(Update, move_camera)
        .run();
}

fn spawn_background(
    mut commands: Commands,
    mut meshes: ResMut<Assets<Mesh>>,
    mut materials: ResMut<Assets<ColorMaterial>>,
    server: Res<AssetServer>,
) {
    commands.spawn((
        Name::new("Depth: 1.0"),
        Transform::default()
            .with_translation(Vec3::new(0.0, 0.0, 0.0))
            .with_scale(Vec3::splat(50.0)),
        Mesh2d(meshes.add(Circle::new(1.0))),
        MeshMaterial2d(materials.add(ColorMaterial {
            texture: Some(server.load("bevy.png")),
            color: RED.into(),
            ..default()
        })),
        ParallaxDepth(1.0),
        Visibility::Inherited,
    ));
    commands.spawn((
        Name::new("Depth: 2.0"),
        Transform::default()
            .with_translation(Vec3::new(0.0, 0.0, -1.0))
            .with_scale(Vec3::splat(25.0)),
        Mesh2d(meshes.add(Circle::new(2.0))),
        MeshMaterial2d(materials.add(ColorMaterial {
            texture: Some(server.load("bevy.png")),
            color: GREEN.into(),
            ..default()
        })),
        ParallaxDepth(2.0),
        Visibility::Inherited,
    ));
    commands.spawn((
        Name::new("Depth: 4.0"),
        Transform::default()
            .with_translation(Vec3::new(0.0, 0.0, -2.0))
            .with_scale(Vec3::splat(12.5)),
        Mesh2d(meshes.add(Circle::new(4.0))),
        MeshMaterial2d(materials.add(ColorMaterial {
            texture: Some(server.load("bevy.png")),
            color: BLUE.into(),
            ..default()
        })),
        ParallaxDepth(4.0),
        Visibility::Inherited,
    ));
    commands.spawn((
        Name::new("Depth: 8.0"),
        Transform::default()
            .with_translation(Vec3::new(0.0, 0.0, -3.0))
            .with_scale(Vec3::splat(6.25)),
        Mesh2d(meshes.add(Circle::new(8.0))),
        MeshMaterial2d(materials.add(ColorMaterial {
            texture: Some(server.load("bevy.png")),
            color: YELLOW.into(),
            ..default()
        })),
        ParallaxDepth(8.0),
        Visibility::Inherited,
    ));
}

fn move_camera(mut t: Single<&mut Transform, With<Camera2d>>, keys: Res<ButtonInput<KeyCode>>) {
    if keys.pressed(KeyCode::ArrowLeft) {
        t.translation.x -= 5.0;
    } else if keys.pressed(KeyCode::ArrowRight) {
        t.translation.x += 5.0;
    }

    if keys.pressed(KeyCode::ArrowDown) {
        t.translation.y -= 5.0;
    } else if keys.pressed(KeyCode::ArrowUp) {
        t.translation.y += 5.0;
    }
}
