{ "name" : "Stop/Move Detection", "attributes": [ { "name": "Reset", "type": "Boolean", "connection": "Input" }, { "name": "Enabled", "type": "Boolean", "connection": "Input" }, { "name": "Speed Tolerance", "type": "Number", "connection": "None", "value":0.5, "editable": true }, { "name": "Time Tolerance", "type": "Number", "connection": "None", "value":0.2, "editable": true }, { "name": "Stopped", "type": "Boolean", "connection": "Output", "editable": true }, { "name": "Moved", "type": "Boolean", "connection": "Output", "editable": true } ], "script": "//by Smart Penguins https://www.youtube.com/channel/UCHDFEsDQ8dKjEBEVCbAPZZw/ let enabled; let posPrev; let speedTolr = .1; let timeTolr = .5; let moveTime = 0; let stopTime = 0; let state = 0; //0 unknown, 1 stopped, 2 moved function init(){ posPrev = this.entity().position(); speedTolr=this.attribute('Speed Tolerance'); timeTolr=this.attribute('Time Tolerance'); } function start(){ } function update(dt){ if(!enabled)return; dist = posPrev.distance(this.entity().position()); posPrev=this.entity().position(); if(dist=timeTolr){ state=1; this.emitSignal('Stopped',true); } }else{ stopTime=0; if(state==2)return; moveTime+=dt; if(moveTime>=timeTolr){ state=2; this.emitSignal('Moved',true); } } } function signal(name, value){ if(name=='Enabled'){ state=0; stopTime=0; moveTime=0; enabled=value; posPrev = this.entity().position(); }else if(name=='Reset'){ state=0; stopTime=0; moveTime=0; } } " }