Game Development Community

Could not register base emitter for particle...

by Thomas Bang · in Torque Game Engine Advanced · 03/09/2011 (4:51 am) · 9 replies

Could not register base emitter for particle of class: ChimneyFireEmitterNode

What does it mean?


#1
03/09/2011 (7:07 am)
Is there a valid emitter datablock?

Just blindly guessing that particular message means it (the engine) can't create (find) the emitter the node is looking to use.
#2
03/09/2011 (7:12 am)
The emitter is valid.
#3
03/09/2011 (7:14 am)
Hmm, in that case maybe the system is declared out of order... Have you arranged your datablocks such that particles are fist, then emitters, then nodes?
#4
03/09/2011 (7:18 am)
This is the loading order:

datablock ParticleData(ChimneyFire1)
{
   textureName          = "scriptsAndAssets/data/shapes/particles/smoke";
   dragCoefficient     = 0.0;
   gravityCoefficient   = -0.3;   // rises slowly
   inheritedVelFactor   = 0.00;
   lifetimeMS           = 500;
   lifetimeVarianceMS   = 250;
   useInvAlpha = false;
   spinRandomMin = -30.0;
   spinRandomMax = 30.0;

   colors[0]     = "0.8 0.6 0.0 0.1";
   colors[1]     = "0.8 0.6 0.0 0.1";
   colors[2]     = "0.0 0.0 0.0 0.0";

   sizes[0]      = 1.0;
   sizes[1]      = 1.0;
   sizes[2]      = 5.0;

   times[0]      = 0.0;
   times[1]      = 0.5;
   times[2]      = 1.0;
};

datablock ParticleData(ChimneyFire2)
{
   textureName          = "scriptsAndAssets/data/shapes/particles/smoke";
   dragCoefficient     = 0.0;
   gravityCoefficient   = -0.5;   // rises slowly
   inheritedVelFactor   = 0.00;
   lifetimeMS           = 800;
   lifetimeVarianceMS   = 150;
   useInvAlpha = false;
   spinRandomMin = -30.0;
   spinRandomMax = 30.0;

   colors[0]     = "0.6 0.6 0.0 0.1";
   colors[1]     = "0.6 0.6 0.0 0.1";
   colors[2]     = "0.0 0.0 0.0 0.0";

   sizes[0]      = 0.5;
   sizes[1]      = 0.5;
   sizes[2]      = 0.5;

   times[0]      = 0.0;
   times[1]      = 0.5;
   times[2]      = 1.0;
};

datablock ParticleEmitterData(ChimneyFireEmitter)
{
   ejectionPeriodMS = 15;
   periodVarianceMS = 5;

   ejectionVelocity = 0.25;
   velocityVariance = 0.10;

   thetaMin         = 0.0;
   thetaMax         = 90.0;  

   particles = "ChimneyFire1" TAB "ChimneyFire2";
};

datablock ParticleEmitterNodeData(ChimneyFireEmitterNode)
{
   timeMultiple = 1;
};

And the ParticleEmitterNode is created with:

new ParticleEmitterNode(Fire2) 
{
   canSaveDynamicFields = "1";
   Enabled = "1";
   position = "359.73 310.39 218.502";
   rotation = "1 0 0 0";
   scale = "1 1 1";
   dataBlock = "ChimneyFireEmitterNode";
   emitter = "ChimneyFireEmitter";
   velocity = "1";
};

#5
03/09/2011 (7:29 am)
Break your ChimneyFireEmitter into two emitters. If I recall correctly the multiple particles in a TGEa emitter does not work like it did in TGE. I think that's why I had to rework particle fx in the TGEa port of Kaboom - it's just been so long.... ;)
particles = "ChimneyFire1" TAB "ChimneyFire2";  // almost certain this doesn't work in TGEa
#6
03/09/2011 (7:33 am)
I have the code from chimneyfire.cs in TGEA. And there it works. But not in my project.
#7
03/09/2011 (7:45 am)
Hmm, last guess then: have you double checked the assets to make sure they are in the defined location?

Sorry can't be more help. I've seen the message before, it's just been so long ago that I don't recall the circumstances or what I did to correct it.
#8
03/09/2011 (8:24 am)
It is possible that your emitter is registered too early,before the game connection.Try to schedule your code with 10 seconds.
#9
03/09/2011 (9:37 am)
It has nothing to do with GameConnection because other objects with her datablocks are working fine (ItemData as example).

Test: I made particles = "ChimneyFire1" TAB "ChimneyFire2"; as a comment. Now the error message is gone. So i guess it has something to do with ParticleData or with the rendering of the particles itself.