objc2-sprite-kit 0.3.2

Bindings to the SpriteKit 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::*;
#[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>;
    );
}