My shaking tree code is truncating the tops

Hrm… this works for me when I paste it into 3DE. I had to change the <script> tags to point to code collections on code3dgames.com, but aside from that, I didn’t make any changes to the code from GitHub.

My guess is that you might be using a version of Three.js that’s not on code3dgames.com. Is that possible?

Here’s the code that I just tried in 3DE:

<body></body>
<script src="/three.min.js"></script>
<script src="/controls/OrbitControls.js"></script>
<script src="/tween.js"></script>
<script src="/scoreboard.js"></script>
<script src="/sounds.js"></script>  
<script>
  // The "scene" is where stuff in our game will happen:
  var scene = new THREE.Scene();
  var flat = {flatShading: true};
  var light = new THREE.AmbientLight('white', 0.8);
  scene.add(light);

  // The "camera" is what sees the stuff:
  var aspectRatio = window.innerWidth / window.innerHeight;
  var camera = new THREE.PerspectiveCamera(75, aspectRatio, 1, 10000);
  camera.position.z = 500;
  //scene.add(camera);

  // The "renderer" draws what the camera sees onto the screen:
  var renderer = new THREE.WebGLRenderer({antialias: true});
  renderer.setSize(window.innerWidth, window.innerHeight);
  document.body.appendChild(renderer.domElement);

  // ---------------------------------------------------------------------------------    
  // ******** START CODING ON THE NEXT LINE ********
  // ---------------------------------------------------------------------------------

var marker = new THREE.Object3D();
scene.add(marker);

var body = new THREE.SphereGeometry(100);
var cover = new THREE.MeshNormalMaterial();
var avatar = new THREE.Mesh(body, cover);
marker.add(avatar);

var hand = new THREE.SphereGeometry(50);

var rightHand = new THREE.Mesh(hand, cover);
rightHand.position.set(-150, 0, 0);
avatar.add(rightHand);

var leftHand = new THREE.Mesh(hand, cover);
leftHand.position.set(150, 0, 0);
avatar.add(leftHand);

var foot = new THREE.SphereGeometry(50);
var rightFoot = new THREE.Mesh(foot, cover);
rightFoot.position.set(75, -125, 0);
avatar.add(rightFoot);

var leftFoot = new THREE.Mesh(foot, cover);
leftFoot.position.set(-75, -125, 0);
avatar.add(leftFoot);

marker.add(camera);

var notAllowed = [];
var treeTops = [];

function makeTreeAt(x, z){
  var trunk = new THREE.Mesh( new THREE.CylinderGeometry(50, 50, 200), new THREE.MeshBasicMaterial({color: 'sienna'}) );

  var top = new THREE.Mesh( new THREE.SphereGeometry(150), new THREE.MeshBasicMaterial({color: 'forestgreen'}) );

  top.position.y = 175;
  trunk.add(top);
  
  var boundary = new THREE.Mesh(
    new THREE.CircleGeometry(300),
    new THREE.MeshNormalMaterial()
  );
    
 boundary.position.y = -100;
 boundary.rotation.x = -Math.PI/2;
 trunk.add(boundary);
    
 notAllowed.push(boundary);
 treeTops.push(top);

  trunk.position.set(x, -75, z);
  scene.add(trunk);
}

makeTreeAt( 500, 0 );
makeTreeAt( -500, 0 );
makeTreeAt( 750, -1000 );
makeTreeAt( -750, -1000 );

var treasureTreeNumber;

function updateTreasureTreeNumber(){
  var rand = Math.random() * treeTops.length;
  treasureTreeNumber = Math.floor(rand);
}

function shakeTreasureTree(){
  updateTreasureTreeNumber();

  var tween = new TWEEN.Tween({shake: 0});
  tween.to({shake: 20 * 2 * Math.PI}, 8 * 1000);
  tween.onUpdate(shakeTreeUpdate);
  tween.onComplete(shakeTreeComplete);
  tween.start();
}

 function shakeTreeUpdate(update){
   var top = treeTops[treasureTreeNumber];
   top.position.x = 50 * Math.sin(update.shake);
 }

 function shakeTreeComplete() {
   var top = treeTops[treasureTreeNumber];
   top.position.x = 0;
   setTimeout(shakeTreasureTree, 2 * 1000);
 }

 shakeTreasureTree();

var scoreboard = new Scoreboard();
scoreboard.countdown(45);
scoreboard.score();
scoreboard.help(
    ' Arrow keys to move. ' +
    ' Space bar to jump for fruit. ' +
    ' Watch for shaking trees with fruit. ' + 
    ' Get near the tree and jump before the fruit is gone! '
);

scoreboard.onTimeExpired(timeExpired);
function timeExpired(){
    scoreboard.message("Game Over!");
}


// Now, animate what the camera sees on the screen:
var clock = new THREE.Clock();
var isCartwheeling = false;
var isFlipping = false;
var isMovingRight = false;
var isMovingLeft = false;
var isMovingForward = false;
var isMovingBack = false;
var direction;
var lastDirection;

function animate(){
  requestAnimationFrame(animate);
  TWEEN.update();
  turn();
  walk();
  acrobatics();
  renderer.render(scene, camera);
}

animate();

function turn(){
	if (isMovingRight) direction = Math.PI/2;
	if (isMovingLeft) direction = -Math.PI/2;
	if (isMovingForward) direction = Math.PI;
	if (isMovingBack) direction = 0;
	if (!isWalking()) direction = 0;
	
	if (direction == lastDirection) return;
	lastDirection = direction;
	
	var tween = new TWEEN.Tween(avatar.rotation);
	tween.to({y: direction}, 750);
	tween.start();
}

function walk(){
	if (!isWalking()) return;
	
	var speed = 10;
	var size = 100;
	var time = clock.getElapsedTime();
	var position = Math.sin(speed * time) * size;
	rightHand.position.z = position;
	leftHand.position.z = -position;
	rightFoot.position.z = -position;
	leftFoot.position.z = position;
}

function isWalking(){
	if (isMovingRight) return true;
	if (isMovingLeft) return true;
	if (isMovingForward) return true;
	if (isMovingBack) return true;
	return false;
}

function acrobatics(){
	if (isCartwheeling){
		avatar.rotation.z = avatar.rotation.z + 0.05;
	}
	if (isFlipping){
		avatar.rotation.x = avatar.rotation.x + 0.05;
	}
}

function jump(){
  if (avatar.position.y > 0) return;
  checkForTreasure();
  animateJump();
}

function checkForTreasure(){
  var top = treeTops[treasureTreeNumber];

}
    

function isColliding(){
    var vector = new THREE.Vector3(0, -1, 0);
    var raycaster = new THREE.Raycaster(marker.position, vector);
    
    var intersects = raycaster.intersectObjects(notAllowed);
    if (intersects.length > 0) return true;
    
    return false;
}
    

document.addEventListener('keydown', sendKeyDown);

function sendKeyDown(event) {
  
  //alert(event.code);
  var code = event.code;

  if (code == 'Space') jump();


  if(code == 'ArrowLeft'){
	marker.position.x = marker.position.x - 5;
  	isMovingLeft = true;
  }
  if(code == 'ArrowRight'){
	marker.position.x = marker.position.x + 5;
  	isMovingRight = true;
  }
  if(code == 'ArrowUp'){
	marker.position.z = marker.position.z - 5;
  	isMovingForward = true;
  }
  if(code == 'ArrowDown'){
	  marker.position.z = marker.position.z + 5;
	  isMovingBack = true;
  }
  if(code == 'KeyC') isCartwheeling = !isCartwheeling;
  if(code == 'KeyF') isFlipping = !isFlipping;
    
  if (isColliding()){
      if (isMovingLeft) marker.position.x = marker.position.x + 5;
      if (isMovingRight) marker.position.x = marker.position.x - 5;
      if (isMovingForward) marker.position.z = marker.position.z + 5;
      if (isMovingBack) marker.position.z = marker.position.z - 5;
  }
}

document.addEventListener('keyup', sendKeyUp);
function sendKeyUp(event){
	var code = event.code;
	if(code == 'ArrowLeft') isMovingLeft = false;
	if(code == 'ArrowRight') isMovingRight = false;
	if(code == 'ArrowUp') isMovingForward = false;
	if(code == 'ArrowDown') isMovingBack = false;
}

document.addEventListener('keyup', stopFlipping);
function stopFlipping(event){
	var code = event.code;
	if(code == 'KeyF'){isFlipping = false;}
}

document.addEventListener('keyup', stopCartwheeling);
function stopCartwheeling(event){
	var code = event.code;
	if(code == 'KeyC'){isCartwheeling = false;}
}

</script>

P.S. To get the code in here, I used the instructions from the intro post using three backticks. That should always work for getting code in here:

Explain how your code is misbehaving...

```
// Paste your code here
````

Include any more information that you like here...