mirror of
https://github.com/szymon-jozef/checkers.git
synced 2026-10-27 19:20:44 +01:00
refactor: split chat from game.rs
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
use checkers::ui::{
|
use checkers::ui::{
|
||||||
macroquad::{
|
macroquad::{
|
||||||
difficulty_selection::draw_dificulty_selection, game::GameClient,
|
difficulty_selection::draw_dificulty_selection, game::game::GameClient,
|
||||||
main_menu::draw_main_menu, mode_selection::draw_mode_selection,
|
main_menu::draw_main_menu, mode_selection::draw_mode_selection,
|
||||||
server_selection::draw_server_selection,
|
server_selection::draw_server_selection,
|
||||||
},
|
},
|
||||||
|
|||||||
58
src/ui/macroquad/game/chat.rs
Normal file
58
src/ui/macroquad/game/chat.rs
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
use macroquad::{
|
||||||
|
color::WHITE,
|
||||||
|
math::{Rect, vec2},
|
||||||
|
shapes::draw_rectangle,
|
||||||
|
ui::{hash, root_ui, widgets::InputText},
|
||||||
|
window::{screen_height, screen_width},
|
||||||
|
};
|
||||||
|
use tokio::sync::mpsc::Sender;
|
||||||
|
|
||||||
|
use crate::ui::macroquad::game::game::GuiCommands;
|
||||||
|
|
||||||
|
struct Message {
|
||||||
|
sender: String,
|
||||||
|
content: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Default)]
|
||||||
|
pub struct Chat {
|
||||||
|
area: Rect,
|
||||||
|
messages: Vec<Message>,
|
||||||
|
message_buffer: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Chat {
|
||||||
|
pub fn update(&mut self, game_area: &Rect) {
|
||||||
|
self.area = Rect {
|
||||||
|
x: game_area.w,
|
||||||
|
y: 0.0,
|
||||||
|
w: screen_width() * 0.2,
|
||||||
|
h: screen_height(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn push_message(&mut self, sender: String, content: String) {
|
||||||
|
self.messages.push(Message { sender, content });
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn send_message(&mut self, cmd_sender: Sender<GuiCommands>) {
|
||||||
|
if !self.message_buffer.is_empty() {
|
||||||
|
let _ = // TODO! Check the message before sending
|
||||||
|
cmd_sender
|
||||||
|
.try_send(GuiCommands::Send(self.message_buffer.clone()));
|
||||||
|
self.message_buffer.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn draw(&mut self) {
|
||||||
|
draw_rectangle(self.area.x, self.area.y, self.area.w, self.area.h, WHITE);
|
||||||
|
|
||||||
|
let input_size = vec2(self.area.w, self.area.h * 0.1);
|
||||||
|
let input_pos = vec2(self.area.x, self.area.h - input_size.y);
|
||||||
|
|
||||||
|
InputText::new(hash!())
|
||||||
|
.position(input_pos)
|
||||||
|
.size(input_size)
|
||||||
|
.ui(&mut root_ui(), &mut self.message_buffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,14 +2,11 @@ use tokio::sync::mpsc::{self, Sender};
|
|||||||
|
|
||||||
use log::{debug, error, info};
|
use log::{debug, error, info};
|
||||||
use macroquad::{
|
use macroquad::{
|
||||||
color::{BLACK, GRAY, WHITE},
|
color::GRAY,
|
||||||
input::{KeyCode, get_keys_pressed},
|
input::{KeyCode, get_keys_pressed},
|
||||||
math::{Rect, Vec2, vec2},
|
math::{Rect, Vec2, vec2},
|
||||||
shapes::{draw_rectangle, draw_rectangle_lines},
|
shapes::draw_rectangle,
|
||||||
ui::{
|
ui::{hash, root_ui, widgets::Checkbox},
|
||||||
Ui, hash, root_ui,
|
|
||||||
widgets::{Checkbox, InputText},
|
|
||||||
},
|
|
||||||
window::{screen_height, screen_width},
|
window::{screen_height, screen_width},
|
||||||
};
|
};
|
||||||
use tokio::sync::mpsc::{Receiver, error::TryRecvError::Disconnected};
|
use tokio::sync::mpsc::{Receiver, error::TryRecvError::Disconnected};
|
||||||
@@ -20,7 +17,7 @@ use crate::{
|
|||||||
client::Client, message::ServerMessage, network_identity::NetworkIdentity,
|
client::Client, message::ServerMessage, network_identity::NetworkIdentity,
|
||||||
server::ServerStage,
|
server::ServerStage,
|
||||||
},
|
},
|
||||||
ui::state::GameContext,
|
ui::{macroquad::game::chat::Chat, state::GameContext},
|
||||||
};
|
};
|
||||||
|
|
||||||
pub struct GameClient {
|
pub struct GameClient {
|
||||||
@@ -49,19 +46,7 @@ struct Lobby {
|
|||||||
checkbox_size: Vec2,
|
checkbox_size: Vec2,
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Message {
|
pub enum GuiCommands {
|
||||||
sender: String,
|
|
||||||
content: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Default)]
|
|
||||||
struct Chat {
|
|
||||||
chat_area: Rect,
|
|
||||||
messages: Vec<Message>,
|
|
||||||
message_buffer: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
enum GuiCommands {
|
|
||||||
Send(String),
|
Send(String),
|
||||||
|
|
||||||
Ready,
|
Ready,
|
||||||
@@ -160,7 +145,7 @@ impl GameClient {
|
|||||||
self.draw_summary_screen();
|
self.draw_summary_screen();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.draw_chat();
|
self.chat.draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn draw_lobby(&mut self) {
|
fn draw_lobby(&mut self) {
|
||||||
@@ -202,35 +187,6 @@ impl GameClient {
|
|||||||
todo!();
|
todo!();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn draw_chat(&mut self) {
|
|
||||||
draw_rectangle(
|
|
||||||
self.chat.chat_area.x,
|
|
||||||
self.chat.chat_area.y,
|
|
||||||
self.chat.chat_area.w,
|
|
||||||
self.chat.chat_area.h,
|
|
||||||
WHITE,
|
|
||||||
);
|
|
||||||
|
|
||||||
let input_size = vec2(self.chat.chat_area.w, self.chat.chat_area.h * 0.1);
|
|
||||||
let input_pos = vec2(self.chat.chat_area.x, self.chat.chat_area.h - input_size.y);
|
|
||||||
|
|
||||||
InputText::new(hash!())
|
|
||||||
.position(input_pos)
|
|
||||||
.size(input_size)
|
|
||||||
.ui(&mut root_ui(), &mut self.chat.message_buffer);
|
|
||||||
|
|
||||||
/*
|
|
||||||
draw_rectangle_lines(
|
|
||||||
input_pos.x,
|
|
||||||
input_pos.y,
|
|
||||||
input_size.x,
|
|
||||||
input_size.y,
|
|
||||||
1.5,
|
|
||||||
BLACK,
|
|
||||||
);
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
/* === UPDATING STUFF ==== */
|
/* === UPDATING STUFF ==== */
|
||||||
|
|
||||||
pub fn update(&mut self) {
|
pub fn update(&mut self) {
|
||||||
@@ -246,12 +202,10 @@ impl GameClient {
|
|||||||
for key in get_keys_pressed() {
|
for key in get_keys_pressed() {
|
||||||
match key {
|
match key {
|
||||||
KeyCode::Enter => {
|
KeyCode::Enter => {
|
||||||
if !self.chat.message_buffer.is_empty() {
|
self.chat.send_message(self.cmd_sender.clone()); // not sure about cloning this
|
||||||
let _ = self // TODO! Check the message before sending
|
// every message sent. Maybe
|
||||||
.cmd_sender
|
// Chat should have it's own
|
||||||
.try_send(GuiCommands::Send(self.chat.message_buffer.clone()));
|
// clone?
|
||||||
self.chat.message_buffer.clear();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_ => {}
|
_ => {}
|
||||||
@@ -273,7 +227,7 @@ impl GameClient {
|
|||||||
ServerMessage::BroadcastCurrentTurn { active_player } => todo!(),
|
ServerMessage::BroadcastCurrentTurn { active_player } => todo!(),
|
||||||
ServerMessage::BroadCastTextMessage { sender, content } => {
|
ServerMessage::BroadCastTextMessage { sender, content } => {
|
||||||
debug!("Got message from: {} with content: {}", sender, content);
|
debug!("Got message from: {} with content: {}", sender, content);
|
||||||
self.chat.messages.push(Message { sender, content });
|
self.chat.push_message(sender, content);
|
||||||
}
|
}
|
||||||
|
|
||||||
ServerMessage::GameEnd { result } => todo!(),
|
ServerMessage::GameEnd { result } => todo!(),
|
||||||
@@ -304,11 +258,6 @@ impl GameClient {
|
|||||||
h: screen_height(),
|
h: screen_height(),
|
||||||
};
|
};
|
||||||
|
|
||||||
self.chat.chat_area = Rect {
|
self.chat.update(&self.game_area);
|
||||||
x: self.game_area.w,
|
|
||||||
y: 0.0,
|
|
||||||
w: screen_width() * 0.2,
|
|
||||||
h: screen_height(),
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
2
src/ui/macroquad/game/mod.rs
Normal file
2
src/ui/macroquad/game/mod.rs
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
mod chat;
|
||||||
|
pub mod game;
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
use std::sync::mpsc::{self, Receiver, Sender};
|
use std::sync::mpsc::{self, Receiver, Sender};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
network::client::Client, super_advanced_ai::BotDificulty, ui::macroquad::game::GameClient,
|
network::client::Client, super_advanced_ai::BotDificulty, ui::macroquad::game::game::GameClient,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
@@ -36,16 +36,6 @@ pub struct GameContext {
|
|||||||
pub server_url_buffer: String,
|
pub server_url_buffer: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
enum CliCommands {
|
|
||||||
Send,
|
|
||||||
|
|
||||||
Ready,
|
|
||||||
Unready,
|
|
||||||
|
|
||||||
Capture,
|
|
||||||
Move,
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO! Move this
|
// TODO! Move this
|
||||||
pub fn connect_to_server() -> Receiver<Option<Client>> {
|
pub fn connect_to_server() -> Receiver<Option<Client>> {
|
||||||
let (tx, rc) = mpsc::channel::<Option<Client>>();
|
let (tx, rc) = mpsc::channel::<Option<Client>>();
|
||||||
|
|||||||
Reference in New Issue
Block a user