Skip to content

Commit d91bf6a

Browse files
authored
get avatar role_id from scn scene instead of hardcoding (#61)
1 parent a74fdf5 commit d91bf6a

File tree

3 files changed

+20
-3
lines changed

3 files changed

+20
-3
lines changed

yaobow/shared/src/openpal3/scene/role_controller.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,10 @@ impl RoleController {
270270
*self.nav_layer.borrow()
271271
}
272272

273+
pub fn model_name(&self) -> String {
274+
(*self.model_name).to_string()
275+
}
276+
273277
pub fn switch_nav_layer(&self) -> usize {
274278
*self.nav_layer.borrow_mut() = (self.nav_layer() + 1) % 2;
275279
self.nav_layer()

yaobow/shared/src/openpal3/ui/dlg_box.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,7 @@ impl DialogBox {
6060
}
6161
}
6262

63-
pub fn set_avator(&mut self, face_name: &str, left_or_right: i32) {
64-
let role_id = face_name[..3].to_string();
63+
pub fn set_avator(&mut self, role_id: &str, face_name: &str, left_or_right: i32) {
6564
let path = format!("/basedata/basedata/ROLE/{}/{}.tga", role_id, face_name);
6665
self.avator = Some(Self::load_sprite(&path, self.asset_mgr.as_ref()));
6766
self.avator_at_right = left_or_right == 1;

yaobow/shared/src/scripting/sce/commands/dlg_face.rs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ use crate::scripting::sce::{SceCommand, SceState};
22
use crosscom::ComRc;
33
use imgui::Ui;
44
use radiance::comdef::ISceneManager;
5+
use crate::openpal3::directors::SceneManagerExtensions;
6+
use crate::openpal3::scene::RoleController;
57

68
#[derive(Debug, Clone)]
79
pub struct SceCommandDlgFace {
@@ -20,9 +22,21 @@ impl SceCommand for SceCommandDlgFace {
2022
state: &mut SceState,
2123
_delta_sec: f32,
2224
) -> bool {
25+
let _resolved_role_id = if self._id == -1 {
26+
state.global_state().role_controlled()
27+
} else {
28+
self._id
29+
};
30+
let role_entity = _scene_manager
31+
.scn_scene()
32+
.unwrap()
33+
.get()
34+
.get_role_entity(_resolved_role_id)
35+
.unwrap();
36+
let role_name = RoleController::get_role_controller(role_entity.clone()).unwrap().get().model_name();
2337
state
2438
.dialog_box()
25-
.set_avator(&self.face_name, self.left_or_right);
39+
.set_avator(&role_name, &self.face_name, self.left_or_right);
2640

2741
true
2842
}

0 commit comments

Comments
 (0)