basic_bevy_pixel_camera 0.1.1

A simple set of coponents, schedules, systems and helper functions to create any type of pixel camera
Documentation
  • Coverage
  • 2.7%
    1 out of 37 items documented1 out of 22 items with examples
  • Size
  • Source code size: 122.68 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 8.18 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Links
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • leekalan

Pixel Camera

A simple set of coponents, schedules, systems and helper functions to create any type of pixel camera

NOTE this is a work in progress, and if you have any feedback feel free to open an issue or pull request

Usage

The following example shows a simple usage of the libary. This example utilises the PixelCameraSnapping and PixelCanvasSmoothing components to make it appear as if the the objects themselves are pixelated rather than the camera. Yet if you want the retro style feel you can ommit the components

use bevy::{
    prelude::*,
    render::{camera::ScalingMode, view::RenderLayers},
};
use pixel_camera::prelude::*;

fn main() {
    App::new()
        .add_plugins((DefaultPlugins, PixelCameraPlugin) // Ordering important as Pixel Camera add's its own schedule
        .add_systems(Startup, setup)
        .run();
}

pub const PIXELS_PER_UNIT: f32 = 8.0;
pub const HIGH_RES_LAYER: RenderLayers = RenderLayers::layer(0);
pub const PIXEL_PERFECT_LAYER: RenderLayers = RenderLayers::layer(1);

#[derive(Component)]
pub struct MainCamera;

pub fn setup_cameras(mut commands: Commands, images: ResMut<Assets<Image>>) {
    let mut cam_2d = Camera2dBundle::default();
    cam_2d.projection.scaling_mode = ScalingMode::AutoMin {
        min_width: 16.0,
        min_height: 8.0,
    };

    // Window camera to view the pixel canvas
    let main_cam = commands
        .spawn((cam_2d, HIGH_RES_LAYER, MainCamera))
        .id();

    // Creating the Pixel image to be stored in the assests resource
    let image = create_pixel_image(images);

    // Creating the pixel camera which is the place in which the pixelized image is rendered
    let pixel_camera = create_pixel_camera(commands.reborrow(), image.clone(), PIXEL_PERFECT_LAYER);

    // Creating the pixel canvas which is the image upon which the pixelated render is viewed
    let pixel_canvas = create_pixel_canvas(
        &PixelCanvasConfig::new(PIXELS_PER_UNIT, 8.0, 4.0),
        commands.reborrow(),
        image,
        pixel_camera,
        HIGH_RES_LAYER,
    );

    // Add pixel camera snapping. This stops the flickering artifacts of
    // non-pixelized sprites when the camera moves (this is subjective)
    commands.entity(pixel_camera).insert(PixelCameraSnapping);

    // Add pixel canvas smoothing. This lerps the canvas rect to
    // make the pixelated view move smoothly.
    //
    // This requires pixel camera snapping, or every 5-10 seconds there
    // will be a highly noticeable flicker in the pixelated view
    commands.entity(pixel_canvas).insert(PixelCanvasSmoothing);
}