Record Class SDL_HapticDirection
- All Implemented Interfaces:
IPointer
,ISDL_HapticDirection
Structure that represents a haptic direction.
This is the direction where the force comes from, instead of the direction in which the force is exerted.
Directions can be specified by:
- SDL_HAPTIC_POLAR : Specified by polar coordinates.
- SDL_HAPTIC_CARTESIAN : Specified by cartesian coordinates.
- SDL_HAPTIC_SPHERICAL : Specified by spherical coordinates.
Cardinal directions of the haptic device are relative to the positioning of the device. North is considered to be away from the user.
The following diagram represents the cardinal directions:
.--.
|__| .-------.
|=.| |.-----.|
|--| || ||
| | |'-----'|
|__|~')_____('
[ COMPUTER ]
North (0,-1)
^
|
|
(-1,0) West <----[ HAPTIC ]----> East (1,0)
|
|
v
South (0,1)
[ USER ]
\|||/
(o o)
---ooO-(_)-Ooo---
If type is SDL_HAPTIC_POLAR, direction is encoded by hundredths of a degree
starting north and turning clockwise. SDL_HAPTIC_POLAR only uses the first
dir
parameter. The cardinal directions would be:
- North: 0 (0 degrees)
- East: 9000 (90 degrees)
- South: 18000 (180 degrees)
- West: 27000 (270 degrees)
If type is SDL_HAPTIC_CARTESIAN, direction is encoded by three positions (X
axis, Y axis and Z axis (with 3 axes)). SDL_HAPTIC_CARTESIAN uses the first
three dir
parameters. The cardinal directions would be:
- North: 0,-1, 0
- East: 1, 0, 0
- South: 0, 1, 0
- West: -1, 0, 0
The Z axis represents the height of the effect if supported, otherwise it's unused. In cartesian encoding (1, 2) would be the same as (2, 4), you can use any multiple you want, only the direction matters.
If type is SDL_HAPTIC_SPHERICAL, direction is encoded by two rotations. The
first two dir
parameters are used. The dir
parameters are as follows
(all values are in hundredths of degrees):
- Degrees from (1, 0) rotated towards (0, 1).
- Degrees towards (0, 0, 1) (device needs at least 3 axes).
Example of force coming from the south with all encodings (force coming from the south means the user will have to pull the stick to counteract):
SDL_HapticDirection direction;
// Cartesian directions
direction.type = SDL_HAPTIC_CARTESIAN; // Using cartesian direction encoding.
direction.dir[0] = 0; // X position
direction.dir[1] = 1; // Y position
// Assuming the device has 2 axes, we don't need to specify third parameter.
// Polar directions
direction.type = SDL_HAPTIC_POLAR; // We'll be using polar direction encoding.
direction.dir[0] = 18000; // Polar only uses first parameter
// Spherical coordinates
direction.type = SDL_HAPTIC_SPHERICAL; // Spherical encoding
direction.dir[0] = 9000; // Since we only have two axes we don't need more parameters.
Since: This struct is available since SDL 3.2.0.
See also:
SDL_HAPTIC_POLAR
SDL_HAPTIC_CARTESIAN
SDL_HAPTIC_SPHERICAL
SDL_HAPTIC_STEERING_AXIS
SDL_HapticEffect
SDL_GetNumHapticAxes
Structure
Contracts
The property segment()
should always be not-null
(segment != NULL && !segment.equals(MemorySegment.NULL)
), and properly aligned to
LAYOUT.byteAlignment()
bytes. To represent null pointer, you may use a Java
null
instead. See the documentation of IPointer.segment()
for more details.
The constructor of this class is marked as UnsafeConstructor
, because it does not
perform any runtime check. The constructor can be useful for automatic code generators.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final record
Represents a pointer to / an array of null structure(s) in native memory. -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final long
static final StructLayout
static final SequenceLayout
static final ValueLayout.OfByte
static final long
static final long
static final MemoryLayout.PathElement
static final MemoryLayout.PathElement
static final long
static final long
-
Constructor Summary
ConstructorsConstructorDescriptionSDL_HapticDirection
(@NotNull MemorySegment segment) Creates an instance of aSDL_HapticDirection
record class. -
Method Summary
Modifier and TypeMethodDescriptionstatic SDL_HapticDirection
static SDL_HapticDirection.Ptr
static SDL_HapticDirection
clone
(Arena arena, SDL_HapticDirection src) dir()
dirRaw()
final boolean
Indicates whether some other object is "equal to" this one.final int
hashCode()
Returns a hash code value for this object.@NotNull MemorySegment
segment()
Returns the value of thesegment
record component.final String
toString()
Returns a string representation of this record class.byte
type()
type
(byte value)
-
Field Details
-
LAYOUT
-
BYTES
public static final long BYTES -
PATH$type
-
PATH$dir
-
LAYOUT$type
-
LAYOUT$dir
-
SIZE$type
public static final long SIZE$type -
SIZE$dir
public static final long SIZE$dir -
OFFSET$type
public static final long OFFSET$type -
OFFSET$dir
public static final long OFFSET$dir
-
-
Constructor Details
-
SDL_HapticDirection
Creates an instance of aSDL_HapticDirection
record class.- Parameters:
segment
- the value for thesegment
record component
-
-
Method Details
-
allocate
-
allocate
-
clone
-
type
-
type
-
dir
-
dir
-
dirRaw
-
toString
-
hashCode
-
equals
Indicates whether some other object is "equal to" this one. The objects are equal if the other object is of the same class and if all the record components are equal. All components in this record class are compared withObjects::equals(Object,Object)
. -
segment
Returns the value of thesegment
record component.
-