#bevy #chroma #razer #game-engine #gamedev #api-bindings #game

bevy_mod_chroma

A plugin for the Bevy game engine to allow control of Razer Chroma devices

6 releases (breaking)

0.5.0 Jul 11, 2023
0.4.0 Jul 10, 2023
0.3.0 May 21, 2023
0.2.0 May 7, 2023
0.1.1 May 1, 2023

#873 in Game dev

MIT license

59KB
896 lines

bevy_mod_chroma

Crates.io License Bevy tracking

Razer Chroma support plugin for Bevy. Uses the Razer Chroma HTTP API to communicate with the Razer Chroma system.

Usage

You will need Razer Chroma software installed to properly use this plugin.
If you don't have certain types of hardware devices, Razer also provides an emulator that you can use to test your effects.

General flow is that you need to register effects via Chroma::create_effect to get an EffectHandle, and then you can pass that handle to Chroma::apply_effect to apply.

See the examples directory for more detailed examples.

System setup

Add the plugin to your app:

use bevy::prelude::*;
use bevy_mod_chroma::{
    Author, Category, ChromaPlugin, ChromaRunnerInitializationSettings, InitRequest, SupportedDevice,
};

fn main() {
    App::new()
        .add_plugins(ChromaPlugin::new(ChromaRunnerInitializationSettings::new(
            InitRequest {
                title: "Your Bevy app title goes here",
                description: "Your Bevy app description goes here",
                author: Author {
                    name: "Your name",
                    contact: "Your contact",
                },
                device_supported: vec![
                    SupportedDevice::Keyboard,
                    SupportedDevice::Mouse,
                    //...
                ],
                category: Category::Application, // or Category::Game
            },
        )))
        //...
        .run();
}

NOTE: The information you provide to ChromaRunnerInitializationSettings is displayed in the Razer Synapse connect menu!

Create and apply effects

Use the Chroma parameter in systems to create and apply effects:

use bevy_mod_chroma::{Chroma, Effect, EffectHandle, MouseEffect};

fn red_mouse(mut chroma: Chroma) {
    let red_handle = chroma.create_effect(Effect::Mouse(MouseEffect::Static {
        color: Color::RED.into(),
    }));

    chroma.apply_effect(&red_handle);
}

Compatible Bevy versions

The main branch is compatible with the latest Bevy release.

Compatibility of bevy_mod_chroma versions:

bevy_mod_chroma branch Compatible Bevy version
develop 0.11
bevy_0.10 0.10

TODOs

  • Documentation
  • Error handling
  • Retries
  • Reconnect after dropped connections

Wants

  • Websocket version
  • Built-in animations support

Dependencies

~36–72MB
~1.5M SLoC