|
@@ -771,18 +771,18 @@ static int |
|
|
SDL_SYS_ToFFEFFECT(SDL_Haptic * haptic, FFEFFECT * dest, SDL_HapticEffect * src) |
|
|
{ |
|
|
int i; |
|
|
FFCONSTANTFORCE *constant; |
|
|
FFPERIODIC *periodic; |
|
|
FFCONDITION *condition; /* Actually an array of conditions - one per axis. */ |
|
|
FFRAMPFORCE *ramp; |
|
|
FFCUSTOMFORCE *custom; |
|
|
FFENVELOPE *envelope; |
|
|
SDL_HapticConstant *hap_constant; |
|
|
SDL_HapticPeriodic *hap_periodic; |
|
|
SDL_HapticCondition *hap_condition; |
|
|
SDL_HapticRamp *hap_ramp; |
|
|
SDL_HapticCustom *hap_custom; |
|
|
DWORD *axes; |
|
|
FFCONSTANTFORCE *constant = NULL; |
|
|
FFPERIODIC *periodic = NULL; |
|
|
FFCONDITION *condition = NULL; /* Actually an array of conditions - one per axis. */ |
|
|
FFRAMPFORCE *ramp = NULL; |
|
|
FFCUSTOMFORCE *custom = NULL; |
|
|
FFENVELOPE *envelope = NULL; |
|
|
SDL_HapticConstant *hap_constant = NULL; |
|
|
SDL_HapticPeriodic *hap_periodic = NULL; |
|
|
SDL_HapticCondition *hap_condition = NULL; |
|
|
SDL_HapticRamp *hap_ramp = NULL; |
|
|
SDL_HapticCustom *hap_custom = NULL; |
|
|
DWORD *axes = NULL; |
|
|
|
|
|
/* Set global stuff. */ |
|
|
SDL_memset(dest, 0, sizeof(FFEFFECT)); |
|
@@ -911,26 +911,29 @@ SDL_SYS_ToFFEFFECT(SDL_Haptic * haptic, FFEFFECT * dest, SDL_HapticEffect * src) |
|
|
case SDL_HAPTIC_DAMPER: |
|
|
case SDL_HAPTIC_INERTIA: |
|
|
case SDL_HAPTIC_FRICTION: |
|
|
hap_condition = &src->condition; |
|
|
condition = SDL_malloc(sizeof(FFCONDITION) * dest->cAxes); |
|
|
if (condition == NULL) { |
|
|
return SDL_OutOfMemory(); |
|
|
if (dest->cAxes > 0) { |
|
|
hap_condition = &src->condition; |
|
|
condition = SDL_malloc(sizeof(FFCONDITION) * dest->cAxes); |
|
|
if (condition == NULL) { |
|
|
return SDL_OutOfMemory(); |
|
|
} |
|
|
SDL_memset(condition, 0, sizeof(FFCONDITION)); |
|
|
|
|
|
/* Specifics */ |
|
|
for (i = 0; i < dest->cAxes; i++) { |
|
|
condition[i].lOffset = CONVERT(hap_condition->center[i]); |
|
|
condition[i].lPositiveCoefficient = |
|
|
CONVERT(hap_condition->right_coeff[i]); |
|
|
condition[i].lNegativeCoefficient = |
|
|
CONVERT(hap_condition->left_coeff[i]); |
|
|
condition[i].dwPositiveSaturation = |
|
|
CCONVERT(hap_condition->right_sat[i] / 2); |
|
|
condition[i].dwNegativeSaturation = |
|
|
CCONVERT(hap_condition->left_sat[i] / 2); |
|
|
condition[i].lDeadBand = CCONVERT(hap_condition->deadband[i] / 2); |
|
|
} |
|
|
} |
|
|
SDL_memset(condition, 0, sizeof(FFCONDITION)); |
|
|
|
|
|
/* Specifics */ |
|
|
for (i = 0; i < dest->cAxes; i++) { |
|
|
condition[i].lOffset = CONVERT(hap_condition->center[i]); |
|
|
condition[i].lPositiveCoefficient = |
|
|
CONVERT(hap_condition->right_coeff[i]); |
|
|
condition[i].lNegativeCoefficient = |
|
|
CONVERT(hap_condition->left_coeff[i]); |
|
|
condition[i].dwPositiveSaturation = |
|
|
CCONVERT(hap_condition->right_sat[i] / 2); |
|
|
condition[i].dwNegativeSaturation = |
|
|
CCONVERT(hap_condition->left_sat[i] / 2); |
|
|
condition[i].lDeadBand = CCONVERT(hap_condition->deadband[i] / 2); |
|
|
} |
|
|
dest->cbTypeSpecificParams = sizeof(FFCONDITION) * dest->cAxes; |
|
|
dest->lpvTypeSpecificParams = condition; |
|
|
|
|
|