objc2-gameplay-kit 0.3.2

Bindings to the GameplayKit framework
Documentation
//! This file has been automatically generated by `objc2`'s `header-translator`.
//! DO NOT EDIT
use core::ffi::*;
use core::ptr::NonNull;
use objc2::__framework_prelude::*;
use objc2_foundation::*;

use crate::*;

extern_class!(
    /// An entity is the general purpose object in an entity-component system.
    /// Entites have many components but components are associated with only a single entity.
    ///
    /// Note: GKEntity supports NSCopying and NSSecureCoding, but your custom GKComponent's must also support NSCopying and NSSecureCoding
    ///
    ///
    /// See: GKComponent
    ///
    /// See: GKComponentSystem
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/gameplaykit/gkentity?language=objc)
    #[unsafe(super(NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct GKEntity;
);

extern_conformance!(
    unsafe impl NSCoding for GKEntity {}
);

extern_conformance!(
    unsafe impl NSCopying for GKEntity {}
);

unsafe impl CopyingHelper for GKEntity {
    type Result = Self;
}

extern_conformance!(
    unsafe impl NSObjectProtocol for GKEntity {}
);

extern_conformance!(
    unsafe impl NSSecureCoding for GKEntity {}
);

impl GKEntity {
    extern_methods!(
        /// Creates a new entity ready to have components added to it.
        #[unsafe(method(entity))]
        #[unsafe(method_family = none)]
        pub unsafe fn entity() -> Retained<Self>;

        /// Creates a new entity ready to have components added to it.
        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        /// General update loop for this entity, which also updates all components in this entity that are not currently
        /// in a dedicated component system.
        ///
        /// Per-entity component updates is a simpler and less flexible option to using per-component updates,
        /// however both can not be allowed to occur at the same time for a component. Thus components that are
        /// added to dedicated component systems will not be updated here as they have opted for the more powerful
        /// feature of per-component systems. Update those components via their system instead.
        ///
        ///
        /// See: GKComponentSystem
        ///
        /// Parameter `seconds`: elapsed time, in seconds, since last frame
        #[unsafe(method(updateWithDeltaTime:))]
        #[unsafe(method_family = none)]
        pub unsafe fn updateWithDeltaTime(&self, seconds: NSTimeInterval);

        #[cfg(feature = "GKComponent")]
        /// Access the current set of components as an array.
        /// Note: this is not the internal array of components, but rather a newly created array of the current component mapping.
        #[unsafe(method(components))]
        #[unsafe(method_family = none)]
        pub unsafe fn components(&self) -> Retained<NSArray<GKComponent>>;

        #[cfg(feature = "GKComponent")]
        /// Adds a component to this entity.  If a component of the same class already exists it is overwritten with the new component.
        ///
        /// Parameter `component`: the component to be added
        ///
        /// See: GKComponent
        #[unsafe(method(addComponent:))]
        #[unsafe(method_family = none)]
        pub unsafe fn addComponent(&self, component: &GKComponent);

        /// # Safety
        ///
        /// `component_class` probably has further requirements.
        #[unsafe(method(removeComponentForClass:))]
        #[unsafe(method_family = none)]
        pub unsafe fn removeComponentForClass(&self, component_class: &AnyClass);

        #[cfg(feature = "GKComponent")]
        /// # Safety
        ///
        /// `component_class` probably has further requirements.
        #[unsafe(method(componentForClass:))]
        #[unsafe(method_family = none)]
        pub unsafe fn componentForClass(
            &self,
            component_class: &AnyClass,
        ) -> Option<Retained<GKComponent>>;
    );
}

/// Methods declared on superclass `NSObject`.
impl GKEntity {
    extern_methods!(
        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub unsafe fn new() -> Retained<Self>;
    );
}