73 releases (18 breaking)
0.19.1 | Sep 6, 2024 |
---|---|
0.19.0 | Apr 17, 2024 |
0.18.0 | Apr 3, 2024 |
0.17.1 | Mar 30, 2024 |
0.2.0 | Dec 31, 2021 |
#426 in Game dev
141 downloads per month
Used in image-wrapper
235KB
6K
SLoC
Graphics Lib
This is a simple wrapper around Pixels, designed to be used with Buffer Graphics Lib
Usage
Cargo
In your Cargo.toml
file add
pixels-graphics-lib = "0.19.1"
winit_input_helper = "0.16.0" #only needed if you're not using `run()`
Code
You can use scenes using run_scenes
(requires default feature scenes
):
fn main() -> Result<()> {
// Window prefs allow the size and position of the window to be saved and restored
let window_prefs = WindowPreferences::new("com", "example", "app", 1)?;
// Options contains scaling, UPS, etc
let options = Options::default();
// The switcher is how new scenes are created
let switcher: SceneSwitcher<SceneResult, SceneName> =
|style, scene_stack, new_scene| match new_scene {
SceneName::Example => scene_stack.push(ExampleScene::new()),
};
let first_scene = ExampleScene::new();
run_scenes(
300,
300,
"Scenes Example",
Some(window_prefs),
switcher,
first_scene,
options,
empty_pre_post()
)?;
Ok(())
}
// The scene name is the id used so the switcher knows which one to create
#[derive(Clone, Debug, PartialEq)]
enum SceneName {
Example,
}
// After a scene is finished it can return values to it's parent using scene result
#[derive(Clone, Debug, PartialEq)]
enum SceneResult {}
struct ExampleScene {}
impl ExampleScene {
pub fn new() -> Box<Self> {
Box::new(Self {})
}
}
impl Scene<SceneResult, SceneName> for ExampleScene {
fn render(
&mut self,
graphics: &mut Graphics,
mouse_xy: Coord,
held_keys: &[KeyCode]) {
todo!()
}
fn update(
&mut self,
timing: &Timing,
mouse_xy: Coord,
held_keys: &[KeyCode],
) -> SceneUpdateResult<SceneResult, SceneName> {
todo!()
}
}
or a more low level with run
struct Example {}
fn main() -> Result<()> {
let system = Box::new(Example {});
run(240, 160, "Example", Box::new(system), Options::default())?;
Ok(())
}
//Check `src/scenes.rs` for examples of implementing held keys, etc
impl System for Example {
fn update(&mut self, timing: &Timing) {}
fn render(&mut self, graphics: &mut Graphics) {}
}
Features
Default features:
window_prefs
,sound
,serde
,scenes
window_prefs
Save and restore window position and size
To use this the impl System
must override System::window_prefs()
scenes
Enables Scene
and run_scenes
Includes window_prefs
controller
- Adds gamepad support
- Adds gamepad state to
Scene::update
,Scene::render
controller_xinput
As above but using xinput, windows only
sound
Play music or sound effects
serde
Adds Serialize
and Deserialize
to most structs and enums
images
Loading and displaying of PNGs, JPEGs, BMPs
file_dialogs
Built in file selection dialogs, not recommended, use rfd
mint
Enables graphic-shapes/mint
Projects
Retro Games
A few retro games
ICI Image editor
Editor for IndexedImage
, ICI files
USFX Tester
Test GUI for USFX
Fontpad
Program used to create fonts for Buffer graphics
Dependencies
~7–49MB
~757K SLoC