Spawn the gameplay elements
Now to start wiring them in for basic operation, then to pipe it all through the WebSocket.
This commit is contained in:
@@ -12,6 +12,8 @@ use crate::ui::{despawn_main_menu, spawn_main_menu};
|
|||||||
|
|
||||||
mod ui;
|
mod ui;
|
||||||
|
|
||||||
|
const PADDLE_GAP: f32 = 20.0; // gap between the paddles and the wall (window border)
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
App::new()
|
App::new()
|
||||||
.add_plugins(DefaultPlugins)
|
.add_plugins(DefaultPlugins)
|
||||||
@@ -23,6 +25,7 @@ fn main() {
|
|||||||
.add_observer(ui::button_hover_stop)
|
.add_observer(ui::button_hover_stop)
|
||||||
// TODO: System to operate buttons & other UI widgets
|
// TODO: System to operate buttons & other UI widgets
|
||||||
// .add_systems(Update, )
|
// .add_systems(Update, )
|
||||||
|
.add_systems(OnEnter(GameState::Playing), setup_game)
|
||||||
.add_systems(
|
.add_systems(
|
||||||
Update,
|
Update,
|
||||||
(
|
(
|
||||||
@@ -65,17 +68,38 @@ fn spawn_camera(mut commands: Commands) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Initialize the scene
|
/// Initialize the scene
|
||||||
fn setup(
|
fn setup_game(
|
||||||
mut commands: Commands,
|
mut commands: Commands,
|
||||||
mut meshes: ResMut<Assets<Mesh>>,
|
mut meshes: ResMut<Assets<Mesh>>,
|
||||||
mut materials: ResMut<Assets<ColorMaterial>>,
|
mut materials: ResMut<Assets<ColorMaterial>>,
|
||||||
|
window: Single<&Window>,
|
||||||
) {
|
) {
|
||||||
commands.spawn(Camera2d);
|
// ball
|
||||||
commands.spawn((
|
commands.spawn((
|
||||||
Mesh2d(meshes.add(Circle::new(10.0))),
|
Mesh2d(meshes.add(Circle::new(10.0))),
|
||||||
MeshMaterial2d(materials.add(Color::srgb(1.0, 0.0, 0.0))),
|
MeshMaterial2d(materials.add(Color::srgb(1.0, 0.0, 0.0))),
|
||||||
Transform::default(),
|
Transform::default(),
|
||||||
));
|
));
|
||||||
|
|
||||||
|
let paddle_mesh = meshes.add(Rectangle::new(10.0, 100.0));
|
||||||
|
let paddle_material = materials.add(Color::WHITE);
|
||||||
|
// Player 1
|
||||||
|
commands.spawn((
|
||||||
|
// TODO: Marker component for player
|
||||||
|
// Maybe one for each player?
|
||||||
|
// Maybe it can hold the WebSocket, too.
|
||||||
|
// *Maybe* I can have one struct with an Option<Ws> to know which
|
||||||
|
// player is the local one (the one with a socket).
|
||||||
|
Mesh2d(paddle_mesh.clone()),
|
||||||
|
MeshMaterial2d(paddle_material.clone()),
|
||||||
|
Transform::from_xyz(-window.width() / 2.0 + PADDLE_GAP, 0.0, 1.0),
|
||||||
|
));
|
||||||
|
// Player 2
|
||||||
|
commands.spawn((
|
||||||
|
Mesh2d(paddle_mesh),
|
||||||
|
MeshMaterial2d(paddle_material),
|
||||||
|
Transform::from_xyz(window.width() / 2.0 - PADDLE_GAP, 0.0, 1.0),
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// ECS Component to hold the WebSocket. I guess there's going to be a magic
|
/// ECS Component to hold the WebSocket. I guess there's going to be a magic
|
||||||
|
|||||||
Reference in New Issue
Block a user