boiii-scripts/shared/objpoints_shared.gsc
2023-04-13 17:30:38 +02:00

174 lines
8.9 KiB
Plaintext

#using scripts\codescripts\struct;
#using scripts\shared\callbacks_shared;
#using scripts\shared\system_shared;
#precache( "material", "objpoint_default" );
#namespace objpoints;
function autoexec __init__sytem__() { system::register("objpoints",&__init__,undefined,undefined); }
function __init__()
{
level.objPointNames = [];
level.objPoints = [];
if ( ( isdefined( level.splitscreen ) && level.splitscreen ) )
{
level.objPointSize = 15;
}
else
{
level.objPointSize = 8;
}
level.objpoint_alpha_default = 1.0;
level.objPointScale = 1.0;
}
function create( name, origin, team, shader, alpha, scale )
{
assert( isdefined( level.teams[team] ) || team == "all" );
objPoint = get_by_name( name );
if ( isdefined( objPoint ) )
objpoints::delete( objPoint );
if ( !isdefined( shader ) )
shader = "objpoint_default";
if ( !isdefined( scale ) )
scale = 1.0;
if ( team != "all" )
objPoint = newTeamHudElem( team );
else
objPoint = newHudElem();
objPoint.name = name;
objPoint.x = origin[0];
objPoint.y = origin[1];
objPoint.z = origin[2];
objPoint.team = team;
objPoint.isFlashing = false;
objPoint.isShown = true;
objPoint.fadeWhenTargeted = true;
objPoint.archived = false;
objPoint setShader( shader, level.objPointSize, level.objPointSize );
objPoint setWaypoint( true );
if ( isdefined( alpha ) )
objPoint.alpha = alpha;
else
objPoint.alpha = level.objpoint_alpha_default;
objPoint.baseAlpha = objPoint.alpha;
objPoint.index = level.objPointNames.size;
level.objPoints[name] = objPoint;
level.objPointNames[level.objPointNames.size] = name;
return objPoint;
}
function delete( oldObjPoint )
{
assert( level.objPoints.size == level.objPointNames.size );
if ( level.objPoints.size == 1 )
{
assert( level.objPointNames[0] == oldObjPoint.name );
assert( isdefined( level.objPoints[oldObjPoint.name] ) );
level.objPoints = [];
level.objPointNames = [];
oldObjPoint destroy();
return;
}
newIndex = oldObjPoint.index;
oldIndex = (level.objPointNames.size - 1);
objPoint = get_by_index( oldIndex );
level.objPointNames[newIndex] = objPoint.name;
objPoint.index = newIndex;
level.objPointNames[oldIndex] = undefined;
level.objPoints[oldObjPoint.name] = undefined;
oldObjPoint destroy();
}
function update_origin( origin )
{
if ( self.x != origin[0] )
self.x = origin[0];
if ( self.y != origin[1] )
self.y = origin[1];
if ( self.z != origin[2] )
self.z = origin[2];
}
function set_origin_by_name( name, origin )
{
objPoint = get_by_name( name );
objPoint update_origin( origin );
}
function get_by_name( name )
{
if ( isdefined( level.objPoints[name] ) )
return level.objPoints[name];
else
return undefined;
}
function get_by_index( index )
{
if ( isdefined( level.objPointNames[index] ) )
return level.objPoints[level.objPointNames[index]];
else
return undefined;
}
function start_flashing()
{
self endon("stop_flashing_thread");
if ( self.isFlashing )
return;
self.isFlashing = true;
while ( self.isFlashing )
{
self fadeOverTime( 0.75 );
self.alpha = 0.35 * self.baseAlpha;
wait ( 0.75 );
self fadeOverTime( 0.75 );
self.alpha = self.baseAlpha;
wait ( 0.75 );
}
self.alpha = self.baseAlpha;
}
function stop_flashing()
{
if ( !self.isFlashing )
return;
self.isFlashing = false;
}