How Can I?... Create A Custom Logic To Modify The Timer Node (add/subtract Value)

Discussion in 'How Can I...?' started by Vlad-NY, Jul 10, 2020.

  1. Vlad-NY

    Vlad-NY Serious Boxer

    Joined:
    Jul 21, 2018
    Messages:
    604
    Likes Received:
    360
    Ok, here's what you need to do:

    • Add a new input called "Modify" to your timer
    • [​IMG]
    • Add a new Attribute (number attribute) called "Add/Sub Value"
    • [​IMG]

    Now the coding part:
    • Add a variable at the top of your code just before init() method called addSubValue
    • Code:
      let addSubValue = 0;
      
    • Initialize the value in init method
    • Code:
      
          addSubValue = this.attribute('Add/Sub Value');
      
    • On your signal function add a else if after "Pause" condition
    • Code:
        else if (name == 'Modify' && value){
              error(totalTime + addSubValue);
              if((totalTime + addSubValue) < 0){
                  totalTime = 0;
              }else{
                  totalTime += addSubValue;
              }
          }
    Well done now you can change the timer value using this new logic
     
    TheGameAppStudio likes this.
  2. TheGameAppStudio

    TheGameAppStudio Serious Boxer

    Joined:
    Nov 2, 2016
    Messages:
    927
    Likes Received:
    318
    @Vlad-NY Thank you :) .Works as expected ;)
     
  3. Vlad-NY

    Vlad-NY Serious Boxer

    Joined:
    Jul 21, 2018
    Messages:
    604
    Likes Received:
    360
    I'm glad I could help, Stay safe and have fun creating games!
     
    TheGameAppStudio likes this.
  4. Roman88

    Roman88 Boxer

    Joined:
    Oct 7, 2020
    Messages:
    5
    Likes Received:
    0
    @Vlad-NY
    Hi! I don't know where to insert this code.

    else if (name == 'Modify' && value){
    error(totalTime + addSubValue);
    if((totalTime + addSubValue) < 0){
    totalTime = 0;
    }else{
    totalTime += addSubValue;
    }
    }


    What line of code?
     
  5. Vlad-NY

    Vlad-NY Serious Boxer

    Joined:
    Jul 21, 2018
    Messages:
    604
    Likes Received:
    360
    • On your signal function add a else if after "Pause" condition
     
  6. Roman88

    Roman88 Boxer

    Joined:
    Oct 7, 2020
    Messages:
    5
    Likes Received:
    0
    @Vlad-NY
    Sorry. I don't understand English very well. It's hard to understand. Insert this code into the node timer? Can you show me an example? Please(
     
  7. Roman88

    Roman88 Boxer

    Joined:
    Oct 7, 2020
    Messages:
    5
    Likes Received:
    0
    in the timer code, I added this:

    let addSubValue = 0;

    addSubValue = this.attribute('Add/Sub Value');


    Code:
    //
    let enabled = false;
    
    let time = 0;
    let numOfEvents; //null is repeat forever
    
    let totalTime = 0;
    let eventCount = 0;
    let reversed = false;
    let timeFormat = 'Number';
    
    let paused = false;
    
    let addSubValue = 0;
    
    function init() {
    time = Math.max(0, this.attribute('Time'));
        numOfEvents = this.attribute('Number of events');
        reversed = this.attribute('Reversed');
        timeFormat = this.attribute('Time Value Format');
        addSubValue = this.attribute('Add/Sub Value');
       
    
        if (numOfEvents != null) {
            numOfEvents = Math.abs(Math.floor(numOfEvents));
           
        }
    
        this.entity().modifyTimer = modifyTimer;
        this.entity().pauseTimer = pauseTimer;
    
        component.modifyTimer = modifyTimer;
        component.pauseTimer = pauseTimer;
       
    }
    
    
    function update(dt) {
        if (!enabled) return;
    
        if (paused) {
            this.emitSignal('Time Value', getTimeOutput());
            return;
        }
    
        totalTime += dt;
    
        this.emitSignal('Time Value', getTimeOutput());
    
        if (totalTime > time) {
            totalTime = 0;
            eventCount += 1;
    
            this.emitSignal('Timeout', true);
    
            if (numOfEvents != null && eventCount >= numOfEvents) {
                enabled = false;
            }
        }
    }
    
    function signal(name, value) {
        /****/ if (name == 'Enabled') {
            enabled = value;
        } else if (name == 'Reset' && value) {
            totalTime = 0;
            eventCount = 0;
            time = Math.max(0, this.attribute('Time'));
        } else if (name == 'Pause') {
            paused = value;
        }
    }
    
    function getTimeOutput() {
        let timeOutput = 0;
    
        if (reversed) {
            timeOutput = time - totalTime;
        } else {
            timeOutput = totalTime;
        }
    
        if (timeFormat == 'MM:SS') {
            let seconds = Math.floor(timeOutput % 60);
            let minutes = Math.floor((timeOutput - seconds) / 60);
    
            if (seconds < 10) {
                seconds = '0' + seconds;
            }
    
            if (minutes < 1) {
                minutes = '00';
            } else if (minutes < 10) {
                minutes = '0' + minutes;
            }
    
            timeOutput = minutes + ':' + seconds;
    
        } else if (timeFormat == 'Seconds') {
            timeOutput = timeOutput.toFixed(0);
        }
    
        return timeOutput;
    }
    
    function modifyTimer(value, type) {
        if (reversed) {
            value *= -1;
        }
    
        totalTime += value;
    
        if (totalTime < 0) {
            totalTime = 0;
        }
    }
    
    function pauseTimer(value) {
        paused = value;
    
    }
    
    
    Code:
    //
    else if (name == 'Modify' && value){
    error(totalTime + addSubValue);
    if((totalTime + addSubValue) < 0){
    totalTime = 0;
    }else{
    totalTime += addSubValue;
    }
    }
    
    @Vlad-NY Add this here as well?
     

Share This Page