from pybevy.pbr import NoWireframe, Wireframe, WireframeColor, WireframeConfig
from pybevy.prelude import *
def setup(
commands: Commands,
meshes: ResMut[Assets[Mesh]],
materials: ResMut[Assets[StandardMaterial]],
) -> None:
commands.spawn(
Camera3d(),
Transform.from_xyz(0.0, 3.0, 10.0).looking_at(Vec3(0.0, 1.0, 0.0), Vec3.Y),
)
commands.spawn(
PointLight(intensity=10000.0),
Transform.from_xyz(4.0, 8.0, 4.0),
)
material = materials.add(StandardMaterial(
base_color=Color.srgb(0.5, 0.5, 0.5),
))
commands.spawn(
Mesh3d(meshes.add(Sphere(1.0))),
MeshMaterial3d(material),
Wireframe(), Transform.from_xyz(-3.0, 1.0, 0.0),
)
commands.spawn(
Mesh3d(meshes.add(Cuboid(2.0, 2.0, 2.0))),
MeshMaterial3d(material),
Wireframe(),
WireframeColor(Color.srgb(0.0, 1.0, 0.0)), Transform.from_xyz(0.0, 1.0, 0.0),
)
commands.spawn(
Mesh3d(meshes.add(Cylinder(1.0, 2.0))),
MeshMaterial3d(material),
Wireframe(),
WireframeColor(Color.srgb(1.0, 0.0, 0.0)), Transform.from_xyz(3.0, 1.0, 0.0),
)
commands.spawn(
Mesh3d(meshes.add(Sphere(0.5))),
MeshMaterial3d(material),
NoWireframe(), Transform.from_xyz(-3.0, 1.0, -3.0),
)
commands.spawn(
Mesh3d(meshes.add(Plane3d().mesh().size(2.0, 2.0).build())),
MeshMaterial3d(material),
Transform.from_xyz(0.0, 1.0, -3.0),
)
commands.spawn(
Mesh3d(meshes.add(Cylinder(0.5, 2.0))),
MeshMaterial3d(material),
Wireframe(),
WireframeColor(Color.srgb(0.0, 1.0, 1.0)), Transform.from_xyz(3.0, 1.5, -3.0),
)
ground = materials.add(StandardMaterial(
base_color=Color.srgb(0.3, 0.3, 0.3),
))
commands.spawn(
Mesh3d(meshes.add(Plane3d(Vec3.Y, Vec2(20.0, 20.0)))),
MeshMaterial3d(ground),
NoWireframe(), Transform.from_xyz(0.0, 0.0, 0.0),
)
commands.spawn(
Text2d("W: Toggle Global Wireframe\nObjects with Wireframe component always show\nNoWireframe components never show"),
TextFont.from_font_size(18.0),
TextColor.WHITE,
Transform.from_xyz(0.0, 400.0, 0.0),
)
commands.insert_resource(WireframeConfig(
global_=False, default_color=Color.WHITE, ))
def toggle_wireframe(
keyboard: Res[ButtonInput],
config: ResMut[WireframeConfig],
) -> None:
if keyboard.just_pressed(KeyCode.KeyW):
config.global_ = not config.global_
@entrypoint
def main(app: App) -> App:
return (
app.add_plugins(DefaultPlugins)
.add_systems(Startup, setup)
.add_systems(Update, toggle_wireframe)
)
if __name__ == "__main__":
main().run()