Skip to content

Instantly share code, notes, and snippets.

@BaldarSilveraxe
Created August 14, 2015 17:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save BaldarSilveraxe/4a99249417352c754556 to your computer and use it in GitHub Desktop.
Save BaldarSilveraxe/4a99249417352c754556 to your computer and use it in GitHub Desktop.
Roll20 API
/*global sendChat, createObj, getObj, toFront, state, _, log, on*/ /*jslint white: true */
var tokenSlider = tokenSlider || (function(){
'use strict';
var version = 0.1,
lastUpdate = 1439553559,
schemaVersion = 0.1,
sliderURL = 'https://s3.amazonaws.com/files.d20.io/images/11533373/FMkZYp0p7Si1FIEPe-94mg/thumb.png?1439570208',
sliderAction = function(represents) {
sendChat('tokenSlider','For Token: ' + represents);
//Do something
},
createNewSlider = function(obj) {
var slider = createObj('graphic', {
pageid: obj.get('pageid'), imgsrc: sliderURL, left: obj.get('left') - (obj.get('width') / 2) + 10,
top: obj.get('top') + (obj.get('height') / 2) - 10, width: 20, height: 20, layer: obj.get('layer'), isdrawing: true,
represents: obj.get('id'), bar1_value: true, controlledby: getObj('character', obj.get('represents')).get('controlledby')
});
return slider;
},
setSlider = function(obj, slider) {
slider.set({
left: obj.get('left') - (obj.get('width') / 2) + 10, top: obj.get('top') + (obj.get('height') / 2) - 10, width: 20, height: 20,
layer: obj.get('layer'), isdrawing: true, represents: obj.get('id'), rotation: 0,
controlledby: getObj('character', obj.get('represents')).get('controlledby')
});
},
handleSlider = function(obj) {
var token = getObj('graphic', obj.get('represents'));
if( undefined === token) {obj.remove(); return; }
setSlider(token,obj);
toFront(obj);
sliderAction(obj.get('represents'));
return;
},
handleToken = function(obj) {
var slider = state.tokenSlider[ obj.get('pageid') + '|' + obj.get('represents') + '|' + obj.get('id') ];
if( undefined === slider ) {
slider = createNewSlider(obj);
state.tokenSlider[ obj.get('pageid') + '|' + obj.get('represents') + '|' + obj.get('id') ] = slider.get('id');
toFront(slider);
}else{
slider = getObj('graphic', slider);
if( undefined === slider ) {
slider = createNewSlider(obj);
state.tokenSlider[ obj.get('pageid') + '|' + obj.get('represents') + '|' + obj.get('id') ] = slider.get('id');
toFront(slider);
return;
}
setSlider(obj,slider);
toFront(slider);
}
},
onStart = function() {
if( ! _.has(state,'tokenSlider') || state.tokenSliderVersion !== schemaVersion ) {
log('tokenSlider: Initialize State');
state.tokenSlider = {};
state.tokenSliderVersion = schemaVersion;
}
},
handleGraphicChange = function(obj) {
if ( '' === obj.get('represents') ) {return; }
if( sliderURL === obj.get('imgsrc') ) {
if( true === obj.get('bar1_value') ) {obj.set('bar1_value', false); return; }
handleSlider(obj); return;
}
handleToken(obj);
},
handleGraphicDestroy = function(obj) {
var slider,token;
if ( '' === obj.get('represents') ) {return; }
if( sliderURL === obj.get('imgsrc') ) {
token = getObj('graphic', obj.get('represents'));
if( undefined === token ) {return; }
slider = createNewSlider(token);
state.tokenSlider[ token.get('pageid') + '|' + token.get('represents') + '|' + token.get('id') ] = slider.get('id');
toFront(slider); return;
}
slider = state.tokenSlider[ obj.get('pageid') + '|' + obj.get('represents') + '|' + obj.get('id') ];
if( undefined === slider ) {return; }
slider = getObj('graphic', slider);
slider.set('represents','');
slider.remove();
},
registerEventHandlers = function(){
var data = new Date(lastUpdate*1000);
log('Token Slider ' + data + ' version: ' + version + ' Schema Version: ' + schemaVersion);
on('change:graphic', handleGraphicChange);
on('add:graphic', handleGraphicChange);
on('destroy:graphic', handleGraphicDestroy);
};
return {
RegisterEventHandlers: registerEventHandlers,
Start: onStart
};
}());
on('ready',function(){
'use strict';
tokenSlider.RegisterEventHandlers();
tokenSlider.Start();
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment