0 votes

I'm new to godot and have to animations that I want to control independently (button [A]&[A1] rotates bone [A] and button [B]&[B1] rotates bone [B]) I'm making the rotations by manipulation the blend value in a AnimationTree blend root node but when I try to use a separate tree for bone A and B only one of them work I tried using a state machine with blend nodes but couldn't get it to work, any help would be great!

extends KinematicBody

var velocity = Vector3()
var accel
var new_pos
var tiltAnim

var player
var angle
var finPos = 0.5
var rudderPos = 0.5
var currentVelocity
var rotSpeed = 1
var tilt = 0



const SPEED = 6
const ACCELERATION=2
const DE_ACCELERATION = 4



func _ready():

    player = get_node(".")
    tiltAnim =get_node("AnimationPlayer/tilt")
func _physics_process(delta):
    var dir = Vector3()
    angle=player.get_global_transform().basis




    if(Input.is_action_pressed("tilt_up") && finPos>0):
        finPos-=0.01
    elif(Input.is_action_pressed("tilt_down") && finPos<1):

        finPos+=0.01
    elif(finPos!=0.5):
        if(finPos>0.5):
            finPos-=0.01
        else:
            finPos+=0.01
    if(Input.is_action_pressed("rotate_left") && rudderPos>0):
        rudderPos-=0.01
    elif(Input.is_action_pressed("rotate_right") && rudderPos<1):
        rudderPos+=0.01
    elif(rudderPos!=0.5):
        if(rudderPos>0.5):
            rudderPos-=0.01
        else:
            rudderPos+=0.01

    if(!Input.is_action_pressed("move_bck") or !Input.is_action_pressed("move_frwd")):


        if(Input.is_action_pressed("move_frwd")):
            dir+= angle.z
            #dirBool=true


        if(Input.is_action_pressed("move_bck")):
            dir-=angle.z
            #dirBool=false

        if(Input.is_action_pressed("move_up")):
            dir.y+=2
        if(Input.is_action_pressed("move_down")):
            dir.y-=2

    dir=dir.normalized()



    accel = DE_ACCELERATION
    new_pos=dir * SPEED
    if(dir.dot(velocity)>0):
        accel=ACCELERATION
    velocity=velocity.linear_interpolate(new_pos, accel * delta)

    var test=velocity*velocity
    currentVelocity = sqrt(test.x+test.y+test.z)
    velocity = move_and_slide(velocity, Vector3(0,0,0))

    var rotation= Vector3(0,0,0)
    rotation.y=-currentVelocity*(rudderPos-0.5)*rotSpeed*delta
    var buff=currentVelocity*(finPos-0.5)*rotSpeed*delta

    if(tilt+buff>-0.79 and tilt+buff<0.79):
        rotation.x=-buff
        tilt+=buff
        #print(tilt+buff)





    player.set_rotation(player.get_rotation()+rotation)


    $AnimationPlayer/tilt.set("parameters/tilt/blend_amount", finPos)
    $AnimationPlayer/turn.set("parameters/turn/blend_amount", rudderPos)
in Engine by (16 points)

Please log in or register to answer this question.

Welcome to Godot Engine Q&A, where you can ask questions and receive answers from other members of the community.

Please make sure to read How to use this Q&A? before posting your first questions.
Social login is currently unavailable. If you've previously logged in with a Facebook or GitHub account, use the I forgot my password link in the login box to set a password for your account. If you still can't access your account, send an email to webmaster@godotengine.org with your username.