174 lines
8.9 KiB
Plaintext
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;
|
|
}
|