Created
April 1, 2016 23:38
-
-
Save BaldarSilveraxe/cbfed6d6c94c636ddf243c838d0879ba to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /*global on, _, getObj, createObj, findObjs, state */ | |
| /*jslint white: true, bitwise: true, for: true, multivar: true, browser: true */ | |
| var deluxe_dungeon_designer = deluxe_dungeon_designer || (function() { | |
| 'use strict'; | |
| var script = 'deluxe_dungeon_designer', | |
| version = 0.10, | |
| last_update = 1459468801, //Unix timestamp | |
| schema_version = 0.10, | |
| percentChange = 0.3, | |
| maxColor = 168, | |
| http = 'https://s3.amazonaws.com/files.d20.io/images/', | |
| file = 'thumb.png?', | |
| deleteSource = http + '16499766/kYvZHn25orNHvu0CbX4Qpw/' + file + '1456084159', | |
| createSource = http + '16686548/SZa2lFqdvt6PaWWI4RkHKA/' + file + '1456606560', | |
| bkgrndSource = http + '16352171/kK8h6OH-zLXEf0-kQBtUkw/' + file + '1455671236', | |
| knobLRSource = http + '16435047/0xrxAYHly_m8b5M2E9-xIw/' + file + '1234567890', | |
| knobUDSource = http + '16435047/0xrxAYHly_m8b5M2E9-xIw/' + file + '0987654321', | |
| shakerSource = http + '16446393/coPNDoCKjLylrxsim8pKWg/' + file + '1455958737', | |
| featureArray = [ | |
| {lt: 875, tp: 700, wh: 1750, ht: 1400, ic: bkgrndSource, lr: 'map', rn: 0}, | |
| {lt: 210, tp: 1265, wh: 150, ht: 150, ic: knobLRSource, lr: 'objects', rn: 0}, | |
| {lt: 1545, tp: 1265, wh: 150, ht: 150, ic: knobUDSource, lr: 'objects', rn: 90}, | |
| {lt: 1545, tp: 700, wh: 150, ht: 150, ic: shakerSource, lr: 'objects', rn: 0} | |
| ], | |
| hexToRgb = function (hex) { | |
| var result, shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; | |
| hex = hex.replace(shorthandRegex, function(m, r, g, b) { | |
| return r + r + g + g + b + b; | |
| }); | |
| result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); | |
| return result ? { | |
| r: parseInt(result[1], 16), | |
| g: parseInt(result[2], 16), | |
| b: parseInt(result[3], 16) | |
| } : null; | |
| }, | |
| step_color = function (color, percent) { | |
| var f = parseInt(color.slice(1),16), | |
| t = percent<0 ? 0 : 255, | |
| p = percent<0 ? percent*-1 : percent, | |
| R = f>>16, | |
| G = f>>8&0x00FF, | |
| B = f&0x0000FF; | |
| return "#"+(0x1000000+(Math.round((t-R)*p)+R)*0x10000+(Math.round((t-G)*p)+G)*0x100+(Math.round((t-B)*p)+B)).toString(16).slice(1); | |
| }, | |
| reset_map = function (o){ | |
| _.each(findObjs({pageid: o.get('pageid'), type: 'path', controlledby: script}), function(e) { | |
| if ( hexToRgb(e.get('stroke')).r >= maxColor ) { | |
| e.set('controlledby', 'remove'); | |
| e.remove(); | |
| }else{ | |
| e.set('stroke', step_color(e.get('stroke'),percentChange) ); | |
| } | |
| }); | |
| }, | |
| control_change = function (cMove,pageid) { | |
| var control = state[script].data[pageid],delta,loc,l,t,w,h; | |
| delta = ((cMove.oldLoc-cMove.newLoc)< -100)?-100:((cMove.oldLoc-cMove.newLoc)>100)?100:(cMove.oldLoc-cMove.newLoc); | |
| if( 'up/down' === cMove.which ) { | |
| loc = ((control.currentTop - delta) < 242) ? 242 : ((control.currentTop - delta) > 1106) ? 1106 : (control.currentTop - delta); | |
| l = control.currentLeft; | |
| t = Math.round((control.currentTop + loc) /2); | |
| w = 1; | |
| h = Math.round(Math.abs(control.currentTop - loc)) + 1 ; | |
| state[script].data[pageid] = { | |
| currentLeft: l, | |
| currentTop: loc | |
| }; | |
| } | |
| if( 'left/right' === cMove.which ) { | |
| loc = ((control.currentLeft - delta) < 309) ? 309 : ((control.currentLeft - delta) > 1438) ? 1438 : (control.currentLeft - delta); | |
| l = Math.round((control.currentLeft + loc) /2); | |
| t = control.currentTop; | |
| w = Math.round(Math.abs(control.currentLeft - loc)) + 1; | |
| h = 1; | |
| state[script].data[pageid] = { | |
| currentLeft: loc, | |
| currentTop: t | |
| }; | |
| } | |
| _(2).times(function(n){ | |
| createObj('path', { | |
| left: l, top: t, width: w, height: h, pageid: pageid, layer: n===0?'objects':'walls', stroke_width: 2, stroke: '#000000', | |
| path: '[["M", 0, 0],["L", '+ w+', 0],["L", '+ w+', '+ h+'],["L", 0, '+ h+'],["L", 0, 0]]', controlledby: 'add' | |
| }); | |
| }); | |
| }, | |
| orphan_token = function(pgid){ | |
| _.each(findObjs({pageid: pgid, type: 'graphic', imgsrc: createSource}), function(e) { | |
| e.remove(); | |
| }); | |
| }, | |
| on_add_graphic = function(o) { | |
| var pg,g,u=o.get('imgsrc'),eu; | |
| if( u !== createSource ){ return; } | |
| pg = o.get('pageid'); | |
| g = findObjs({pageid: pg, type: 'graphic', imgsrc: bkgrndSource}); | |
| getObj('page', pg).set({width: 25, height: 25, gridcolor: 'transparent', background_color: '#FFFFFF'}); | |
| if( 0 === g.length ) { | |
| if( !_.has(state[script].data, pg) ) { state[script].data[pg] = {currentLeft: 700, currentTop: 700 }; } | |
| _.each(featureArray, function(f) { | |
| createObj('graphic', {left: f.lt, top: f.tp, width: f.wh, height: f.ht, imgsrc: f.ic, | |
| pageid: pg, isdrawing: true, layer: f.lr, rotation: f.rn, controlledby: 'add' | |
| }); | |
| }); | |
| }else{ | |
| _.each(findObjs({pageid: pg, type: 'graphic' }), function(e) { | |
| eu = e.get('imgsrc'); | |
| if( (eu === knobLRSource) || (eu === knobUDSource) || (eu === bkgrndSource) || (eu === shakerSource) ) { | |
| e.set('imgsrc', deleteSource); | |
| e.remove(); | |
| } | |
| }); | |
| _.each(findObjs({pageid: pg, type: 'path', controlledby: script}), function(e) { | |
| e.set('controlledby', 'remove'); | |
| e.remove(); | |
| }); | |
| } | |
| setTimeout(function() { orphan_token(pg); }, 10); | |
| }, | |
| on_change_graphic = function (o,p) { | |
| var f,u=o.get('imgsrc'),pg = o.get('pageid'); | |
| if ( 'add' === o.get('controlledby') ) { | |
| o.set('controlledby', ''); | |
| return; | |
| } | |
| if( u !== knobLRSource && u !== knobUDSource && u !== shakerSource ) { return; } | |
| if( !_.has(state, script) && !_.has(state[script].data, pg) ) { return; } | |
| f = _.findWhere(featureArray, {ic: u }); | |
| if( u === shakerSource ){ reset_map(o); } | |
| if( u === knobLRSource && !_.isUndefined(p) ) { control_change({which: 'left/right', newLoc: o.get('left'), oldLoc: p.left},pg); } | |
| if( u === knobUDSource && !_.isUndefined(p) ) { control_change({which: 'up/down', newLoc: o.get('top'), oldLoc: p.top},pg); } | |
| if( !_.isUndefined(f.wh) ) { | |
| o.set({width: f.wh, height: f.ht, left: f.lt, top: f.tp, isdrawing: true, layer: f.lr, fliph: false, flipv: false, rotation: f.rn }); | |
| } | |
| }, | |
| on_destroy_graphic = function(o) { | |
| var u = o.get('imgsrc'); | |
| if( u === knobLRSource || u === knobUDSource || u === bkgrndSource || u === shakerSource ){ | |
| createObj('graphic', { | |
| left: o.get('left'), top: o.get('top'), width: o.get('width'), height: o.get('height'), imgsrc: u, pageid: o.get('pageid'), | |
| isdrawing: true, layer: o.get('layer'), rotation: o.get('rotation'), controlledby: 'add' | |
| }); | |
| } | |
| }, | |
| on_change_path = function (o,p) { | |
| if( o.get('controlledby') === 'add' ) { | |
| o.set('controlledby', script); | |
| return; | |
| } | |
| if( o.get('controlledby') === script || o.get('stroke') === p.stroke ){ | |
| createObj('path', { | |
| left: p.left, top: p.top, width: p.width, height: p.height, pageid: p._pageid, layer: p.layer, | |
| stroke_width: p.stroke_width, stroke: p.stroke, path: o.get('path'), controlledby: 'add' | |
| }); | |
| o.set('controlledby', 'remove'); | |
| o.remove(); | |
| } | |
| }, | |
| on_destroy_path = function (o) { | |
| if( o.get('controlledby') === script ) { | |
| createObj('path', { | |
| left: o.get('left'), top: o.get('top'), width: o.get('width'), height: o.get('height'), pageid: o.get('pageid'), layer: o.get('layer'), | |
| stroke_width: o.get('stroke_width'), stroke: o.get('stroke'), path: o.get('path'), controlledby: o.get('controlledby') | |
| }); | |
| } | |
| }, | |
| registerEventHandlers = function() { | |
| on('add:graphic', on_add_graphic); | |
| on('change:graphic', on_change_graphic); | |
| on('destroy:graphic', on_destroy_graphic); | |
| on('change:path', on_change_path); | |
| on('destroy:path', on_destroy_path); | |
| }, | |
| find_create_rollabletable = function() { | |
| var tables = findObjs({type: 'rollabletable',name: script}), | |
| table = tables[0] || createObj('rollabletable', {name: script,showplayers: false}), | |
| items = findObjs({rollabletableid: table.id}), | |
| item = items[0]||createObj('tableitem', {rollabletableid: table.id, avatar: createSource}); | |
| _.each(tables, function( eachItem, index ) { | |
| if( 0 !== index ) { | |
| eachItem.remove(); | |
| } | |
| }); | |
| _.each(items, function( eachItem, index ) { | |
| if( 0 !== index ) { | |
| eachItem.remove(); | |
| } | |
| }); | |
| if( item.get('avatar') !== createSource ) { | |
| item.set({avatar: createSource}); | |
| } | |
| }, | |
| ready_state = function(){ | |
| if( !_.has(state, script) || state[script].version !== schema_version ) { | |
| state[script] = { | |
| version: schema_version, | |
| data: {} | |
| }; | |
| } | |
| }, | |
| ready_module = function () { | |
| ready_state(); | |
| find_create_rollabletable(); | |
| registerEventHandlers(); | |
| }; | |
| return { | |
| ready_module: ready_module | |
| }; | |
| }()); | |
| on('ready',function(){ | |
| 'use strict'; | |
| deluxe_dungeon_designer.ready_module(); | |
| }); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment