if (data.entity === this.parentEntity) { console.log('AR Football 2 Entity Loaded'); } else { return; } /** * Code Components */ this.mouseMove = R3.EntityManager.Instance.findComponentById('dwxvtxzrun'); this.touchMove = R3.EntityManager.Instance.findComponentById('p49pad0i7l'); this.beforeRender = R3.EntityManager.Instance.findComponentById('7l8ar325qf'); /** * Meshes */ this.footballPlayer = R3.EntityManager.Instance.findComponentById('t537n02x0s'); this.football = R3.EntityManager.Instance.findComponentById('umgbzb0ur2'); /** * Geometry */ this.ballGeometry = R3.EntityManager.Instance.findComponentById('dt6jl8kocw'); /** * Materials */ this.materialWhite = R3.EntityManager.Instance.findComponentById('iualutcl1y'); this.materialBlack = R3.EntityManager.Instance.findComponentById('2g36po454g'); this.playerRotation = { x : 0, y : 0 }; this.kick = { start : null, distance : 0, time : 0, speed : 0, direction : 0 }; this.balls = []; this.activeBall = this.football.instance; R3.CustomCode.prototype.calcPosition = function(shotAngle, lookAngle, t) { }; R3.CustomCode.prototype.render = function(delta) { this.balls.map( function(ball) { ball.t += delta; var u = new THREE.Vector3( ball.speed * Math.sin(ball.directionAngle), ball.speed * Math.sin(ball.upAngle), ball.speed * Math.cos(ball.directionAngle) ); ball.mesh.position.x = ball.s0.x + u.x * ball.t; ball.mesh.position.y = ball.s0.y + u.y * ball.t + 0.5 * (-9.8) * ball.t * ball.t; ball.mesh.position.z = ball.s0.z + u.z * ball.t; if (ball.mesh.position.y <= 0) { ball.s0.x = ball.mesh.position.x; ball.s0.y = 0; ball.s0.z = ball.mesh.position.z; ball.upAngle *= ball.bounciness; ball.t = 0; } var v = new THREE.Vector3( -ball.v.z, 0, ball.v.x ); ball.mesh.rotateOnAxis(v.normalize(), -0.1); //object.ball.translateOnAxis(object.v, 1); //object.ball.position.y = object.ball.position.y + 0.5 * (-9.8) * object.t * object.t; }.bind(this) ) }; R3.CustomCode.prototype.move = function(data) { var x = data.x; var y = data.y; if (data.source === 'mouse' || 'touch') { x *= 0.01; y *= 0.01; } this.playerRotation.x += x; this.playerRotation.y += y; var kick = false; var canKick = false; if (this.playerRotation.y > Math.PI) { canKick = true; } /** * Clamp player rotation to values between 0 and Math.PI * 2 */ if (this.playerRotation.y > Math.PI * 2) { this.playerRotation.y -= Math.PI * 2; kick = true; canKick = false; } if (this.playerRotation.y < 0) { this.playerRotation.y += Math.PI * 2; canKick = true; } /** * Clamp direction angle between 0 and Math.PI * 2 */ if (this.playerRotation.x > Math.PI * 2) { this.playerRotation.x -= Math.PI * 2; } if (this.playerRotation.x < 0) { this.playerRotation.x += Math.PI * 2; } this.footballPlayer.instance.matrix = new THREE.Matrix4(); this.footballPlayer.instance.matrix.decompose( this.footballPlayer.instance.position, this.footballPlayer.instance.quaternion, this.footballPlayer.instance.scale ); this.footballPlayer.instance.translateY(0.78); this.footballPlayer.instance.rotateY(this.playerRotation.x); this.footballPlayer.instance.translateZ(0.2); this.footballPlayer.instance.rotateX(this.playerRotation.y); if (kick) { if (this.kick.start === null) { console.warn('no kick start time'); return; } this.kick.time = Date.now() - this.kick.start; this.kick.speed = this.kick.distance / this.kick.time * 40; this.kick.direction = this.playerRotation.x; if (this.kick.speed > 1) { this.kick.speed = 1; } console.log(this.kick.speed); var v = new THREE.Vector3(0, 0, -1); v.multiplyScalar(this.kick.speed); v.applyAxisAngle( new THREE.Vector3(0,1,0), this.kick.direction ); this.balls.push( { mesh : this.activeBall, speed : 6, mouseYTravelDistance : this.kick.distance, directionAngle : this.kick.direction + Math.PI, upAngle : Math.PI * this.kick.speed, v : v, t : 0, s0 : new THREE.Vector3(0,0,0), bounciness : 0.5 } ); this.activeBall = null; //console.log('kick', this.kick); } if (canKick && this.activeBall === null) { //console.log('can kick'); this.activeBall = new THREE.Mesh( this.ballGeometry.instance, [ this.materialWhite.instance, this.materialBlack.instance ] ); this.activeBall.scale.copy(this.football.instance.scale); //this.activeBall.scale.copy(this.football.instance.scale); this.football.parentScene.instance.add(this.activeBall); } if (y > 0 && canKick) { if (this.kick.start === null) { this.kick.start = Date.now(); } /** * Moving down, record the distance travelled */ this.kick.distance += Math.abs(y); //console.log(this.kick.distance); } if (y < 0) { /** * We are no longer moving down, also reset our Y distance counter * @type {boolean} */ this.kick = { start : null, distance : 0, time : 0, speed : 0, direction : 0 }; } }.bind(this) this.mouseMove.entityLoaded = this; this.touchMove.entityLoaded = this; this.beforeRender.entityLoaded = this; //@ sourceURL=entityLoaded.js