Script:Files:script/vehicles/cockpits/hog.script

From Mod Wiki
// LEGS = left arm
// HEAD = right arm

object vehicle_hog_cockpit : vehicle_strogg_cockpit {
    void                destroy();

    void                AnimThread();

    void                OnEntered();

    string                leftAnim;
    string                centerAnim;
    string                rightAnim;

    string                leverLeftAnim;
    string                leverCenterAnim;
    string                leverRightAnim;

    float                leftAnimFrames;
    float                rightAnimFrames;

    float                leverLeftAnimFrames;
    float                leverRightAnimFrames;
};

void vehicle_hog_cockpit::OnEntered() {    
    leftAnim                = "left";
    centerAnim                = "center";
    rightAnim                = "right";

    leverLeftAnim            = "reverse";
    leverCenterAnim            = "center";
    leverRightAnim            = "forward";

    leftAnimFrames            = getNumFrames( leftAnim ) - 2;
    rightAnimFrames            = getNumFrames( rightAnim ) - 2;

    leverLeftAnimFrames        = getNumFrames( leverLeftAnim ) - 2;
    leverRightAnimFrames    = getNumFrames( leverRightAnim ) - 2;

    thread AnimThread();

    OnEnteredStrogg_Base();
}

#define HOG_FIRING_FIRING    0
#define HOG_FIRING_STOPPED    1

void vehicle_hog_cockpit::AnimThread() {
    sys.threadName( "vehicle_hog_cockpit::AnimThread" );

    float wheelAngle = 0.f;
    float leverAngle = 0.f;

    float firingStatus = HOG_FIRING_STOPPED;

    while ( true ) {
        entity driver = myVehicle.getDriver();

        boolean fire;
        vector move;
        if ( driver != $null_entity ) {
            move = driver.getMove();
            fire = driver.getButton( PK_ATTACK );
        } else {
            move = '0 0 0';
            fire = false;
        }



        float oldWheelAngle = wheelAngle;

        if ( move_y < 0 ) {
            wheelAngle = wheelAngle - 1.f * sys.getFrameTime();
            if ( wheelAngle < -1.f ) {
                wheelAngle = -1.f;
            }
        } else if ( move_y > 0 ) {
            wheelAngle = wheelAngle + 1.f * sys.getFrameTime();
            if ( wheelAngle > 1.f ) {
                wheelAngle = 1.f;
            }
        } else {
            if ( wheelAngle > 0.f ) {
                wheelAngle = wheelAngle - 0.8 * sys.getFrameTime();
                if ( wheelAngle < 0.f ) {
                    wheelAngle = 0.f;
                }
            } else if ( wheelAngle < 0.f ) {
                wheelAngle = wheelAngle + 0.8 * sys.getFrameTime();
                if ( wheelAngle > 0.f ) {
                    wheelAngle = 0.f;
                }
            }
        }

        if ( oldWheelAngle != wheelAngle ) {
            if ( wheelAngle > 0.f ) {
                setAnimFrame( rightAnim, ANIMCHANNEL_LEGS, ( wheelAngle * rightAnimFrames ) );
            } else if ( wheelAngle < 0.f ) {
                setAnimFrame( leftAnim, ANIMCHANNEL_LEGS, ( wheelAngle * leftAnimFrames * -1 ) );
            } else {
                setAnimFrame( centerAnim, ANIMCHANNEL_LEGS, 0 );
            }
        }




        float oldLeverAngle = leverAngle;

        if ( move_x < 0 ) {
            leverAngle = leverAngle - 2.f * sys.getFrameTime();
            if ( leverAngle < -1.f ) {
                leverAngle = -1.f;
            }
        } else if ( move_x > 0 ) {
            leverAngle = leverAngle + 2.f * sys.getFrameTime();
            if ( leverAngle > 1.f ) {
                leverAngle = 1.f;
            }
        } else {
            if ( leverAngle > 0.f ) {
                leverAngle = leverAngle - 1.8 * sys.getFrameTime();
                if ( leverAngle < 0.f ) {
                    leverAngle = 0.f;
                }
            } else if ( leverAngle < 0.f ) {
                leverAngle = leverAngle + 1.8 * sys.getFrameTime();
                if ( leverAngle > 0.f ) {
                    leverAngle = 0.f;
                }
            }
        }

        if ( oldLeverAngle != leverAngle ) {
            if ( leverAngle > 0.f ) {
                setAnimFrame( leverRightAnim, ANIMCHANNEL_HEAD, ( leverAngle * leverRightAnimFrames ) );
            } else if ( leverAngle < 0.f ) {
                setAnimFrame( leverLeftAnim, ANIMCHANNEL_HEAD, ( leverAngle * leverLeftAnimFrames * -1 ) );
            } else {
                setAnimFrame( leverCenterAnim, ANIMCHANNEL_HEAD, 0 );
            }
        }

        if ( fire ) {
            if ( firingStatus != HOG_FIRING_FIRING ) {
                playAnimBlended( ANIMCHANNEL_TORSO, "center_fire", 0.2f );
                firingStatus = HOG_FIRING_FIRING;
            }
        } else {
            if ( firingStatus != HOG_FIRING_STOPPED ) {
                playAnimBlended( ANIMCHANNEL_TORSO, "center", 0.2f );
                firingStatus = HOG_FIRING_STOPPED;
            }
        }

        sys.waitFrame();
    }
}

void vehicle_hog_cockpit::destroy() {
    sys.killThread( "vehicle_hog_cockpit::AnimThread" );
}