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

Method CalcForce

Feedback360/Feedback360Effect.cpp:165–277  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected