Skip to content

Commit f3b4fe7

Browse files
PANSTER.DanielPANSTER.Daniel
PANSTER.Daniel
authored and
PANSTER.Daniel
committed
fix issue #1, reseting spheres positions
1 parent 88a1ddf commit f3b4fe7

File tree

1 file changed

+48
-31
lines changed

1 file changed

+48
-31
lines changed

src/app/css3d-threejs/src/main.ts

Lines changed: 48 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ export class MainCSS3d {
5959
private timestep: number = 1 / 60;
6060
private bPhysicsOn: boolean = false;
6161
private cannonBalls: Array<Cannon.Body> = [];
62+
private cannonBallsBodyPosOrigin: Array<Cannon.Vec3> = [];
6263

6364
/**
6465
* Creates an instance of MainCSS3d.
@@ -233,31 +234,32 @@ export class MainCSS3d {
233234
for (var i = 1; i < 8; i++) {
234235
for (var j = 1; j < 3; j++) {
235236
let factor = Math.random() * 30 + 5;
236-
console.log("factor: " + factor);
237+
//console.log("factor: " + factor);
237238

238239
let sign: number = (factor > 20) ? +1 : -1; // positive or negative
239-
var sphereShape = new Cannon.Sphere(factor);
240-
var sphereBody = new Cannon.Body({ mass: factor });
240+
let sphereShape = new Cannon.Sphere(factor);
241+
let sphereBody = new Cannon.Body({ mass: factor });
241242
sphereBody.addShape(sphereShape);
242-
sphereBody.position.set(j*50, 100 * i, 20 * i * j - 150);
243-
sphereBody.angularVelocity.set(0, factor / 100 * sign,0 );
243+
sphereBody.position.set(j * 50, 100 * i, 20 * i * j - 150);
244+
//cpyCanBallPosOrig.push(sphereBody.position);
245+
this.cannonBallsBodyPosOrigin.push(new Cannon.Vec3(sphereBody.position.x, sphereBody.position.y, sphereBody.position.z));
246+
247+
sphereBody.angularVelocity.set(0, factor / 100 * sign, 0);
244248
sphereBody.quaternion.set(0.2, 0.5, 0, 1);
245249
this.cannonBalls.push(sphereBody);
246250
this.cannonWorld.addBody(sphereBody);
247251

248252
// visual
249253
var geom = new THREE.SphereGeometry(factor, 32, 32);
250254
var mesh = new THREE.Mesh(geom, this.getMeshPhongMaterialFromTexture(Texture.GAS_GREEN));
251-
mesh.position.set(j*50 , 100 * i, 20 * i * j - 150);
255+
mesh.position.set(j * 50, 100 * i, 20 * i * j - 150);
252256
mesh.castShadow = true;
253257
mesh.receiveShadow = true;
254258
this.sceneBalls.push(mesh);
255259
this.scene.add(mesh);
256260

257261
}
258262
}
259-
260-
261263
}
262264

263265
private addHelpers() {
@@ -427,34 +429,49 @@ export class MainCSS3d {
427429
case "elem_5": //reset physic objects
428430
// everytime do the same sequential steps
429431
document.getElementById(this.id).className = "elementClick";
430-
432+
431433
component.cannonWorld.gravity.set(0, 0, 0); // gravity off
432434

433435
document.getElementById("elem_1").className = "element";
434436
component.bPhysicsOn = false;
435437

436-
// tween objects upwards
437-
component.tweenPhysicObjects = new TWEEN.Tween({ yPos: 0 })
438-
.to({yPos: 250}, 2000)
439-
.onUpdate(function () {
440-
for (let i = 0; i < component.cannonBalls.length; i++) {
441-
component.sceneBalls[i].position.y = component.cannonBalls[i].position.y = this.yPos;
442-
}
438+
// tween sphere objects to origin
439+
for (let i = 0; i < component.cannonBalls.length; i++) {
440+
//console.log("i: " + i + ", component.cannonBallsBodyPosOrigin[i]: " + component.cannonBallsBodyPosOrigin[i]);
441+
442+
// stop translation velocity
443+
//component.cannonBalls[i].quaternion.set(0,0,0,0);
444+
component.cannonBalls[i].velocity.set(0,0,0);
445+
component.cannonBalls[i].initVelocity.set(0,0,0);
446+
447+
// set tween
448+
component.tweenPhysicObjects = new TWEEN.Tween({
449+
xPos: component.cannonBalls[i].position.x,
450+
yPos: component.cannonBalls[i].position.y,
451+
zPos: component.cannonBalls[i].position.z
452+
})
453+
.to({
454+
xPos: component.cannonBallsBodyPosOrigin[i].x,
455+
yPos: component.cannonBallsBodyPosOrigin[i].y,
456+
zPos: component.cannonBallsBodyPosOrigin[i].z
457+
}, 2000)
458+
.onUpdate(function () {
459+
//console.log("this.yPos: " + this.yPos + ", component.cannonBalls[i].position.y: " + component.cannonBalls[i].position.y);
460+
component.cannonBalls[i].position = new Cannon.Vec3(this.xPos, this.yPos, this.zPos) ;
461+
})
462+
.start();
463+
}
464+
// tween CSS 3d element
465+
let targetPosZ = (component.sceneCSS.getObjectByName("elem_5").position.z === 0) ? 150 : 0;
466+
component.tweenPhysicCSSElem = new TWEEN.Tween({ zPos: component.sceneCSS.getObjectByName("elem_5").position.z })
467+
.to({ zPos: targetPosZ }, 1000)
468+
.onUpdate(function () {
469+
component.sceneCSS.getObjectByName("elem_5").position.z = this.zPos;
443470
})
444-
.onComplete(function(){
471+
.onComplete(function () {
445472
document.getElementById("elem_5").className = "element";
446473
})
447474
.start();
448-
449-
// tween CSS 3d element
450-
let targetPosZ = (component.sceneCSS.getObjectByName("elem_5").position.z === 0)? 150 : 0;
451-
component.tweenPhysicCSSElem = new TWEEN.Tween({ zPos: component.sceneCSS.getObjectByName("elem_5").position.z })
452-
.to({zPos: targetPosZ}, 1000)
453-
.onUpdate(function () {
454-
component.sceneCSS.getObjectByName("elem_5").position.z = this.zPos;
455-
})
456-
.start();
457-
458475
break;
459476
default:
460477
console.log(this.id + " not configured");
@@ -476,14 +493,14 @@ export class MainCSS3d {
476493

477494
var details = document.createElement('div');
478495
details.className = 'details';
479-
details.innerHTML = (i==5)? liTxt[i - 1] : "Toggle<br>" + liTxt[i - 1];
496+
details.innerHTML = (i == 5) ? liTxt[i - 1] : "Toggle<br>" + liTxt[i - 1];
480497
element.appendChild(details);
481498

482-
let object:CSS3DRenderer.CSS3DObject = new CSS3DRenderer.CSS3DObject(element);
499+
let object: CSS3DRenderer.CSS3DObject = new CSS3DRenderer.CSS3DObject(element);
483500
object.position.x = menuPosX + (-100 * i);
484501
object.position.y = 200;
485-
object.name = "elem_"+i;
486-
// object.userData = {id: "elem_"+i};
502+
object.name = "elem_" + i;
503+
// object.userData = {id: "elem_"+i};
487504
this.sceneCSS.add(object);
488505
}
489506

0 commit comments

Comments
 (0)