diff --git a/gameserver/src/handler/avatar_handler.rs b/gameserver/src/handler/avatar_handler.rs index 4be384a..f96f2d5 100644 --- a/gameserver/src/handler/avatar_handler.rs +++ b/gameserver/src/handler/avatar_handler.rs @@ -1,10 +1,12 @@ use common::net::tools::Packet; +use data::math_def::Vector3; use proto::{ChangeAvatarRsp, Retcode, SetUpAvatarTeamRsp}; use crate::player::Player; use super::get_proto; -use std::{error::Error, rc::Rc}; +use crate::entity::Entity; +use std::{cell::RefCell, error::Error, rc::Rc}; pub fn on_set_up_avatar_team_req( player: &Rc, @@ -88,12 +90,25 @@ pub fn on_change_avatar_req(player: &Rc, packet: Packet) -> Result<(), B rsp.retcode = Retcode::RetSucc.into(); } else { let avatar_comp = player.player_avatar_comp.borrow(); + println!("{req:?}"); if let Err(ret) = avatar_comp.check_change_cur_avatar(req.guid) { tracing::info!("check_change_cur_avatar ret:{ret:?}, guid:{}", req.guid); rsp.retcode = ret.into(); } else { if req.is_move { - // TODO! + if let Some(move_pos) = req.move_pos.as_ref() { + let cur_avatar_ptr = + player.player_avatar_comp.borrow().get_cur_avatar().unwrap(); + let cur_rot = cur_avatar_ptr.borrow().rotation().clone(); + // TODO: Entity::checkMoveSpeed + let scene_ptr = + player.player_scene_comp.borrow().get_cur_scene().unwrap(); + scene_ptr.borrow_mut().entity_move_to( + cur_avatar_ptr as Rc>, + Vector3::from_client(move_pos), + cur_rot, + ); + } } let _ = avatar_comp.change_cur_avatar(req.guid, true); @@ -113,5 +128,6 @@ pub fn on_change_avatar_req(player: &Rc, packet: Packet) -> Result<(), B rsp.retcode = Retcode::RetFail.into(); } + player.send_proto(rsp); Ok(()) }