rrplug 4.3.0

framework for R2Northstar plugins
Documentation
#![allow(non_camel_case_types, non_snake_case)]
use std::ops::{Deref, DerefMut};

use super::{cbaseentity::CBaseEntity, EHandle};
use crate::{
    bindings::server::cplayer::{StatusEffectEndlessData, StatusEffectTimedData},
    field_assert,
    prelude::Vector3,
    size_assert,
};

#[repr(C)]
#[derive(Debug, Clone)]
pub struct DefensivePlacement {
    pub size: f32,
    pub endTime: f32,
    pub effectiveAngleCos: f32,
    pub blocksProjectile: bool,
    pub attached: bool,
    pub handlePlacement: bool,
    pub gap_f: [u8; 1usize],
    pub pos: Vector3,
    pub dir: Vector3,
}

#[repr(C)]
#[derive(Debug)]
pub struct CTitanSoul {
    pub base: CBaseEntity,
    pub m_titanSoulScriptNetData: EHandle,
    pub m_defensivePlacement: DefensivePlacement,
    pub m_lastRodeoHitTime: f32,
    pub m_stance: i32,
    pub m_playerSettingsNum: i32,
    pub m_doomed: bool,
    pub m_invalidHealthBarEnt: bool,
    pub m_bEjecting: bool,
    pub m_isValidRodeoTarget: bool,
    pub m_nextCoreChargeAvailable: f32,
    pub m_coreChargeExpireTime: f32,
    pub m_coreChargeStartTime: f32,
    pub m_coreUseDuration: f32,
    pub m_damageComboLatestUpdateTime: f32,
    pub m_damageComboStartHealth: i32,
    pub gap_a34: [u8; 4usize],
    pub m_statusEffectsTimedTitanSoulNV: [StatusEffectTimedData; 10usize],
    pub m_statusEffectsEndlessTitanSoulNV: [StatusEffectEndlessData; 10usize],
    pub m_titan: EHandle,
}

size_assert!(SIZE_CTITANSOUL where CTitanSoul == 0xbd0 );
field_assert!(+ SIZE_TITANSOULSCRIPTNETDATA where CTitanSoul, m_titanSoulScriptNetData == 0x9d8);
field_assert!(+ SIZE_DEFENSIVEPLACEMENT where CTitanSoul, m_defensivePlacement == 0x9dc);
field_assert!(+ SIZE_LASTRODEOHITTIME where CTitanSoul, m_lastRodeoHitTime == 0xa04);
field_assert!(+ SIZE_STANCE where CTitanSoul, m_stance == 0xa08);
field_assert!(+ SIZE_PLAYERSETTINGSNUM where CTitanSoul, m_playerSettingsNum == 0xa0c);
field_assert!(+ SIZE_DOOMED where CTitanSoul, m_doomed == 0xa10);
field_assert!(+ SIZE_INVALIDHEALTHBARENT where CTitanSoul, m_invalidHealthBarEnt == 0xa11);
field_assert!(+ SIZE_BEJECTING where CTitanSoul, m_bEjecting == 0xa12);
field_assert!(+ SIZE_ISVALIDRODEOTARGET where CTitanSoul, m_isValidRodeoTarget == 0xa13);
field_assert!(+ SIZE_NEXTCORECHARGEAVAILABLE where CTitanSoul, m_nextCoreChargeAvailable == 0xa14);
field_assert!(+ SIZE_CORECHARGEEXPIRETIME where CTitanSoul, m_coreChargeExpireTime == 0xa18);
field_assert!(+ SIZE_CORECHARGESTARTTIME where CTitanSoul, m_coreChargeStartTime == 0xa1c);
field_assert!(+ SIZE_COREUSEDURATION where CTitanSoul, m_coreUseDuration == 0xa20);
field_assert!(+ SIZE_DAMAGECOMBOLATESTUPDATETIME where CTitanSoul, m_damageComboLatestUpdateTime == 0xa24);
field_assert!(+ SIZE_DAMAGECOMBOSTARTHEALTH where CTitanSoul, m_damageComboStartHealth == 0xa28);
field_assert!(+ SIZE_STATUSEFFECTSTIMEDTITANSOULNV where CTitanSoul, m_statusEffectsTimedTitanSoulNV == 0xa30);
field_assert!(+ SIZE_STATUSEFFECTSENDLESSTITANSOULNV where CTitanSoul, m_statusEffectsEndlessTitanSoulNV == 0xb20);
field_assert!(+ SIZE_TITAN where CTitanSoul, m_titan == 0xbc0);

impl DerefMut for CTitanSoul {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.base
    }
}
impl Deref for CTitanSoul {
    type Target = CBaseEntity;

    fn deref(&self) -> &Self::Target {
        &self.base
    }
}