131 lines
3.8 KiB
Rust
131 lines
3.8 KiB
Rust
use super::MessageContext;
|
|
use trigger_codegen::handlers;
|
|
|
|
#[handlers]
|
|
mod scene_module {
|
|
use tracing::debug;
|
|
use trigger_logic::scene::ESceneType;
|
|
|
|
use crate::logic::scene_util;
|
|
|
|
pub async fn on_enter_world(context: &mut MessageContext<'_, '_>, _request: EnterWorldCsReq) {
|
|
let scene_model = &mut context.player.scene_model;
|
|
|
|
let scene_to_enter = match scene_model.get_current_scene().await {
|
|
Some(current_scene)
|
|
if scene_util::persists_on_relogin(
|
|
ESceneType::try_from(current_scene.scene_type).unwrap(),
|
|
) =>
|
|
{
|
|
Some(current_scene)
|
|
}
|
|
_ => scene_model.get_default_scene().await,
|
|
};
|
|
|
|
let scene_to_enter = if scene_to_enter.is_none() {
|
|
// TODO: first scene to be created should be the 'Fresh' scene (beginner procedure)
|
|
debug!(
|
|
"player with uid {} has no scene to enter, default hall scene will be created",
|
|
context.session.player_uid
|
|
);
|
|
|
|
let scene = scene_model.create_scene_info(ESceneType::Hall).await;
|
|
scene_model.set_default_scene(&scene).await;
|
|
|
|
scene
|
|
} else {
|
|
scene_to_enter.unwrap()
|
|
};
|
|
|
|
context
|
|
.session
|
|
.change_game_state(
|
|
context.request_id,
|
|
EnterWorldScRsp { retcode: 0 },
|
|
context
|
|
.player
|
|
.build_state_reentrant_data(&scene_to_enter)
|
|
.unwrap(),
|
|
&scene_to_enter,
|
|
context.player,
|
|
false,
|
|
)
|
|
.await;
|
|
|
|
context.player.scene_model.clear_abandoned_scenes().await;
|
|
}
|
|
|
|
pub async fn on_post_enter_world(
|
|
_context: &mut MessageContext<'_, '_>,
|
|
_request: PostEnterWorldCsReq,
|
|
) -> PostEnterWorldScRsp {
|
|
PostEnterWorldScRsp { retcode: 0 }
|
|
}
|
|
|
|
pub async fn on_scene_transition(
|
|
_context: &mut MessageContext<'_, '_>,
|
|
request: SceneTransitionCsReq,
|
|
) -> SceneTransitionScRsp {
|
|
debug!("{request:?}");
|
|
|
|
SceneTransitionScRsp { retcode: 0 }
|
|
}
|
|
|
|
pub async fn on_enter_section_complete(
|
|
_context: &mut MessageContext<'_, '_>,
|
|
_request: EnterSectionCompleteCsReq,
|
|
) -> EnterSectionCompleteScRsp {
|
|
EnterSectionCompleteScRsp { retcode: 0 }
|
|
}
|
|
|
|
pub async fn on_refresh_section(
|
|
_context: &mut MessageContext<'_, '_>,
|
|
_request: RefreshSectionCsReq,
|
|
) -> RefreshSectionScRsp {
|
|
RefreshSectionScRsp {
|
|
retcode: 0,
|
|
refresh_status: 0,
|
|
}
|
|
}
|
|
|
|
pub async fn on_leave_cur_scene(
|
|
context: &mut MessageContext<'_, '_>,
|
|
_request: LeaveCurSceneCsReq,
|
|
) {
|
|
if let Some(scene_uid) = context.session.get_cur_scene_uid() {
|
|
context.player.scene_model.on_leave_scene(scene_uid).await;
|
|
}
|
|
|
|
let default_scene = context
|
|
.player
|
|
.scene_model
|
|
.get_default_scene()
|
|
.await
|
|
.unwrap();
|
|
|
|
context
|
|
.session
|
|
.change_game_state(
|
|
context.request_id,
|
|
LeaveCurSceneScRsp { retcode: 0 },
|
|
context
|
|
.player
|
|
.build_state_reentrant_data(&default_scene)
|
|
.unwrap(),
|
|
&default_scene,
|
|
context.player,
|
|
false,
|
|
)
|
|
.await;
|
|
}
|
|
|
|
pub async fn on_active_hollow_check_point(
|
|
_context: &mut MessageContext<'_, '_>,
|
|
request: ActiveHollowCheckPointCsReq,
|
|
) -> ActiveHollowCheckPointScRsp {
|
|
// TODO: forward it to battle-server and actually handle
|
|
|
|
debug!("{:?}", request.check_point);
|
|
ActiveHollowCheckPointScRsp { retcode: 0 }
|
|
}
|
|
}
|