/* wearechat - generic multiplayer game with voip Copyright (C) 2025 metamuffin This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, version 3 of the License only. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ #![feature(iter_array_chunks)] pub mod camera; pub mod download; pub mod network; pub mod renderer; pub mod scene_prepare; pub mod scene_render; pub mod state; pub mod window; pub mod ui; use anyhow::Result; use clap::Parser; use log::info; use rand::random; use std::{ io::Write, net::{SocketAddr, TcpStream}, }; use weareshared::{helper::ReadWrite, packets::Packet}; use window::WindowState; use winit::event_loop::EventLoop; #[derive(Parser)] struct Args { address: SocketAddr, } fn main() -> Result<()> { env_logger::init_from_env("LOG"); let args = Args::parse(); info!("connecting..."); let mut sock = TcpStream::connect(args.address)?; Packet::Connect(random()).write(&mut sock)?; sock.flush()?; info!("connection established"); let evloop = EventLoop::new()?; evloop.run_app(&mut WindowState::new(sock))?; Ok(()) }