use crate::edicts::Edict;
use crate::entities::Entity;
use sdk_raw::vcall;
use std::ptr::NonNull;
interface! {
#[doc(alias("IServerGameEnts", "CServerGameEnts"))]
pub struct ServerGameEnts(sys::IServerGameEnts) = GameServer sdk_raw::interfaces::server_game_ents::VERSION;
}
impl<'s> ServerGameEnts<'s> {
#[doc(alias("BaseEntityToEdict"))]
pub fn edict_of_entity(self, entity: Entity<'_>) -> Option<Edict<'s>> {
let edict =
unsafe { vcall!(self.as_ptr() => IServerGameEnts_BaseEntityToEdict(entity.as_ptr())) };
NonNull::new(edict).map(|edict| unsafe { Edict::from_raw(edict) })
}
#[doc(alias("EdictToBaseEntity"))]
pub fn entity_of_edict(self, edict: Edict<'_>) -> Option<Entity<'s>> {
if edict.is_free() {
return None;
}
let entity =
unsafe { vcall!(self.as_ptr() => IServerGameEnts_EdictToBaseEntity(edict.as_ptr())) };
NonNull::new(entity).map(|entity| unsafe { Entity::from_raw(entity) })
}
}