Skip to content

Commit

Permalink
add bevy
Browse files Browse the repository at this point in the history
  • Loading branch information
LasmGratel committed Nov 2, 2021
1 parent 15d3e97 commit 15ae270
Show file tree
Hide file tree
Showing 21 changed files with 4,401 additions and 626 deletions.
4,166 changes: 3,587 additions & 579 deletions Cargo.lock

Large diffs are not rendered by default.

5 changes: 4 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,8 @@
members = [
"cardgame",
"cardgame-client",
"cardgame-server"
"cardgame-server",
"cardgame-common",
"cardgame-bevy-client",
"cardgame-bevy-server"
]
16 changes: 16 additions & 0 deletions cardgame-bevy-client/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
[package]
name = "cardgame-bevy-client"
version = "0.1.0"
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
cardgame = {path = "../cardgame"}
cardgame-common = {path = "../cardgame-common"}
bevy = "0.5"
bevy_spicy_networking = "0.6"
uuid = {version = "0.8", features = ["serde", "v4"]}
humantime = "2.1.0"
timeago = "0.3.0"
anyhow = "1.0"
Binary file added cardgame-bevy-client/assets/fonts/GlowSans.otf
Binary file not shown.
38 changes: 38 additions & 0 deletions cardgame-bevy-client/src/chat.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
pub struct ChatMessages {
pub messages: Vec<ChatMessage>
}

impl ChatMessages {
pub fn new() -> Self {
ChatMessages {
messages: vec![]
}
}
pub fn add(&mut self, msg: ChatMessage) {
self.messages.push(msg);
}
}

pub enum ChatMessage {
SystemMessage(String),
UserMessage(String),
GameMessage(String)
}

impl ChatMessage {
pub fn get_author(&self) -> String {
match self {
ChatMessage::SystemMessage(_) => "SYSTEM".to_string(),
ChatMessage::UserMessage(_) => "USER".to_string(),
_ => "OTHER".to_string()
}
}

pub fn get_text(&self) -> String {
match self {
ChatMessage::SystemMessage(msg) => msg.clone(),
ChatMessage::UserMessage(msg) => msg.clone(),
ChatMessage::GameMessage(msg) => msg.clone(),
}
}
}
9 changes: 9 additions & 0 deletions cardgame-bevy-client/src/game_render.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
use bevy::prelude::*;

pub struct GameRenderPlugin;

impl Plugin for GameRenderPlugin {
fn build(&self, app: &mut AppBuilder) {

}
}
113 changes: 113 additions & 0 deletions cardgame-bevy-client/src/main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
#![allow(clippy::type_complexity)]

use bevy::prelude::*;
use bevy_spicy_networking::{ClientNetworkEvent, NetworkClient, NetworkData, NetworkSettings, AppNetworkClientMessage};
use std::net::SocketAddr;
use cardgame_common::message::{C2SMessage, S2CMessage};
use bevy::log::LogPlugin;
use std::sync::mpsc;
use std::{thread, time, io};
use std::sync::mpsc::{TryRecvError, Receiver};
use crate::ui::{UIPlugin, ConnectButton};
use crate::chat::{ChatMessages, ChatMessage};
use crate::chat::ChatMessage::SystemMessage;

#[derive(Clone, PartialEq)]
struct ConsoleInput(String);

fn main() {
let mut app = App::build();

app.add_plugins(DefaultPlugins);

// You need to add the `ClientPlugin` first before you can register
// `ClientMessage`s
app.add_plugin(bevy_spicy_networking::ClientPlugin);
app.add_plugin(UIPlugin);
// app.add_startup_system(connect_to_server.system());
app.add_system(handle_incoming_messages.system());
app.add_system(handle_network_events.system());
register_messages(&mut app);
app.run();
}

fn register_messages(builder: &mut AppBuilder) {
builder.listen_for_client_message::<S2CMessage>();
}

///////////////////////////////////////////////////////////////
////////////// Incoming Message Handler ///////////////////////
///////////////////////////////////////////////////////////////

fn connect_to_server(mut net: ResMut<NetworkClient>) {
let ip_address = "127.0.0.1".parse().unwrap();

info!("Address of the server: {}", ip_address);

let socket_address = SocketAddr::new(ip_address, 9999);

net.connect(
socket_address,
NetworkSettings {
max_packet_length: 10 * 1024 * 1024,
},
);
}

fn handle_incoming_messages(
mut messages: Query<&mut ChatMessages>,
mut new_messages: EventReader<NetworkData<S2CMessage>>,
) {
let mut messages = messages.single_mut().unwrap();
for message in new_messages.iter() {
if **message == S2CMessage::Pong {
messages.add(SystemMessage("Pong!".to_string()));
} else if **message == S2CMessage::Pong2 {
messages.add(SystemMessage("Pong2!".to_string()));
} else {
messages.add(SystemMessage("Other message".to_string()));
}
}
}

fn handle_network_events(
connect_button_query: Query<&Children, With<ConnectButton>>,
mut text_query: Query<&mut Text>,
mut new_network_events: EventReader<ClientNetworkEvent>,
net: Res<NetworkClient>,
mut messages: Query<&mut ChatMessages>,
) {
let connect_children = connect_button_query.single().unwrap();
let mut text = text_query.get_mut(connect_children[0]).unwrap();
let mut messages = messages.single_mut().unwrap();
for event in new_network_events.iter() {
match event {
ClientNetworkEvent::Connected => {
println!("Connected to server");
messages.add(ChatMessage::SystemMessage(
"Successfully connected to server!".to_string(),
));
text.sections[0].value = String::from("Disconnect");
net.send_message(C2SMessage::Ping);
}

ClientNetworkEvent::Disconnected => {
messages.add(ChatMessage::SystemMessage(
"Disconnected".to_string(),
));
text.sections[0].value = String::from("Connect to server");
println!("Server disconnected");
}
ClientNetworkEvent::Error(err) => {
messages.add(ChatMessage::SystemMessage(
format!("Error: {:?}", err)
));
error!("{:?}", err);
}
}
}
}

pub mod ui;
pub mod chat;
pub mod game_render;
Loading

0 comments on commit 15ae270

Please sign in to comment.