Coder Social home page Coder Social logo

Comments (4)

MichPerry-GG avatar MichPerry-GG commented on August 20, 2024

Could you post a little more sample code and which assets you use? Need a full reproduction case to test and fix on our end.

from torque2d.

lilligreen avatar lilligreen commented on August 20, 2024

The issue is here in ParticlePlayer.cc:

void ParticlePlayer::stop( const bool waitForParticles, const bool killEffect )
{
// Finish if we're not playing and there's no kill command.
if ( !mPlaying && !killEffect )
return;

// Fetch emitter count.
const U32 emitterCount = mEmitters.size();

// Are we waiting for particles to end?
if ( waitForParticles )
{
// Yes, so pause all the emitters.
for ( U32 emitterIndex = 0; emitterIndex < emitterCount; ++emitterIndex )
{
// Fetch the emitter.
mEmitters[emitterIndex]->setPaused( true );
}

// Set waiting for particles.
mWaitingForParticles = true;

// Flag as waiting for deletion if killing effect.
if ( killEffect )
mWaitingForDelete = true;

return;
}

// No, so free all particles.
for ( U32 emitterIndex = 0; emitterIndex < emitterCount; ++emitterIndex )
{
mEmitters[emitterIndex]->freeAllParticles();
}

// Reset the age.
mAge = 0.0f;

// Flag as stopped and not waiting.
mPlaying = mWaitingForParticles = mWaitingForDelete = false;

// Turn off paused.
mPaused = false;

// Set safe deletion.
setSafeDelete(true);

// Perform the callback.
if( isMethod( "onStopParticlePlayer" ) )
Con::executef( this, 1, "onStopParticlePlayer" );

// Flag for immediate deletion if killing.
if ( killEffect )
safeDelete();
}

The waitForParticles bool needs to be handled differently, when it is true the return is skipping half the function. If this was TorqueScript I would have provided a solution, but I am not yet comfortable tinkering with C++ source.

from torque2d.

lilligreen avatar lilligreen commented on August 20, 2024

Sorry, forgot to include a sample test case. Here is a really quick toy. You can use the reset button in the sandbox to start and stop the player.

function TestToy::create( %this )
{
// Load the particle.
TestToy.Player = new ParticlePlayer();
TestToy.Player.Particle = "ToyAssets:bonfire";

// Add the player to the scene.
SandboxScene.add(TestToy.Player);
}


//-----------------------------------------------------------------------------

function TestToy::destroy( %this )
{
}

//-----------------------------------------------------------------------------

function TestToy::reset( %this )
{
// Toggle the player play/stop state.
echo(TestToy.Player.getIsPlaying());
if (TestToy.Player.getIsPlaying())
{
TestToy.Player.stop(true, true);
echo("stopped");
}else
{
TestToy.Player.play();
echo("playing");
} 
}

With full metrics on, you can see the player is stopped but not deleted. Plus it will not play again.

from torque2d.

capnlove avatar capnlove commented on August 20, 2024

Fixed in #84

The problem was relatively simple.

ParticlePlayer.stop(), when called with the 'WaitforParticles' argument set to true, paused each emitter.
This was fixed by unpausing all Emitters when ParticlePlayer.play() is called.

As for the ParticlePlayer's stop issue which was happening when both 'WaitforParticles' and 'KillEffect' were set to true, the problem was that if a ParticleEmitter's lifemode was set to INFINITE (the default), it never got to the part of code which handled the deletion of the emitter.

from torque2d.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.