Script:Files:script/vehicles/icarus.script

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

    void            OnUpdateHud( entity p, float guiHandle );

    void            OnWeaponSelected( entity p, float index );

    boolean            vRepairDroneIgnoreHidden() { return true; }

    boolean            vDisablePlantCharge() { return true; }

    void            vSetManualDeploy();
    void            vOnDeploy();
    void            DoBoundsDamageThread();

    void            vSetDeployableOwner( entity p );
    void            vRemoveObject();

    boolean            manualDeploy;
};

void vehicle_icarus::preinit() {
    manualDeploy = false;
}

void vehicle_icarus::init() {
    if ( !sys.isClient() ) {
        if ( manualDeploy ) {
            setTakesDamage( false );
            thread DoBoundsDamageThread();
        }
    }
}

void vehicle_icarus::OnUpdateHud( entity p, float guiHandle ) {
    entity driver = getDriver();
    if ( driver == $null_entity ) {
        return;
    }
    sys.setGUIFloat( GUI_GLOBALS_HANDLE, "vehicles.chargeValue", getChargeFraction() );
}

void vehicle_icarus::OnWeaponSelected( entity p, float index ) {
    if ( index == 0 ) {
        FireDecoy( p );
    } else if ( index == 1 ) {
        selectVehicleWeapon( p, "stroybombs" );
    }
}

void vehicle_icarus::vOnDeploy() {
    vector origin = getWorldOrigin();
    setWorldOrigin( origin + '0 0 10' );
    setLinearVelocity( vec3_origin );
    sys.killThread( "DoBoundsDamageThread_" + getName() );
    setTakesDamage( true );
}

void vehicle_icarus::vSetManualDeploy() {
    manualDeploy = true;
}

void vehicle_icarus::DoBoundsDamageThread() {
    float dmgIndex = GetDamage( getKey( "dmg_falling" ) );

    while ( true ) {
        BoundsDamage( self, dmgIndex );
        sys.waitFrame();
    }
}

void vehicle_icarus::vSetDeployableOwner( entity p ) {
    if ( !sys.isClient() ) {
        if ( p != $null_entity ) {
            p.binAdd( self );
        }
    }
}

void vehicle_icarus::vRemoveObject() {
    if ( isEmpty() ) {
        thread DecayThread();
    }
}