Jump to content

[Solved] prevRotationYaw doesnt seem to return the entities previous rotation


Thornack

Recommended Posts

[1.7.10]

I have a vehicle and I wish to animate the steering wheel of it. However for my animation I need to determine the previous rotation and the current rotation angle that is given for the entity. I tried using prevRotationYaw and rotationYaw but both  seem to get the entities current rotation. Does anyone know why?

 

inside my model file

public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity)
{
	super.setRotationAngles(f, f1, f2, f3, f4, f5, entity);

	if (entity!= null && (entity instanceof EntityVehicle)){

		float steeringAngle = getVehicleRotationAngle((EntityVehicle)entity);

		steeringWheel.rotateAngleY = steeringAngle;

	} 
}

protected float getVehicleRotationAngle(EntityVehicle entity) 
{ 

	double entitiesCurrentRotationInRadians = ((Math.PI/180) * entity.rotationYaw);
	double entitiesPreviousRotationInRadians =  ((Math.PI/180) *entity.prevRotationYaw);


                if (entitiesPreviousRotationInRadians != entitiesCurrentRotationInRadianss){
	System.out.println(entitiesPreviousRotationInRadians + " they are different"); <- never gets printed
	}
                if (entitiesPreviousRotationInRadians == entitiesCurrentRotationInRadianss){
	System.out.println(entitiesPreviousRotationInRadians + " they are the same"); <- always gets printed
	}


	//I need to know the last angle before the current one
    entity.animationAngle = (float) entitiesCurrentRotationInRadians;
	return entity.animationAngle; //animationAngle is a public float that is initialized to equal 0 inside EntityVehicle class

}

Link to comment
Share on other sites

note* I checked inside my EntityVehicle class and inside the moveEntityWithHeading method I set the prevRotationYaw to the riddenByEntity's prev rotation yaw in the following way

public void moveEntityWithHeading(float moveStrafing, float moveForward) {
	if (this.riddenByEntity != null) {
		this.rotationYaw = this.riddenByEntity.rotationYaw;
		this.prevRotationYaw = this.riddenByEntity.prevRotationYaw;
... other vehicle stuff since this is a long method i cut it out of the post
}

Link to comment
Share on other sites

The reason why I need the previous rotation (the entities rotation in the previous tick) and the current rotation (the rotation in the current tick) is so I can do something like


if (previousVehicleRotation != currentVehicleRotation &&  currentVehicleRotation < previousVehicleRotation ){ //the vehicle should be rotating counterclockwise if these conditions are met
 entity.animationAngle = 90-((float) currentVehicleRotation /180) *90;
         System.out.println(previousVehicleRotation + "they are different");
 previousVehicleRotation = currentVehicleRotation;
						}

 

and so on. I need this so that i can animate my steering wheel

Link to comment
Share on other sites

Im not sure if the above approach is going to work. Essentially I need a way to determine whether the player is turning counterclockwise or clockwise so that I can animate my steering accordingly. Would this require saving the initial rotation as NBT data

 

[Edit] you do not need NBT data or anything like that instead do the logic in the Entity class and use the onUpdate method and create your own verson of prevRotationYaw

Link to comment
Share on other sites

I figured it out I had to move my logic to the entity class and not use minecraft's prevRotationYaw variable. I noticed that no matter what you do prevRotationYaw = rotationYaw for all entities (at least from what i could tell) still have no idea why but oh well. To solve my problem I created my own version of prevRotationYaw and did the logic for my steering. My steering works perfectly now. There are some weird quirks I discovered though. I animated by calculating a difference between the current and previous rotation yaw angle. This was then used to determine clockwise or counterclockwise direction and based off of that I rotate the steering conditionally up to a max/min angle and this is independent of the entities rotation (the entities rotation is simply just used to determine whether you are turning clockwise or counter clockwise or stopped turning). however this logic had to be moved to the entity class and called in the onUpdate function to work properly. Not sure why it wouldnt work when in the model file, it did some weird stuff that I didnt understand and I only stumbled on the solution by randomly deciding to check whether updating was the issue and this check involved moving the code to the entity class and using the onUpdate method.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.