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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
//! 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::*;
#[cfg(feature = "objc2-app-kit")]
#[cfg(target_os = "macos")]
use objc2_app_kit::*;
#[cfg(feature = "objc2-core-foundation")]
use objc2_core_foundation::*;
use objc2_foundation::*;
use crate::*;
extern_class!(
/// [Apple's documentation](https://developer.apple.com/documentation/spritekit/skfieldnode?language=objc)
#[unsafe(super(SKNode, NSResponder, NSObject))]
#[derive(Debug, PartialEq, Eq, Hash)]
#[cfg(all(feature = "SKNode", feature = "objc2-app-kit"))]
#[cfg(target_os = "macos")]
pub struct SKFieldNode;
);
#[cfg(all(feature = "SKNode", feature = "objc2-app-kit"))]
#[cfg(target_os = "macos")]
extern_conformance!(
unsafe impl NSCoding for SKFieldNode {}
);
#[cfg(all(feature = "SKNode", feature = "objc2-app-kit"))]
#[cfg(target_os = "macos")]
extern_conformance!(
unsafe impl NSCopying for SKFieldNode {}
);
#[cfg(all(feature = "SKNode", feature = "objc2-app-kit"))]
#[cfg(target_os = "macos")]
unsafe impl CopyingHelper for SKFieldNode {
type Result = Self;
}
#[cfg(all(feature = "SKNode", feature = "objc2-app-kit"))]
#[cfg(target_os = "macos")]
extern_conformance!(
unsafe impl NSObjectProtocol for SKFieldNode {}
);
#[cfg(all(feature = "SKNode", feature = "objc2-app-kit"))]
#[cfg(target_os = "macos")]
extern_conformance!(
unsafe impl NSSecureCoding for SKFieldNode {}
);
#[cfg(all(feature = "SKNode", feature = "objc2-app-kit"))]
#[cfg(target_os = "macos")]
impl SKFieldNode {
extern_methods!(
#[cfg(feature = "SKRegion")]
/// The region property is the domain of the field's effect. No force is applied to objects outside the region.
#[unsafe(method(region))]
#[unsafe(method_family = none)]
pub unsafe fn region(&self) -> Option<Retained<SKRegion>>;
#[cfg(feature = "SKRegion")]
/// Setter for [`region`][Self::region].
#[unsafe(method(setRegion:))]
#[unsafe(method_family = none)]
pub unsafe fn setRegion(&self, region: Option<&SKRegion>);
/// strength scaling value. default 1.0
#[unsafe(method(strength))]
#[unsafe(method_family = none)]
pub unsafe fn strength(&self) -> c_float;
/// Setter for [`strength`][Self::strength].
#[unsafe(method(setStrength:))]
#[unsafe(method_family = none)]
pub unsafe fn setStrength(&self, strength: c_float);
/// The falloff exponent used to calculate field strength at a distance.
/// Falloff starts at the minimum radius.
///
/// The default exponent is zero, which results in a uniform field with no falloff.
///
///
/// See: minimumRadius
#[unsafe(method(falloff))]
#[unsafe(method_family = none)]
pub unsafe fn falloff(&self) -> c_float;
/// Setter for [`falloff`][Self::falloff].
#[unsafe(method(setFalloff:))]
#[unsafe(method_family = none)]
pub unsafe fn setFalloff(&self, falloff: c_float);
/// minimum radius of effect. Default is very small.
#[unsafe(method(minimumRadius))]
#[unsafe(method_family = none)]
pub unsafe fn minimumRadius(&self) -> c_float;
/// Setter for [`minimumRadius`][Self::minimumRadius].
#[unsafe(method(setMinimumRadius:))]
#[unsafe(method_family = none)]
pub unsafe fn setMinimumRadius(&self, minimum_radius: c_float);
/// If enabled, a field has an effect.
///
/// default YES
#[unsafe(method(isEnabled))]
#[unsafe(method_family = none)]
pub unsafe fn isEnabled(&self) -> bool;
/// Setter for [`isEnabled`][Self::isEnabled].
#[unsafe(method(setEnabled:))]
#[unsafe(method_family = none)]
pub unsafe fn setEnabled(&self, enabled: bool);
/// If a field is exclusive, it suppresses any other field in its region of effect.
/// If two or more exclusive fields overlap, it is undefined which one of them will take effect
///
///
/// See: region
#[unsafe(method(isExclusive))]
#[unsafe(method_family = none)]
pub unsafe fn isExclusive(&self) -> bool;
/// Setter for [`isExclusive`][Self::isExclusive].
#[unsafe(method(setExclusive:))]
#[unsafe(method_family = none)]
pub unsafe fn setExclusive(&self, exclusive: bool);
/// Logical categories the field belongs to. Default is all categories.
/// These categories correspond to fieldBitMasks, and can be used to enforce that a particular field applies
/// to a particular category of objects.
///
///
/// See: SKPhysicsBody.fieldBitMask
///
/// See: SKEmitterNode.fieldBitMask
#[unsafe(method(categoryBitMask))]
#[unsafe(method_family = none)]
pub unsafe fn categoryBitMask(&self) -> u32;
/// Setter for [`categoryBitMask`][Self::categoryBitMask].
#[unsafe(method(setCategoryBitMask:))]
#[unsafe(method_family = none)]
pub unsafe fn setCategoryBitMask(&self, category_bit_mask: u32);
/// fields without a smoothness component will return 0
///
///
/// See: noiseFieldWithSmoothness:smoothness:animationSpeed
///
/// See: turbulenceFieldWithSmoothness:smoothness:animationSpeed
#[unsafe(method(smoothness))]
#[unsafe(method_family = none)]
pub unsafe fn smoothness(&self) -> c_float;
/// Setter for [`smoothness`][Self::smoothness].
#[unsafe(method(setSmoothness:))]
#[unsafe(method_family = none)]
pub unsafe fn setSmoothness(&self, smoothness: c_float);
/// fields that can be animated can have non zero values.
///
/// A value of 2 will animated twice as fast as a value of 1.
///
///
/// See: noiseFieldWithSmoothness:smoothness:animationSpeed
///
/// See: turbulenceFieldWithSmoothness:smoothness:animationSpeed
#[unsafe(method(animationSpeed))]
#[unsafe(method_family = none)]
pub unsafe fn animationSpeed(&self) -> c_float;
/// Setter for [`animationSpeed`][Self::animationSpeed].
#[unsafe(method(setAnimationSpeed:))]
#[unsafe(method_family = none)]
pub unsafe fn setAnimationSpeed(&self, animation_speed: c_float);
#[cfg(feature = "SKTexture")]
/// fields constructed with a texture can be uppdated by assigning a new texture
///
///
/// See: velocityFieldWithTexture:velocityTexture
#[unsafe(method(texture))]
#[unsafe(method_family = none)]
pub unsafe fn texture(&self) -> Option<Retained<SKTexture>>;
#[cfg(feature = "SKTexture")]
/// Setter for [`texture`][Self::texture].
#[unsafe(method(setTexture:))]
#[unsafe(method_family = none)]
pub unsafe fn setTexture(&self, texture: Option<&SKTexture>);
/// Slows an object proportionally to the object’s velocity.
/// Use this to simulate effects such as friction from motion through the air.
#[unsafe(method(dragField))]
#[unsafe(method_family = none)]
pub unsafe fn dragField(mtm: MainThreadMarker) -> Retained<SKFieldNode>;
/// Applies a force tangential to the direction from the sample point to the field's position.
/// The force will be CCW to the direction. Make the strength negative to apply force in the CW direction.
/// Amount is proportional to distance from center and the object's mass.
/// Use this to create effects such as tornadoes.
#[unsafe(method(vortexField))]
#[unsafe(method_family = none)]
pub unsafe fn vortexField(mtm: MainThreadMarker) -> Retained<SKFieldNode>;
/// Applies a force in the direction of the origin of the field in local space. To repel objects, use a negative strength.
/// The force is proportional to the distance from the field origin. Varies with the mass of the object according to F = ma
/// The field node's rotation property can be used to orient the gravity in a particular direction.
#[unsafe(method(radialGravityField))]
#[unsafe(method_family = none)]
pub unsafe fn radialGravityField(mtm: MainThreadMarker) -> Retained<SKFieldNode>;
#[cfg(feature = "SKTexture")]
/// The supplied texture contains velocity values for any object entering the field’s area of effect.
/// If no texture is supplied, the direction property is used instead.
/// Velocity fields override the effect of any other acceleration applied to the body.
/// Velocity fields are typically used for such effects as advection, for example, a velocity field
/// might describe the velocity on the surface of a river. An object placed in the river would then follow the river.
///
///
/// Parameter `velocityTexture`: The R and G channels of the supplied texture become x and y components of velocity. B and A, if present in the SKTexture, are ignored.
///
///
/// See: texture
#[unsafe(method(velocityFieldWithTexture:))]
#[unsafe(method_family = none)]
pub unsafe fn velocityFieldWithTexture(
velocity_texture: &SKTexture,
mtm: MainThreadMarker,
) -> Retained<SKFieldNode>;
#[cfg(feature = "objc2-core-foundation")]
/// A time varying differentiable Perlin simplex noise field. By default a smooth noise is calculated,
/// and the field is time varying. Use this to simulate such effects as fireflies, or snow.
/// To freeze the noise in place, set animationSpeed to 0.0. Mass is ignored.
///
///
/// Parameter `smoothness`: value of 0 means as noisy as possible, 1 means as smooth as possible
///
/// Parameter `speed`: is the general rate in Hz that any particular texel changes to a different value
///
///
/// See: smoothness
///
/// See: animationSpeed
#[unsafe(method(noiseFieldWithSmoothness:animationSpeed:))]
#[unsafe(method_family = none)]
pub unsafe fn noiseFieldWithSmoothness_animationSpeed(
smoothness: CGFloat,
speed: CGFloat,
mtm: MainThreadMarker,
) -> Retained<SKFieldNode>;
#[cfg(feature = "objc2-core-foundation")]
/// Just like Noise, except the strength of the noise is proportional to the velocity of the object in the field.
///
///
/// Parameter `smoothness`: value of 0 means as noisy as possible, 1 means as smooth as possible
///
/// Parameter `speed`: is the general rate in Hz that any particular texel changes to a different value
///
///
/// See: smoothness
///
/// See: animationSpeed
#[unsafe(method(turbulenceFieldWithSmoothness:animationSpeed:))]
#[unsafe(method_family = none)]
pub unsafe fn turbulenceFieldWithSmoothness_animationSpeed(
smoothness: CGFloat,
speed: CGFloat,
mtm: MainThreadMarker,
) -> Retained<SKFieldNode>;
/// A Hooke’s law force - a force linearly proportional to distance from the center of the field. An object in this
/// field will oscillate with a period proportional to the inverse of the mass.
/// An example use is to keep objects confined to a particular region.
#[unsafe(method(springField))]
#[unsafe(method_family = none)]
pub unsafe fn springField(mtm: MainThreadMarker) -> Retained<SKFieldNode>;
/// A force proportional to the charge on the object. A charge property has been
/// added to SKPhysicsBodies to accomplish this. An example use of this field is to make objects behavior differently
/// from one another when they enter a region, or to make an object's behavior different than its mass based behavior
/// This field models the first part of the Lorentz equation, F = qE
#[unsafe(method(electricField))]
#[unsafe(method_family = none)]
pub unsafe fn electricField(mtm: MainThreadMarker) -> Retained<SKFieldNode>;
/// A force proportional to the charge on the object and the object’s velocity. A charge property has been
/// added to SKPhysicsBodies to accomplish this. An example use of this field is to make objects behavior differently
/// from one another when they enter a region, or to make an object's behavior different than its mass based behavior
/// This field models the second part of the Lorentz equation, F = qvB
#[unsafe(method(magneticField))]
#[unsafe(method_family = none)]
pub unsafe fn magneticField(mtm: MainThreadMarker) -> Retained<SKFieldNode>;
);
}
/// Methods declared on superclass `SKNode`.
#[cfg(all(feature = "SKNode", feature = "objc2-app-kit"))]
#[cfg(target_os = "macos")]
impl SKFieldNode {
extern_methods!(
#[unsafe(method(init))]
#[unsafe(method_family = init)]
pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;
/// Support coding and decoding via NSKeyedArchiver.
///
/// # Safety
///
/// `a_decoder` possibly has further requirements.
#[unsafe(method(initWithCoder:))]
#[unsafe(method_family = init)]
pub unsafe fn initWithCoder(
this: Allocated<Self>,
a_decoder: &NSCoder,
) -> Option<Retained<Self>>;
#[unsafe(method(node))]
#[unsafe(method_family = none)]
pub unsafe fn node(mtm: MainThreadMarker) -> Retained<Self>;
#[unsafe(method(nodeWithFileNamed:))]
#[unsafe(method_family = none)]
pub unsafe fn nodeWithFileNamed(
filename: &NSString,
mtm: MainThreadMarker,
) -> Option<Retained<Self>>;
/// # Safety
///
/// `classes` generic probably has further requirements.
#[unsafe(method(nodeWithFileNamed:securelyWithClasses:andError:_))]
#[unsafe(method_family = none)]
pub unsafe fn nodeWithFileNamed_securelyWithClasses_andError(
filename: &NSString,
classes: &NSSet<AnyClass>,
mtm: MainThreadMarker,
) -> Result<Retained<Self>, Retained<NSError>>;
);
}
/// Methods declared on superclass `NSObject`.
#[cfg(all(feature = "SKNode", feature = "objc2-app-kit"))]
#[cfg(target_os = "macos")]
impl SKFieldNode {
extern_methods!(
#[unsafe(method(new))]
#[unsafe(method_family = new)]
pub unsafe fn new(mtm: MainThreadMarker) -> Retained<Self>;
);
}