Script:Files:script/vehicles/desecrator.script

From Mod Wiki
object vehicle_desecrator : vehicle_base {
    void            preinit();
    void            init();

    void            OnCollision( object traceObject, float velocity, vector mins, vector maxs );
    void            OnPlayerEntered( entity p, float position );
    void            OnPlayerExited( entity p, float position );

    void            OnWeaponSelected( entity p, float index );

    void            UpdateSiegeTextThread();

    float            threadId;
}

void vehicle_desecrator::preinit() {
    float declTableIndex;
    threadId = -1;
}

void vehicle_desecrator::init() {
    setLightsEnabled( 0, false );
}

void vehicle_desecrator::OnCollision( object traceObject, float velocity, vector mins, vector maxs ) {
    OnCollision_Base( traceObject, velocity, mins, maxs );
}

void vehicle_desecrator::OnWeaponSelected( entity p, float index ) {
    if ( index == 0 ) {
        FireDecoy( p );
    } else if ( index == 1 ) {
        selectVehicleWeapon( p, "hyperblaster" );
    } else if ( index == 2 ) {
        selectVehicleWeapon( p, "plasmacannon" );
    }
}

void vehicle_desecrator::vOnDeploy() {
    vector origin = getWorldOrigin();
    setWorldOrigin( origin + '0 0 32' );
    setLinearVelocity( vec3_origin );
}

void vehicle_desecrator::OnPlayerEntered( entity p, float position ) {
    OnPlayerEntered_Base( p, position );

    if ( p.isLocalPlayer() ) {
        if ( position == 0 ) {
            threadId = thread UpdateSiegeTextThread();
        } else if ( threadId != -1 ) {
            sys.terminate( threadId );
            threadId = -1;
            sys.setGUIHandle( GUI_GLOBALS_HANDLE, "vehicles.siegeMode", -1 );
        }
    }
}

void vehicle_desecrator::OnPlayerExited( entity p, float position ) {
    OnPlayerExited_Base( p, position );

    if ( p.isLocalPlayer() && position == 0 ) {
        if ( threadId != -1 ) {
            sys.terminate( threadId );
            threadId = -1;
            sys.setGUIHandle( GUI_GLOBALS_HANDLE, "vehicles.siegeMode", -1 );
        }
    }
}

void vehicle_desecrator::UpdateSiegeTextThread() {
    handle hText;
    while ( true ) {
        if ( inSiegeMode() ) {
            hText = sys.localizeString( "guis/hud/vehicle_siegemode" );
        } else {
            hText = sys.localizeString( "guis/hud/vehicle_hovermode" );
        }
        sys.setGUIHandle( GUI_GLOBALS_HANDLE, "vehicles.siegeMode", hText );
        sys.wait( 1.0f );
    }
    threadId = -1;
}