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

From Mod Wiki


object generic_target_marker : target_marker {
    void    preinit();
    void    destroy();

    void    Init( entity _owner, string entityDef, string cmMaterial, float cmIconSort );    
    void    SetTarget( object traceObject, entity targetEntity, float targetLocked );
    void    SetTargetPosition( vector position );
    void    Clear();
    void    SetLocalOnly( boolean _localOnly );

    entity    owner;

    float    commandMapMaterial;
    float    commandMapIconSort;

    float    commandMapIcon;

    entity    marker;

    float    localOnly;
}

void generic_target_marker::preinit() {
    commandMapIcon = -1;
    commandMapMaterial = -1;
}

void generic_target_marker::destroy() {
    Clear();
}

void generic_target_marker::Init( entity _owner, string entityDef, string cmMaterial, float cmIconSort ) {
    owner = _owner;

    if ( localOnly && owner.vGetDeployableOwner() != sys.getLocalPlayer() ) {
        return;
    }

    marker = sys.spawnClient( entityDef );
    marker.playCycle( ANIMCHANNEL_ALL, "locking" );

    commandMapMaterial = GetMaterial( cmMaterial );
    commandMapIconSort = cmIconSort;
}

void generic_target_marker::SetTargetPosition( vector position ) {
    marker.setOrigin( position );

    if ( commandMapIcon != -1 ) {
        sys.freeCMIcon( owner, commandMapIcon );
        commandMapIcon = -1;
    }

    commandMapIcon = sys.allocCMIcon( owner, commandMapIconSort );
    sys.setCMIconMaterial( commandMapIcon, commandMapMaterial );
    sys.setCMIconSize( commandMapIcon, 32.f );
    sys.setCMIconFlag( commandMapIcon, CMF_TEAMONLY );
    sys.setCMIconOrigin( commandMapIcon, position );
    sys.setCMIconPositionMode( commandMapIcon, PM_FIXED );
}

void generic_target_marker::SetTarget( object traceObject, entity targetEntity, float targetLocked ) {
    if ( localOnly && owner.vGetDeployableOwner() != sys.getLocalPlayer() ) {
        return;
    }

    SetTargetPosition( traceObject.getTraceEndPos() );
}

void generic_target_marker::Clear() {
    if ( localOnly && owner.vGetDeployableOwner() != sys.getLocalPlayer() ) {
        return;
    }

    marker.remove();
    marker = $null_entity;

    if ( commandMapIcon != -1 ) {
        sys.freeCMIcon( owner, commandMapIcon );
        commandMapIcon = -1;
    }
}

void generic_target_marker::SetLocalOnly( boolean _localOnly ) {
    localOnly = _localOnly;
}