| 269 | */ |
| 270 | |
| 271 | bool ParticleDeclaration::Initialize() |
| 272 | { |
| 273 | if (!ParticleDeclarationLibrary::Initialize()) |
| 274 | { |
| 275 | NazaraError("Failed to initialise library"); |
| 276 | return false; |
| 277 | } |
| 278 | |
| 279 | try |
| 280 | { |
| 281 | ErrorFlags flags(ErrorFlag_Silent | ErrorFlag_ThrowException); |
| 282 | |
| 283 | // Layout : Type |
| 284 | ParticleDeclaration* declaration; |
| 285 | |
| 286 | // ParticleLayout_Billboard : ParticleStruct_Billboard |
| 287 | declaration = &s_declarations[ParticleLayout_Billboard]; |
| 288 | declaration->EnableComponent(ParticleComponent_Color, ComponentType_Color, NazaraOffsetOf(ParticleStruct_Billboard, color)); |
| 289 | declaration->EnableComponent(ParticleComponent_Life, ComponentType_Float1, NazaraOffsetOf(ParticleStruct_Billboard, life)); |
| 290 | declaration->EnableComponent(ParticleComponent_Normal, ComponentType_Float3, NazaraOffsetOf(ParticleStruct_Billboard, normal)); |
| 291 | declaration->EnableComponent(ParticleComponent_Position, ComponentType_Float3, NazaraOffsetOf(ParticleStruct_Billboard, position)); |
| 292 | declaration->EnableComponent(ParticleComponent_Rotation, ComponentType_Float1, NazaraOffsetOf(ParticleStruct_Billboard, rotation)); |
| 293 | declaration->EnableComponent(ParticleComponent_Size, ComponentType_Float2, NazaraOffsetOf(ParticleStruct_Billboard, size)); |
| 294 | declaration->EnableComponent(ParticleComponent_Velocity, ComponentType_Float3, NazaraOffsetOf(ParticleStruct_Billboard, velocity)); |
| 295 | |
| 296 | NazaraAssert(declaration->GetStride() == sizeof(ParticleStruct_Billboard), "Invalid stride for declaration ParticleLayout_Billboard"); |
| 297 | |
| 298 | // ParticleLayout_Model : ParticleStruct_Model |
| 299 | declaration = &s_declarations[ParticleLayout_Model]; |
| 300 | declaration->EnableComponent(ParticleComponent_Life, ComponentType_Float1, NazaraOffsetOf(ParticleStruct_Model, life)); |
| 301 | declaration->EnableComponent(ParticleComponent_Position, ComponentType_Float3, NazaraOffsetOf(ParticleStruct_Model, position)); |
| 302 | declaration->EnableComponent(ParticleComponent_Rotation, ComponentType_Quaternion, NazaraOffsetOf(ParticleStruct_Model, rotation)); |
| 303 | declaration->EnableComponent(ParticleComponent_Velocity, ComponentType_Float3, NazaraOffsetOf(ParticleStruct_Model, velocity)); |
| 304 | |
| 305 | NazaraAssert(declaration->GetStride() == sizeof(ParticleStruct_Model), "Invalid stride for declaration ParticleLayout_Model"); |
| 306 | |
| 307 | // ParticleLayout_Sprite : ParticleStruct_Sprite |
| 308 | declaration = &s_declarations[ParticleLayout_Sprite]; |
| 309 | declaration->EnableComponent(ParticleComponent_Color, ComponentType_Color, NazaraOffsetOf(ParticleStruct_Sprite, color)); |
| 310 | declaration->EnableComponent(ParticleComponent_Life, ComponentType_Float1, NazaraOffsetOf(ParticleStruct_Sprite, life)); |
| 311 | declaration->EnableComponent(ParticleComponent_Position, ComponentType_Float3, NazaraOffsetOf(ParticleStruct_Sprite, position)); |
| 312 | declaration->EnableComponent(ParticleComponent_Rotation, ComponentType_Float1, NazaraOffsetOf(ParticleStruct_Sprite, rotation)); |
| 313 | declaration->EnableComponent(ParticleComponent_Velocity, ComponentType_Float3, NazaraOffsetOf(ParticleStruct_Sprite, velocity)); |
| 314 | |
| 315 | NazaraAssert(declaration->GetStride() == sizeof(ParticleStruct_Sprite), "Invalid stride for declaration ParticleLayout_Sprite"); |
| 316 | } |
| 317 | catch (const std::exception& e) |
| 318 | { |
| 319 | NazaraError("Failed to initialize particle declarations: " + String(e.what())); |
| 320 | return false; |
| 321 | } |
| 322 | |
| 323 | return true; |
| 324 | } |
| 325 | |
| 326 | /*! |
| 327 | * \brief Uninitializes the particle declaration librairies |
nothing calls this directly
no test coverage detected