MCPcopy Index your code
hub / github.com/Selene-Amanita/bevy_basic_portals

github.com/Selene-Amanita/bevy_basic_portals @v0.6.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.6.0 ↗ · + Follow
86 symbols 120 edges 16 files 19 documented · 22% updated 5mo agov0.6.0 · 2024-07-05★ 51
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Portals for Bevy

crates.io docs.rs NVPLv7+ Following released Bevy versions

Bevy Basic Portals is a Bevy game engine plugin aimed to create portals.

Those portals are (for now) purely visual and can be used to make mirrors, indoor renderings, crystal balls, and more!

Portal Cube example Moving portals and destination example Mirror example

Basic Usage

This example illustrates how to create a simple portal, it uses a single sphere that will be displayed two times on screen thanks to the portal:

use bevy::prelude::*;
use bevy_basic_portals::*;

fn main() {
    App::new()
        .add_plugins((DefaultPlugins, PortalsPlugin::MINIMAL))
        .add_systems(Startup, setup)
        .run();
}

fn setup(mut commands: Commands, mut meshes: ResMut<Assets<Mesh>>) {
    commands.spawn(Camera3dBundle {
        transform: Transform::from_xyz(-20.0, 0., 20.0).looking_at(Vec3::ZERO, Vec3::Y),
        ..default()
    });

    let portal_mesh = meshes.add(Mesh::from(Rectangle::new(10., 10.)));
    commands.spawn(CreatePortalBundle {
        mesh: portal_mesh,
        // This component will be deleted and things that are needed to create the portal will be created
        create_portal: CreatePortal {
            destination: AsPortalDestination::Create(CreatePortalDestination {
                transform: Transform::from_xyz(20., 0., 0.),
                ..default()
            }),
            // Uncomment this to see the portal
            /*debug: Some(DebugPortal {
                show_window: false,
                ..default()
            }),*/
            ..default()
        },
        ..default()
    });

    let sphere_mesh = meshes.add(Mesh::from(Sphere::new(2.).mesh().uv(32, 18)));
    commands.spawn(PbrBundle {
        mesh: sphere_mesh,
        transform: Transform::from_xyz(20., 0., -5.),
        ..default()
    });
}

More complex examples are available in the examples folder.

Vocabulary

  • A Portal is an entity used to visualise the effect
  • A Main Camera is a camera used to visualize the effect
  • A (portal) Destination is an entity representing the point in space where a portal is "looking"
  • A Portal Camera is a camera being used to render the effect, its position to the destination is the same as the main camera's position to the portal

Known limitations

(may be fixed in the future) - portals created by this crate are uni-directionnal, you can only look from one space to the other, if you want a bidirectional portal you can crate two portals manually - this crate doesn't handle "portal recursion", as in viewing a portal through another portal - portals created by this crate have no visible borders (not counting aliasing artifacts), you can "see" them with DebugPortal - this crate doesn't handle moving stuff through the portal, it is only visual, more like a crystal ball - this crate doesn't handle raycasting through the portal, it has to be done manually - this crate doesn't handle changing the portal's or the destination's scale

Bevy versions

Bevy version Bevy Basic Portals recommended version
0.14.* 0.6.0
0.13.* 0.5.0
0.12.* 0.4.0
0.11.1 0.3.0
0.10.* 0.2.1

License

Bevy Basic Portals is non-violent software: you can use, redistribute, and/or modify it under the terms of the NVPLv7+ as found in the LICENSE file in the source code root directory or at the CNPL repository.

Bevy Basic Portals comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law.

See the CNPL website for more information.

Core symbols most depended-on inside this repo

percent_from_to
called by 10
examples/moving/main.rs
debug_material
called by 6
helpers/textures.rs
setup_portal_cube_face
called by 6
examples/cube/scenes.rs
setup_scene_test
called by 6
examples/cube/scenes.rs
deal_with_part_query_error
called by 5
src/portals/despawn.rs
despawn_portal_part
called by 4
src/portals/despawn.rs
setup_object_and_portal
called by 3
examples/shapes/main.rs
create_portal
called by 2
src/portals/create.rs

Shape

Function 36
Class 24
Method 21
Enum 5

Languages

Rust100%

Modules by API surface

src/portals/api.rs16 symbols
src/portals/create.rs11 symbols
helpers/pivot_cameras.rs10 symbols
src/portals/despawn.rs9 symbols
src/portals/projection.rs8 symbols
src/portals/update.rs7 symbols
src/portals/material.rs6 symbols
examples/moving/main.rs5 symbols
examples/shapes/main.rs3 symbols
examples/cube/scenes.rs3 symbols
helpers/textures.rs2 symbols
examples/mirror/main.rs2 symbols

For agents

$ claude mcp add bevy_basic_portals \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page