Script:Files:script/misc/mcp marker.script

From Mod Wiki
// Projects an overlay onto the ground where the mcp is to be deployed, and will auto deploy the mcp when it gets in range

object mcp_marker {
    void        preinit();
    void        init();
    void        destroy();

    void        vOnShowOverlay( entity p );
    void        vOnHideOverlay( entity p, entity v );

    void        ShowOverlay();
    void        HideOverlay();

    vector        deploySize;
    float        deployDecal;

    entity        lastDriver;
}

void mcp_marker::preinit() {    
    object team = sys.getTeam( getKey( "team" ) );
    if ( team == $null_entity ) {
        sys.warning( "mcp_marker::preinit no team specified on " + getName() );
    } else {
        setGameTeam( team );
    }

    vector defaultSize = '512 512 512';

    deployDecal = -1;
    deploySize    = getVectorKeyWithDefault( "decal_size", defaultSize );
}

void mcp_marker::init() {
}

void mcp_marker::destroy() {
    HideOverlay();
}

void mcp_marker::vOnShowOverlay( entity p ) {    
    if ( p == sys.getLocalPlayer() ) {
        ShowOverlay();
    }
}

void mcp_marker::vOnHideOverlay( entity p, entity v ) {
    vehicle_mcp mcp = v;

    if ( p == sys.getLocalPlayer() ) {
        HideOverlay();
    }

    if ( !sys.isClient() ) {
        entity driver = mcp.getDriver();
        if ( driver == $null_entity ) {
            if ( mcp.CanDeploy( $null_entity, false ) ) {
                mcp.Deploy( mcp.lastDriver );
            }
        }
    }
}

void mcp_marker::ShowOverlay() {
    if ( deployDecal != -1 ) {
        return;
    }

    deployDecal = sys.allocDecal( getKey( "mtr_deploy" ) );

//	sys.debugLine( g_colorRed, getWorldOrigin(), getWorldOrigin() + ( vec3_down * 512 ), 1 );
//	sys.resetDecal( deployDecal );

    vector angles = getAngles();
    sys.projectDecal( deployDecal, getWorldOrigin(), vec3_down, 512, true, deploySize, -angles_y, g_colorWhite );
}

void mcp_marker::HideOverlay() {
    if ( deployDecal == -1 ) {
        return;
    }

    sys.freeDecal( deployDecal );
    deployDecal = -1;
}