# WARNING: Please don't edit this file. It was generated by Python/WinRT v1.0.0-beta.9

import enum
import datetime
import sys
import types
import typing

import winsdk.system
import winsdk.windows.foundation
import winsdk.windows.foundation.numerics

class ConditionForceEffectKind(enum.IntEnum):
    SPRING = 0
    DAMPER = 1
    INERTIA = 2
    FRICTION = 3

class ForceFeedbackEffectAxes(enum.IntFlag):
    NONE = 0
    X = 0x1
    Y = 0x2
    Z = 0x4

class ForceFeedbackEffectState(enum.IntEnum):
    STOPPED = 0
    RUNNING = 1
    PAUSED = 2
    FAULTED = 3

class ForceFeedbackLoadEffectResult(enum.IntEnum):
    SUCCEEDED = 0
    EFFECT_STORAGE_FULL = 1
    EFFECT_NOT_SUPPORTED = 2

class PeriodicForceEffectKind(enum.IntEnum):
    SQUARE_WAVE = 0
    SINE_WAVE = 1
    TRIANGLE_WAVE = 2
    SAWTOOTH_WAVE_UP = 3
    SAWTOOTH_WAVE_DOWN = 4

Self = typing.TypeVar('Self')

class ConditionForceEffect(winsdk.system.Object):
    kind: ConditionForceEffectKind
    gain: winsdk.system.Double
    state: ForceFeedbackEffectState
    @staticmethod
    def _from(obj: winsdk.system.Object) -> ConditionForceEffect: ...
    def __new__(cls: typing.Type[ConditionForceEffect], effect_kind: ConditionForceEffectKind) -> ConditionForceEffect:...
    def set_parameters(self, direction: winsdk.windows.foundation.numerics.Vector3, positive_coefficient: winsdk.system.Single, negative_coefficient: winsdk.system.Single, max_positive_magnitude: winsdk.system.Single, max_negative_magnitude: winsdk.system.Single, dead_zone: winsdk.system.Single, bias: winsdk.system.Single) -> None: ...
    def start(self) -> None: ...
    def stop(self) -> None: ...

class ConstantForceEffect(winsdk.system.Object):
    gain: winsdk.system.Double
    state: ForceFeedbackEffectState
    @staticmethod
    def _from(obj: winsdk.system.Object) -> ConstantForceEffect: ...
    def __new__(cls: typing.Type[ConstantForceEffect]) -> ConstantForceEffect:...
    def set_parameters(self, vector: winsdk.windows.foundation.numerics.Vector3, duration: datetime.timedelta) -> None: ...
    def set_parameters_with_envelope(self, vector: winsdk.windows.foundation.numerics.Vector3, attack_gain: winsdk.system.Single, sustain_gain: winsdk.system.Single, release_gain: winsdk.system.Single, start_delay: datetime.timedelta, attack_duration: datetime.timedelta, sustain_duration: datetime.timedelta, release_duration: datetime.timedelta, repeat_count: winsdk.system.UInt32) -> None: ...
    def start(self) -> None: ...
    def stop(self) -> None: ...

class ForceFeedbackMotor(winsdk.system.Object):
    master_gain: winsdk.system.Double
    are_effects_paused: winsdk.system.Boolean
    is_enabled: winsdk.system.Boolean
    supported_axes: ForceFeedbackEffectAxes
    @staticmethod
    def _from(obj: winsdk.system.Object) -> ForceFeedbackMotor: ...
    def load_effect_async(self, effect: typing.Optional[IForceFeedbackEffect]) -> winsdk.windows.foundation.IAsyncOperation[ForceFeedbackLoadEffectResult]: ...
    def pause_all_effects(self) -> None: ...
    def resume_all_effects(self) -> None: ...
    def stop_all_effects(self) -> None: ...
    def try_disable_async(self) -> winsdk.windows.foundation.IAsyncOperation[winsdk.system.Boolean]: ...
    def try_enable_async(self) -> winsdk.windows.foundation.IAsyncOperation[winsdk.system.Boolean]: ...
    def try_reset_async(self) -> winsdk.windows.foundation.IAsyncOperation[winsdk.system.Boolean]: ...
    def try_unload_effect_async(self, effect: typing.Optional[IForceFeedbackEffect]) -> winsdk.windows.foundation.IAsyncOperation[winsdk.system.Boolean]: ...

class PeriodicForceEffect(winsdk.system.Object):
    gain: winsdk.system.Double
    state: ForceFeedbackEffectState
    kind: PeriodicForceEffectKind
    @staticmethod
    def _from(obj: winsdk.system.Object) -> PeriodicForceEffect: ...
    def __new__(cls: typing.Type[PeriodicForceEffect], effect_kind: PeriodicForceEffectKind) -> PeriodicForceEffect:...
    def set_parameters(self, vector: winsdk.windows.foundation.numerics.Vector3, frequency: winsdk.system.Single, phase: winsdk.system.Single, bias: winsdk.system.Single, duration: datetime.timedelta) -> None: ...
    def set_parameters_with_envelope(self, vector: winsdk.windows.foundation.numerics.Vector3, frequency: winsdk.system.Single, phase: winsdk.system.Single, bias: winsdk.system.Single, attack_gain: winsdk.system.Single, sustain_gain: winsdk.system.Single, release_gain: winsdk.system.Single, start_delay: datetime.timedelta, attack_duration: datetime.timedelta, sustain_duration: datetime.timedelta, release_duration: datetime.timedelta, repeat_count: winsdk.system.UInt32) -> None: ...
    def start(self) -> None: ...
    def stop(self) -> None: ...

class RampForceEffect(winsdk.system.Object):
    gain: winsdk.system.Double
    state: ForceFeedbackEffectState
    @staticmethod
    def _from(obj: winsdk.system.Object) -> RampForceEffect: ...
    def __new__(cls: typing.Type[RampForceEffect]) -> RampForceEffect:...
    def set_parameters(self, start_vector: winsdk.windows.foundation.numerics.Vector3, end_vector: winsdk.windows.foundation.numerics.Vector3, duration: datetime.timedelta) -> None: ...
    def set_parameters_with_envelope(self, start_vector: winsdk.windows.foundation.numerics.Vector3, end_vector: winsdk.windows.foundation.numerics.Vector3, attack_gain: winsdk.system.Single, sustain_gain: winsdk.system.Single, release_gain: winsdk.system.Single, start_delay: datetime.timedelta, attack_duration: datetime.timedelta, sustain_duration: datetime.timedelta, release_duration: datetime.timedelta, repeat_count: winsdk.system.UInt32) -> None: ...
    def start(self) -> None: ...
    def stop(self) -> None: ...

class IForceFeedbackEffect(winsdk.system.Object):
    gain: winsdk.system.Double
    state: ForceFeedbackEffectState
    @staticmethod
    def _from(obj: winsdk.system.Object) -> IForceFeedbackEffect: ...
    def start(self) -> None: ...
    def stop(self) -> None: ...

