commonlibsse_ng\re\e/
ExtraEnchantment.rs

1use core::ptr::NonNull;
2
3use crate::re::BSExtraData::{BSExtraData, BSExtraDataVtbl, DerivedBSExtraData};
4use crate::re::EnchantmentItem::EnchantmentItem;
5use crate::re::ExtraDataType::ExtraDataType;
6use crate::re::offsets_rtti::RTTI_ExtraEnchantment;
7use crate::re::offsets_vtable::VTABLE_ExtraEnchantment;
8use crate::rel::id::VariantID;
9
10#[repr(C)]
11#[derive(Debug, PartialEq)]
12pub struct ExtraEnchantment {
13    /// Base class `BSExtraData`.
14    pub __base: BSExtraData,
15    pub enchantment: Option<NonNull<EnchantmentItem>>,
16    pub charge: u16,
17    pub removeOnUnequip: bool,
18    pub pad1B: u8,
19    pub pad1C: u32,
20}
21
22const _: () = {
23    assert!(core::mem::offset_of!(ExtraEnchantment, __base) == 0x0);
24    assert!(core::mem::offset_of!(ExtraEnchantment, enchantment) == 0x10);
25    assert!(core::mem::offset_of!(ExtraEnchantment, charge) == 0x18);
26    assert!(core::mem::offset_of!(ExtraEnchantment, removeOnUnequip) == 0x1A);
27    assert!(core::mem::offset_of!(ExtraEnchantment, pad1B) == 0x1B);
28    assert!(core::mem::offset_of!(ExtraEnchantment, pad1C) == 0x1C);
29    assert!(core::mem::size_of::<ExtraEnchantment>() == 0x20);
30};
31
32impl DerivedBSExtraData for ExtraEnchantment {
33    #[inline]
34    fn get_extra_data(&self) -> &BSExtraData {
35        &self.__base
36    }
37
38    #[inline]
39    fn get_extra_data_type() -> ExtraDataType {
40        Self::EXTRA_DATA_TYPE
41    }
42}
43
44impl ExtraEnchantment {
45    /// Address & offset of the runtime type information (RTTI) identifier.
46    pub const RTTI: VariantID = RTTI_ExtraEnchantment;
47
48    /// Address & offset of the virtual function table.
49    pub const VTABLE: [VariantID; 1] = VTABLE_ExtraEnchantment;
50
51    /// The `ExtraDataType` value for enchantment.
52    pub const EXTRA_DATA_TYPE: ExtraDataType = ExtraDataType::Enchantment;
53}
54
55/// The virtual function table for `ExtraEnchantment`.
56///
57/// This struct defines function pointers to simulate the C++ virtual functions.
58#[repr(C)]
59pub struct ExtraEnchantmentVtbl {
60    pub __base: BSExtraDataVtbl,
61}