const PhSim = require(".."); /** * * Clone object * * @function * @param {PhSim.DynObject} dynObject * @param {Object} options - The options used for creating a spawned object * @param {Vector} options.velocity - The velocity to add to an object when it got spawned. * @param */ PhSim.prototype.cloneObject = function(dynObject,options = {}) { var obj = new PhSim.DynObject(dynObject.static); /** * Property telling if object is cloned. * * @type {Boolean|undefined} * @memberof PhSim.DynObject */ obj.cloned = true; /** * */ obj.cloneParent = dynObject; PhSim.Motion.setVelocity(obj,options.velocity); this.addToOverlayer(obj); var eventObj = new PhSim.Events.PhSimEvent("clone"); eventObj.target = dynObject; eventObj.clonedObj = obj; this.callEventClass("clone",this,eventObj); } /** * * The `clone` widget is a widget that makes copies of an object and inserts them into * the simulation. * * @function * @param {PhSim.DynObject} dyn_object * @param {WFunctionOptions} widget - Options. */ PhSim.Widgets.clone = function(dyn_object,widget) { var self = this; var getFunction; var o = { velocity: widget.vector } // Clone By Time if(widget.trigger === "time") { getFunction = function() { var time = widget.time; var maxN = widget.maxN; var func = null; if(Number.isInteger(maxN)) { func = function() { if(func.__n === maxN) { clearInterval(func.__interN); } else { if(!self.paused) { self.cloneObject(dyn_object,o); func.__n++; } } } func.__n = 0; } else { func = function() { if(!self.paused) { self.cloneObject(dyn_object,o); } } } func.__phtime = time; func.__interN = null; return func; } var refFunc = getFunction(); refFunc.__interN = setInterval(refFunc,refFunc.__phtime); } // Clone By Key if(widget.trigger === "key") { getFunction = function() { var kc = widget.key; var cloneByKeyFunc = function(e) { if(e.key === kc) { self.cloneObject(dyn_object,o); } } return cloneByKeyFunc; } this.on("keydown",getFunction()); } }