| 234 | } |
| 235 | |
| 236 | void Tr2GpuSharedEmitter::SpawnOnce( const UpdateArguments& arguments, const Vector3& velocity, float scale, float rateModifier ) |
| 237 | { |
| 238 | if( !arguments.system || !m_enabled ) |
| 239 | { |
| 240 | return; |
| 241 | } |
| 242 | |
| 243 | auto emitter = m_emitter; |
| 244 | emitter.count = int( m_rate * rateModifier ); |
| 245 | |
| 246 | if( emitter.count ) |
| 247 | { |
| 248 | emitter.radius *= scale; |
| 249 | emitter.minSpeed *= scale; |
| 250 | emitter.maxSpeed *= scale; |
| 251 | |
| 252 | emitter.position = XMVector3TransformCoord( m_position, arguments.parentTransform ); |
| 253 | emitter.positionPrevious = emitter.position; |
| 254 | |
| 255 | emitter.velocity = velocity; |
| 256 | emitter.velocityPrevious = emitter.velocity; |
| 257 | |
| 258 | emitter.direction = XMVector3TransformNormal( m_direction, arguments.parentTransform ); |
| 259 | emitter.directionPrevious = emitter.direction; |
| 260 | |
| 261 | auto id = m_id; |
| 262 | auto hash = m_paramsHash; |
| 263 | auto params = m_params; |
| 264 | if( scale != 1.0f ) |
| 265 | { |
| 266 | params.sizes *= scale; |
| 267 | params.turbulenceAmplitude *= scale; |
| 268 | params.turbulenceFrequency = (uint32_t)( (float)params.turbulenceFrequency / scale ); |
| 269 | |
| 270 | hash = GetHash( params ); |
| 271 | id = GetID( hash ); |
| 272 | } |
| 273 | |
| 274 | arguments.system->Emit( emitter, id, hash, params ); |
| 275 | } |
| 276 | } |
no test coverage detected