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_protocol!(
    /// Protocol that specifies the type of objects that can be used as root nodes of a GKScene.
    ///
    ///
    /// See: GKScene.rootNode
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/gameplaykit/gkscenerootnodetype?language=objc)
    pub unsafe trait GKSceneRootNodeType: NSObjectProtocol {}
);

extern_class!(
    /// A scene stores and handles loading of data related to a particular scene.
    ///
    /// See also [Apple's documentation](https://developer.apple.com/documentation/gameplaykit/gkscene?language=objc)
    #[unsafe(super(NSObject))]
    #[derive(Debug, PartialEq, Eq, Hash)]
    pub struct GKScene;
);

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

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

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

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

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

impl GKScene {
    extern_methods!(
        /// Loads a scene from a file contained within the bundle.
        #[unsafe(method(sceneWithFileNamed:))]
        #[unsafe(method_family = none)]
        pub unsafe fn sceneWithFileNamed(filename: &NSString) -> Option<Retained<Self>>;

        /// Loads a scene from a file contained within the bundle and link with the specified rootNode.
        #[unsafe(method(sceneWithFileNamed:rootNode:))]
        #[unsafe(method_family = none)]
        pub unsafe fn sceneWithFileNamed_rootNode(
            filename: &NSString,
            root_node: &ProtocolObject<dyn GKSceneRootNodeType>,
        ) -> Option<Retained<Self>>;

        #[cfg(feature = "GKEntity")]
        /// The entities of this scene.
        #[unsafe(method(entities))]
        #[unsafe(method_family = none)]
        pub unsafe fn entities(&self) -> Retained<NSArray<GKEntity>>;

        /// The root node for the scene.
        ///
        ///
        /// See: GKSceneRootNodeType
        #[unsafe(method(rootNode))]
        #[unsafe(method_family = none)]
        pub unsafe fn rootNode(&self) -> Option<Retained<ProtocolObject<dyn GKSceneRootNodeType>>>;

        /// Setter for [`rootNode`][Self::rootNode].
        #[unsafe(method(setRootNode:))]
        #[unsafe(method_family = none)]
        pub unsafe fn setRootNode(
            &self,
            root_node: Option<&ProtocolObject<dyn GKSceneRootNodeType>>,
        );

        #[cfg(feature = "GKGraph")]
        /// The navigational graphs of this scene.
        #[unsafe(method(graphs))]
        #[unsafe(method_family = none)]
        pub unsafe fn graphs(&self) -> Retained<NSDictionary<NSString, GKGraph>>;

        #[cfg(feature = "GKEntity")]
        /// Adds an entity to the scene's list of entities.
        ///
        ///
        /// Parameter `entity`: the entity to add.
        #[unsafe(method(addEntity:))]
        #[unsafe(method_family = none)]
        pub unsafe fn addEntity(&self, entity: &GKEntity);

        #[cfg(feature = "GKEntity")]
        /// Removes an entity from the scene's list of entities.
        ///
        ///
        /// Parameter `entity`: the entity to remove.
        #[unsafe(method(removeEntity:))]
        #[unsafe(method_family = none)]
        pub unsafe fn removeEntity(&self, entity: &GKEntity);

        #[cfg(feature = "GKGraph")]
        /// Adds a graph to the scene's list of graphs.
        ///
        ///
        /// Parameter `graph`: the graph to add.
        #[unsafe(method(addGraph:name:))]
        #[unsafe(method_family = none)]
        pub unsafe fn addGraph_name(&self, graph: &GKGraph, name: &NSString);

        /// Removes a graph from the scene's list of graphs.
        ///
        ///
        /// Parameter `name`: the name of the corresponding graph as added via addGraph:
        #[unsafe(method(removeGraph:))]
        #[unsafe(method_family = none)]
        pub unsafe fn removeGraph(&self, name: &NSString);
    );
}

/// Methods declared on superclass `NSObject`.
impl GKScene {
    extern_methods!(
        #[unsafe(method(init))]
        #[unsafe(method_family = init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[unsafe(method(new))]
        #[unsafe(method_family = new)]
        pub unsafe fn new() -> Retained<Self>;
    );
}