// 
// Decompiled by Procyon v0.6.0
// 

package com.hypixel.hytale.server.core.universe.world.connectedblocks;

import com.hypixel.hytale.math.vector.Vector3f;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.core.asset.type.blocktype.config.RotationTuple;
import com.hypixel.hytale.server.core.asset.type.blocktype.config.Rotation;

@Deprecated(forRemoval = true)
public class Rotation3D
{
    public Rotation rotationYaw;
    public Rotation rotationPitch;
    public Rotation rotationRoll;
    
    public Rotation3D(final Rotation rotationYaw, final Rotation rotationPitch, final Rotation rotationRoll) {
        this.rotationYaw = rotationYaw;
        this.rotationPitch = rotationPitch;
        this.rotationRoll = rotationRoll;
    }
    
    public void assign(final Rotation yaw, final Rotation pitch, final Rotation roll) {
        this.rotationYaw = yaw;
        this.rotationPitch = pitch;
        this.rotationRoll = roll;
    }
    
    public void assign(@Nonnull final RotationTuple rotation) {
        this.assign(rotation.yaw(), rotation.pitch(), rotation.roll());
    }
    
    public void add(@Nonnull final Rotation3D toAdd) {
        this.rotationYaw = this.rotationYaw.add(toAdd.rotationYaw);
        this.rotationPitch = this.rotationPitch.add(toAdd.rotationPitch);
        this.rotationRoll = this.rotationRoll.add(toAdd.rotationRoll);
    }
    
    public void subtract(@Nonnull final Rotation3D toSubtract) {
        this.rotationYaw = this.rotationYaw.subtract(toSubtract.rotationYaw);
        this.rotationPitch = this.rotationPitch.subtract(toSubtract.rotationPitch);
        this.rotationRoll = this.rotationRoll.subtract(toSubtract.rotationRoll);
    }
    
    public void negate() {
        this.assign(Rotation.None.subtract(this.rotationYaw), Rotation.None.subtract(this.rotationPitch), Rotation.None.subtract(this.rotationRoll));
    }
    
    @Nonnull
    public Rotation3D rotateSelfBy(@Nonnull final Rotation rotationYawToRotate, @Nonnull final Rotation rotationPitchToRotate, @Nonnull final Rotation rotationRollToRotate) {
        Vector3f vector3f = new Vector3f((float)this.rotationPitch.getDegrees(), (float)this.rotationYaw.getDegrees(), (float)this.rotationRoll.getDegrees());
        vector3f = Rotation.rotate(vector3f, rotationYawToRotate, rotationPitchToRotate, rotationRollToRotate);
        this.assign(Rotation.closestOfDegrees(vector3f.y), Rotation.closestOfDegrees(vector3f.x), Rotation.closestOfDegrees(vector3f.z));
        return this;
    }
    
    public void rotateSelfBy(@Nonnull final Rotation3D rotation) {
        this.rotateSelfBy(rotation.rotationYaw, rotation.rotationPitch, rotation.rotationRoll);
    }
}
