Skip to main content

ProofEngine

Struct ProofEngine 

Source
pub struct ProofEngine {
    pub config: EngineConfig,
    pub scene: SceneGraph,
    pub camera: ProofCamera,
    pub input: InputState,
    pub ui: UiLayer,
    pub fx: ScreenFx,
    pub audio: Option<AudioEngine>,
    /* private fields */
}
Expand description

The main engine struct. Create once, run forever.

Fields§

§config: EngineConfig§scene: SceneGraph§camera: ProofCamera§input: InputState§ui: UiLayer

Screen-space UI, in pixel coordinates. Cleared at the start of every frame by run_ui, so games redraw it immediate-mode style.

§fx: ScreenFx

Transient screen effects: shockwaves, flashes, light shafts. Fire and forget; ticked and uploaded by run_ui every frame.

§audio: Option<AudioEngine>

Optional audio engine — None if no output device is available.

Implementations§

Source§

impl ProofEngine

Source

pub fn run_game<G: ProofGame>(game: G)

Run the engine with a ProofGame implementation.

This is the preferred entry point for games that implement ProofGame. It calls on_start(), runs the game loop calling update() each frame, then calls on_stop() on clean exit.

use proof_engine::prelude::*;
use proof_engine::integration::ProofGame;

struct MyGame;
impl ProofGame for MyGame {
    fn title(&self) -> &str { "My Game" }
    fn update(&mut self, _engine: &mut ProofEngine, _dt: f32) {}
}

ProofEngine::run_game(MyGame);
Source§

impl ProofEngine

Source

pub fn dispatch(&mut self, event: GameEvent)

Dispatch a GameEvent to the appropriate engine subsystem.

This is the primary integration point — chaos-rpg-core can queue events each frame and the engine handles the visual/audio response.

Source§

impl ProofEngine

Source

pub fn new(config: EngineConfig) -> Self

Source

pub fn init_gpu_density(&mut self, particles: u32)

Turn on GPU density entities with a per-entity particle budget.

The budget is capped at MAX_PARTICLES_PER_ENTITY: past that there are more particles than pixels and the picture stops improving while the frame time keeps climbing. Asking for more is fine; you get the cap and a log line.

Source

pub fn queue_gpu_density_entity(&mut self, entity: GpuDensityEntityData)

Draw a density entity this frame. Call every frame it should show.

Source

pub fn emit_audio(&self, event: AudioEvent)

Send an audio event. No-op if audio is unavailable.

Source

pub fn run<F>(&mut self, update: F)
where F: FnMut(&mut ProofEngine, f32),

Run the engine. Calls update every frame with elapsed seconds. Blocks until the window is closed.

Source

pub fn run_with_overlay<F>(&mut self, update: F)
where F: FnMut(&mut ProofEngine, f32, &Context),

Run the engine with an overlay callback. The overlay callback receives the glow GL context reference and is called AFTER scene rendering but BEFORE buffer swap — perfect for egui.

Source

pub fn run_ui<F>(&mut self, update: F)
where F: FnMut(&mut ProofEngine, f32),

Run a UI-driven game.

Unlike [run], update is called before the scene is drawn, and the screen-space ui layer is painted afterwards. That ordering matters for a game: what you push this frame is what appears this frame, rather than showing up one frame late.

The UI layer is cleared before each update, so games redraw it in full every frame instead of tracking what to erase.

Source

pub fn add_field(&mut self, field: ForceField) -> FieldId

Add a force field to the scene.

Source

pub fn remove_field(&mut self, id: FieldId)

Remove a force field.

Source

pub fn spawn_glyph(&mut self, glyph: Glyph) -> GlyphId

Spawn a glyph into the scene.

Source

pub fn spawn_entity(&mut self, entity: AmorphousEntity) -> EntityId

Spawn an amorphous entity, creating its formation glyphs.

Source

pub fn emit_particles(&mut self, emitter: EmitterPreset, origin: Vec3)

Emit a burst of particles at a position.

Source

pub fn add_trauma(&mut self, amount: f32)

Apply trauma (screen shake). 0.0 = none, 1.0 = maximum.

Source§

impl ProofEngine

Request quit on next frame.

Source

pub fn request_quit(&mut self)

Source

pub fn gl(&self) -> Option<&Context>

Get a reference to the glow GL context (for egui integration). Returns None if the pipeline hasn’t been initialized yet.

Source

pub fn window(&self) -> Option<&Window>

Get the window reference (for egui-winit event processing).

Source

pub fn window_size(&self) -> (u32, u32)

Get the current window size in pixels.

Source

pub fn render_size(&self) -> (u32, u32)

The framebuffer size, in the same units the viewport uses.

Screen-space UI must lay out against this, not the window size: on a scaled display the two differ and the UI ends up magnified.

Source

pub fn save_frame(&self, path: &str) -> Result<()>

Write the frame currently on screen to an uncompressed 24-bit BMP.

The point of this is being able to see what the engine actually drew. Asking the window manager for a picture of a hardware-accelerated window is unreliable — it hands back whatever it last cached, which can be a stale frame or a blank one — so the only trustworthy answer comes from reading the framebuffer back off the GPU.

BMP because it needs no compression and therefore no dependency; the row order matches OpenGL’s, so no flip is needed either.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<S> FromSample<S> for S

Source§

fn from_sample_(s: S) -> S

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, U> ToSample<U> for T
where U: FromSample<T>,

Source§

fn to_sample_(self) -> U

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more