1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
//! 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>;
);
}