MCPcopy Create free account
hub / github.com/360Controller/360Controller / CalcForce

Method CalcForce

XBOBTFF/FeedbackXBOEffect.cpp:169–281  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

167}
168
169void FeedbackXBOEffect::CalcForce(ULONG Duration, ULONG CurrentPos, LONG NormalRate, LONG AttackLevel, LONG FadeLevel, LONG * NormalLevel)
170{
171 LONG Magnitude = 0;
172 LONG Period;
173 LONG R;
174 LONG Rate;
175
176 if (CFEqual(Type, kFFEffectType_ConstantForce_ID)) {
177 Magnitude = DiConstantForce.lMagnitude;
178 Magnitude = ( Magnitude * NormalRate + AttackLevel + FadeLevel ) / 100;
179 }
180 else if (CFEqual(Type, kFFEffectType_Square_ID)) {
181 Period = max( (DWORD)1, ( DiPeriodic.dwPeriod / 1000 ) );
182 R = ( CurrentPos%Period) * 360 / Period;
183 R = ( R + ( DiPeriodic.dwPhase / 100 ) ) % 360;
184
185 Magnitude = DiPeriodic.dwMagnitude;
186 Magnitude = ( Magnitude * NormalRate + AttackLevel + FadeLevel ) / 100;
187
188 if (180 <= R)
189 {
190 Magnitude = Magnitude * -1;
191 }
192
193 Magnitude = Magnitude + DiPeriodic.lOffset;
194 }
195 else if (CFEqual(Type, kFFEffectType_Sine_ID)) {
196 Period = max( (DWORD)1, ( DiPeriodic.dwPeriod / 1000 ) );
197 R = (CurrentPos%Period) * 360 / Period;
198 R = ( R + ( DiPeriodic.dwPhase / 100 ) ) % 360;
199
200 Magnitude = DiPeriodic.dwMagnitude;
201 Magnitude = ( Magnitude * NormalRate + AttackLevel + FadeLevel ) / 100;
202
203 Magnitude = ( int)( Magnitude * sin( R * M_PI / 180.0 ) );
204
205 Magnitude = Magnitude + DiPeriodic.lOffset;
206 }
207 else if (CFEqual(Type, kFFEffectType_Triangle_ID)) {
208 Period = max( (DWORD)1, ( DiPeriodic.dwPeriod / 1000 ) );
209 R = (CurrentPos%Period) * 360 / Period;
210 R = ( R + ( DiPeriodic.dwPhase / 100 ) ) % 360;
211
212 Magnitude = DiPeriodic.dwMagnitude;
213 Magnitude = ( Magnitude * NormalRate + AttackLevel + FadeLevel ) / 100;
214
215 if (0 <= R && R < 90)
216 {
217 Magnitude = -Magnitude * ( 90 - R ) / 90;
218 }
219 if (90 <= R && R < 180)
220 {
221 Magnitude = Magnitude * ( R - 90 ) / 90;
222 }
223 if (180 <= R && R < 270)
224 {
225 Magnitude = Magnitude * ( 90 - ( R - 180 ) ) / 90;
226 }

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected