//0. Add you dependencies in your controller.json : // { ... // "controllerDependencies": [ // ... // "/thirdparty/Snaptobus/snap.svg-min", // "/thirdparty/Snaptobus/snaptobus" // ] // } // 1. Create your sprites : agentTypes = { molecule1:{ type: 'circle', attrs: { r: 10, fill: '#BFB', stroke: "#0A0", strokeWidth: 2, } }, molecule2:{ type: 'circle', attrs: { r: 10, fill: '#BBF', stroke: "#00A", strokeWidth: 2, } } } // 2. instantiate Snaptobus with the SVG playground selector, the sprites definitions, // and the configuration mapping bus chans, bus event, and events playloads to SNap attributes // You can assign a path in the event payload, or a transformer function like : // fill: { // arguments: [ 'age' ], // What to give from the event as function's params // transformer: i => `rgb(${Math.round(255 * i / 10)},0,${Math.round(255 * (1 - i / 10))})` // }, // this.snaptobus = new Snaptobus({ snap: Snap("svg.stb"), spriteDefs: this.agentTypes, busConfig: [ { chan: 'gps:agents', // What to subscribe to events: [ // What to select on this chan { eventName: 'moving', // which event will trigger a change snaps: [ { selector: '#${aid}', // what svg elements do we change ? assign: { // what do we change and with what from the payload ? cx: 'attrs.x', cy: 'attrs.y', }, animate: true } ] }, ] }, ] }) //3. Create your sprites this.createAgent('molecule2', 'agent42', 100,100) createAgent(agentType, id, x, y){ if(!Object.keys(this.agentTypes).includes(agentType)) return this.agentTypes[agentType] const svgAgent = this.snaptobus.snap[this.agentTypes[agentType].type]().attr(this.agentTypes[agentType].attrs) svgAgent.attr({ id: id, cx: x, cy:y, }) } //4. Send a bus event like : (this is a bmsg) // { // "channel":"gps:agents", // "packet":{ // "eventType": "moving", // "payload": { // "aid": "agent42", // "attrs": { // "x": "950", // "y": "650" // } // }, // "sender": "toto" // } // }