smo-server/src/faker.rs
2024-12-17 18:45:01 -06:00

64 lines
1.3 KiB
Rust

use glam::Vec3;
use xtra::{Actor, Address, Handler};
use crate::{
broadcast_packet,
packet::{
Packet, PacketData,
PacketData_variants::{Connect, Player},
},
protocol::String,
};
pub struct Faker {
pub address: Address<Faker>,
}
impl Actor for Faker {
type Stop = ();
async fn stopped(self) -> Self::Stop {}
}
impl Handler<Packet> for Faker {
type Return = ();
async fn handle(&mut self, message: Packet, _: &mut xtra::Context<Self>) -> Self::Return {
// trace!("got packet {message:?}");
match message.data {
PacketData::Connect(connect) => {
broadcast_packet(Packet {
user_id: 1,
udp: message.udp,
data: PacketData::Connect(Connect {
client_name: String::try_from("Bot").unwrap(),
..connect
}),
})
.await;
}
PacketData::Player(player) => {
let pos = Vec3::from_array(player.position);
broadcast_packet(Packet {
user_id: 1,
udp: message.udp,
data: PacketData::Player(Player {
position: (pos + Vec3::new(0., -150., 0.)).into(),
..player
}),
})
.await;
}
data => {
broadcast_packet(Packet {
user_id: 1,
udp: message.udp,
data,
})
.await;
}
}
}
}