commonlibsse_ng\re\i/
ItemList.rs1use crate::re::BSTArray::BSTArray;
2use crate::re::GFxMovieView;
3use crate::re::GFxValue::{GFxValue, Value};
4use crate::re::GPtr::GPtr;
5use crate::re::PlayerCharacter::PlayerCharacter;
6use crate::re::StandardItemData::StandardItemData;
7use crate::re::TESObjectREFR::TESObjectREFR;
8
9#[repr(C)]
10#[derive(Debug)]
11pub struct Item {
12 pub data: StandardItemData, pub obj: GFxValue, pub unk30: u64, pub unk38: u64, }
17const _: () = assert!(core::mem::size_of::<Item>() == 0x40);
18
19#[repr(C)]
20#[derive(Debug)]
21pub struct ItemList {
22 pub view: GPtr<GFxMovieView>,
24 pub root: GFxValue,
26 pub entryList: GFxValue,
28 pub items: BSTArray<*mut Item>,
30 pub unk50: bool,
32 pub pad51: u8,
34 pub pad52: u16,
36 pub pad54: u32,
38}
39const _: () = assert!(core::mem::size_of::<ItemList>() == 0x58);
40
41impl ItemList {
42 pub fn get_selected_item(&self) -> Option<*mut Item> {
43 if self.unk50 {
44 return None;
45 }
46
47 let selected_index = self.root.get_member(c"selectedIndex")?;
48 let Value::Number(index) = selected_index.get_value()? else {
49 return None;
50 };
51
52 if (0.0..(self.items.len() as f64)).contains(&index) {
53 Some(self.items[index as usize])
54 } else {
55 None
56 }
57 }
58
59 pub fn update(&self) {
60 if let Some(player_character) = unsafe { PlayerCharacter::get_singleton_mut() } {
61 self.update_impl((player_character as *mut PlayerCharacter).cast());
63 }
64 }
65
66 #[commonlibsse_ng_derive_internal::relocate_fn(se_id = 50099, ae_id = 51031)]
67 pub fn update_impl(&self, owner: *mut TESObjectREFR) {}
68}