How to pause a script?

Hi, I need to pause this simple Sine script, when the game is paused, just as everything else is frozen when you pause. But how do you pause a script? Here is the script

var Sine = pc.createScript('sine');

Sine.attributes.add('amplitudeScale', { type: 'number', default: 1 });
Sine.attributes.add('frequencyScale', { type: 'number', default: 1 });

// initialize code called once per entity
Sine.prototype.initialize = function() {
    var app = this.app;
    
    this.timer = 0;
    this.sineActive = true;
    this.paused = false;
    
        app.on('game:pause', function () {
        this.paused = true;
    }, this);
    app.on('game:unpause', function () {
        this.paused = false;
    }, this);
    
        this.app.on('game:getready', function () {
        this.sineActive = true;
    }, this);
    
    this.app.on('game:play', function () {
        this.sineActive = false;
    }, this);
    
};

// update code called every frame
Sine.prototype.update = function(dt) {
    if (this.sineActive) {
    dt *= this.frequencyScale;
    this.timer += dt;
    this.entity.setLocalPosition(-0.28, Math.sin(this.timer) * this.amplitudeScale, 0);
    }
};

Thanks for any help :sunny:

Hey, you have everything in place just need a check in your update method, something like this:

// update code called every frame
Sine.prototype.update = function(dt) {
    if (this.sineActive && this.paused === false) {
    dt *= this.frequencyScale;
    this.timer += dt;
    this.entity.setLocalPosition(-0.28, Math.sin(this.timer) * this.amplitudeScale, 0);
    }
};

This didn’t work initially, I had to assign what pause meant and then set it as disabled first, like this:

var Sine = pc.createScript('sine');

Sine.attributes.add('amplitudeScale', { type: 'number', default: 1 });
Sine.attributes.add('frequencyScale', { type: 'number', default: 1 });

// initialize code called once per entity
Sine.prototype.initialize = function() {
    this.timer = 0;
    this.sineActive = true;
    this.paused = false;
    
    this.app.on('game:getready', function () {
        this.sineActive = true;
    }, this);
    
    this.app.on('game:play', function () {
        this.sineActive = false;
    }, this);
    
    
    
    this.app.on('game:pause', function () {
        this.paused = true;
    }, this);



    this.app.on('game:unpause', function () {
        this.paused = false;
    }, this);
    
    
    
};

// update code called every frame
Sine.prototype.update = function(dt) {
    if (this.sineActive && this.paused === false) {
    dt *= this.frequencyScale;
    this.timer += dt;
    this.entity.setLocalPosition(-0.28, Math.sin(this.timer) * this.amplitudeScale, 0);
    }
};

It now works, so thanks :smiley:

1 Like