Skip to content
Snippets Groups Projects
debug.rs 2.06 KiB
Newer Older
Louis's avatar
Louis committed
use bevy::math::uvec2;
use bevy::prelude::*;
use iyes_loopless::prelude::AppLooplessStateExt;
use iyes_loopless::state::NextState;

use crate::assets::AssetHandles;
Louis's avatar
Louis committed
use crate::system::flow::AppState;
use crate::world::generators::blobular::Blobular;
use crate::world::generators::drunkard_corridor::DrunkardGenerator;
use crate::world::level_map::LevelMapBundle;
Louis's avatar
Louis committed

pub fn spawn_player(mut commands: Commands) {
	commands.spawn_bundle(LevelMapBundle::generate::<DrunkardGenerator>(150, 150));
}

#[derive(Component)]
pub struct FpsText;

pub fn spawn_fps_overlay(mut commands: Commands, assets: Res<AssetHandles>) {
	commands
		.spawn_bundle(NodeBundle {
			style: Style {
				position_type: PositionType::Absolute,
				position: UiRect::new(Val::Px(20.0), Val::Auto, Val::Px(20.0), Val::Auto),
				flex_direction: FlexDirection::Row,
				..Default::default()
			},
			color: Color::rgba(0.0, 0.0, 0.0, 0.0).into(),
			..Default::default()
		})
		.with_children(|child_builder| {
			child_builder.spawn_bundle(TextBundle {
				text: Text::from_section(
					"FPS: ",
					TextStyle {
						font_size: 20.0,
						font: assets.font("main"),
						color: Color::WHITE,
					},
				),
				..Default::default()
			});

			child_builder
				.spawn_bundle(TextBundle {
					text: Text::from_section(
						"000",
						TextStyle {
							font_size: 20.0,
							font: assets.font("main"),
							color: Color::YELLOW,
						},
					),
					..Default::default()
				})
				.insert(FpsText);
		});
}

pub fn update_fps_text(time: Res<Time>, mut text_query: Query<&mut Text, With<FpsText>>) {
	let fps = format!("{:03.0}", 1.0 / time.delta_seconds());
	for mut text in &mut text_query {
		text.sections[0].value = fps.clone();
	}
Louis's avatar
Louis committed
}

pub fn skip_menu(mut commands: Commands) {
	commands.insert_resource(NextState(AppState::InGame));
}

pub struct DebugPlugin;
impl Plugin for DebugPlugin {
	fn build(&self, app: &mut App) {
		app.add_enter_system(AppState::Menu, skip_menu)
			.add_enter_system(AppState::Menu, spawn_fps_overlay)
			.add_enter_system(AppState::InGame, spawn_player)
			.add_system(update_fps_text);
Louis's avatar
Louis committed
	}
}