{ "name" : "Launcher", "attributes": [ { "name": "Enabled", "type": "Boolean", "connection": "Input", "editable": false }, { "name": "Launch Speed", "type": "Number", "connection": "None", "editable": true, "value": 30 }, { "name": "Asset", "type": "Asset", "connection": "None", "editable": true }, { "name": "Done", "type": "Boolean", "connection": "Output", "editable": true } ], "script": "//by Smart Penguins https://www.youtube.com/channel/UCHDFEsDQ8dKjEBEVCbAPZZw/ let asset; let ray; let state = 0; let startShot=false; let newEnt; let ent; let enabled=false; let launchSpeed; function init(){ asset = this.attribute('Asset'); launchSpeed = this.attribute('Launch Speed'); this.enableTouch(); ent = this.entity(); component.touchBegan = function (pt) { launch(pt,this.scene()); } component.touchMove = function (pt) {} component.touchEnded = function (pt) {} } function update(dt){ if(state==2){ newEnt.physics().setLinearVelocity( ray.direction.x*launchSpeed, ray.direction.y*launchSpeed, ray.direction.z*launchSpeed); state=0; this.emitSignal('Done', true); } } function signal(name, value){ enabled=value; } function launch(pt,scene){ if(!enabled||state>0||asset == null) return; state=1; ray = ent.camera().screenRay(pt); newEnt = scene.create(asset); let pos = ent.worldPosition(); newEnt.setPosition(pos.x, pos.y, pos.z); state=2; } " }