559 lines
15 KiB
Plaintext
559 lines
15 KiB
Plaintext
#include maps\_utility;
|
|
|
|
/*
|
|
psource_editmode = ""; //toggles value, edit or view default to view.
|
|
psource_image = ""; //sets image
|
|
psource_select_next = ""; // selects next psourceposition;
|
|
psource_select_prev = ""; // selects prev psourceposition
|
|
psource_setview = ""; // sets the view of the currently selected position.
|
|
psource_help ""; //prints to console some help text
|
|
psource_dump ""; //dumps view list to the console to be cut and pasted into script somewhere
|
|
|
|
|
|
|
|
*/
|
|
|
|
init()
|
|
{
|
|
flag_init( "psource_Notviewing" );
|
|
flag_init( "psource_refresh" );
|
|
|
|
}
|
|
|
|
main()
|
|
{
|
|
/#
|
|
|
|
if ( !isdefined( level.flag ) || !isdefined( level.flag[ "psource_refresh" ] ) )
|
|
{
|
|
flag_init( "psource_refresh" );
|
|
flag_init( "psource_Notviewing" );
|
|
}
|
|
|
|
level.psource_selectrad = 12;
|
|
precacheshader( "case" );
|
|
precacheshader( "psourcecreate" );
|
|
precacheshader( "psourcemodify" );
|
|
|
|
|
|
setdvar( "psource_image", "" );
|
|
setdvar( "psource_delete", "" );
|
|
|
|
setdvar( "psource_editmode", "" );
|
|
setdvar( "psource_image", "" );
|
|
setdvar( "psource_select_next", "" );
|
|
setdvar( "psource_select_prev", "" );
|
|
setdvar( "psource_setview", "" );
|
|
setdvar( "psource_help", "" );
|
|
setdvar( "psource_dump", "" );
|
|
setdvar( "psource_select_new", "" );
|
|
setdvar( "psource_enable", "0" );
|
|
|
|
|
|
level.photosourcemodsize = 35;
|
|
level.photosourcemod = newhudelem();
|
|
level.photosourcemod.alignX = "center";
|
|
level.photosourcemod.alignY = "top";
|
|
level.photosourcemod.horzAlign = "center";
|
|
level.photosourcemod.vertAlign = "top";
|
|
level.photosourcemod.x = 0;
|
|
level.photosourcemod.y = 0;
|
|
level.photosourcemod.alpha = .5;
|
|
level.photosourcemod setshader( "psourcemodify", level.photosourcemodsize * 2, level.photosourcemodsize );
|
|
|
|
level.photosource = newhudelem();
|
|
level.photosource.alignX = "left";
|
|
level.photosource.alignY = "top";
|
|
level.photosource.horzAlign = "left";
|
|
level.photosource.vertAlign = "top";
|
|
level.photosource.x = 0;
|
|
level.photosource.y = 0;
|
|
level.photosource.alpha = 0;
|
|
level.photosource setshader( "case", 640, 480 );
|
|
|
|
level.psource_editmode = false;
|
|
|
|
|
|
if ( !isdefined( level.psource_views ) )
|
|
level.psource_views = [];
|
|
|
|
if ( !isdefined( level.psource_selectindex ) )
|
|
level.psource_selectindex = level.psource_views.size;
|
|
level.psource_viewindex = undefined;
|
|
thread psource_viewmode();
|
|
|
|
// this handles all of the dvar settings
|
|
while ( 1 )
|
|
{
|
|
psource_enable(); // pauses if not enabled.
|
|
psource_image_update();
|
|
psource_editmode_update();
|
|
psource_select_next();
|
|
psource_select_prev();
|
|
psource_select_new();
|
|
psource_setview();
|
|
psource_delete();
|
|
psource_dump();
|
|
psource_help();
|
|
wait .05;
|
|
}
|
|
#/
|
|
}
|
|
|
|
psource_enable()
|
|
{
|
|
if ( getdvar( "psource_enable" ) != "1" )
|
|
{
|
|
flag_set( "psource_refresh" ); // makes everything stop drawing.
|
|
level.photosourcemod.alpha = 0;
|
|
level.photosource.alpha = 0;
|
|
}
|
|
psource_waittill_enable();
|
|
level.photosourcemod.alpha = 1;
|
|
}
|
|
|
|
psource_waittill_enable()
|
|
{
|
|
while ( getdvar( "psource_enable" ) != "1" )
|
|
wait .1;
|
|
}
|
|
|
|
psource_viewmode()
|
|
{
|
|
wait .1;
|
|
|
|
while ( 1 )
|
|
{
|
|
psource_waittill_enable();
|
|
flag_set( "psource_Notviewing" );
|
|
flag_clear( "psource_refresh" );
|
|
for ( i = 0;i < level.psource_views.size;i++ )
|
|
level.psource_views[ i ] thread psource_viewwait( i );
|
|
thread psource_hud_preview();
|
|
thread psource_activatebutton();
|
|
thread psource_handleselectindex();
|
|
flag_wait( "psource_refresh" );
|
|
flag_wait( "psource_Notviewing" );
|
|
}
|
|
}
|
|
|
|
psource_activatebutton()
|
|
{
|
|
level endon( "psource_refresh" );
|
|
while ( 1 )
|
|
{
|
|
while ( !level.player usebuttonpressed() )
|
|
wait .05;
|
|
pick = psource_getvisible();
|
|
if ( isdefined( pick ) )
|
|
{
|
|
level.psource_selectindex = pick;
|
|
level.psource_views[ pick ] thread psource_hudshow();
|
|
|
|
}
|
|
while ( level.player usebuttonpressed() )
|
|
wait .05;
|
|
}
|
|
}
|
|
|
|
psource_handleselectindex()
|
|
{
|
|
level endon( "psource_refresh" );
|
|
lastselect = level.psource_selectindex;
|
|
while ( 1 )
|
|
{
|
|
if ( !isdefined( level.psource_views[ lastselect ] ) )
|
|
level.photosourcemod setshader( "psourcecreate", level.photosourcemodsize * 2, level.photosourcemodsize );
|
|
|
|
if ( lastselect == level.psource_selectindex )
|
|
{
|
|
wait .05;
|
|
continue;
|
|
}
|
|
lastselect = level.psource_selectindex;
|
|
if ( isdefined( level.psource_views[ lastselect ] ) )
|
|
level.psource_views[ lastselect ] thread psource_hudshow();
|
|
|
|
}
|
|
}
|
|
|
|
psource_hud_preview()
|
|
{
|
|
level endon( "psource_refresh" );
|
|
while ( 1 )
|
|
{
|
|
pick = psource_getvisible();
|
|
if ( !isdefined( pick ) )
|
|
{
|
|
level.photosource fadeovertime( 1 );
|
|
level.photosource.alpha = 0;
|
|
level.psource_viewindex = undefined;
|
|
wait .05;
|
|
continue;
|
|
}
|
|
level.psource_viewindex = pick;
|
|
view = level.psource_views[ pick ];
|
|
if ( isdefined( view.temp_image ) )
|
|
level.photosource setshader( view.temp_image, 200, 150 );
|
|
else
|
|
level.photosource setshader( view.image, 200, 150 );
|
|
level.photosource.alpha = 1;
|
|
while ( isdefined( psource_getvisible() ) && psource_getvisible() == pick )
|
|
wait .05;
|
|
flag_set( "psource_refresh" );
|
|
}
|
|
}
|
|
|
|
psource_getvisible()
|
|
{
|
|
index = undefined;
|
|
dist = 1000000;
|
|
for ( i = 0;i < level.psource_views.size;i++ )
|
|
{
|
|
if ( level.player islookingorg( level.psource_views[ i ] ) )
|
|
{
|
|
newdist = distance( level.player geteye(), level.psource_views[ i ].origin );
|
|
if ( newdist < dist )
|
|
{
|
|
dist = newdist;
|
|
index = i;
|
|
|
|
}
|
|
}
|
|
}
|
|
return index;
|
|
}
|
|
|
|
psource_viewwait( index )
|
|
{
|
|
level endon( "psource_refresh" );
|
|
arrowlength = 55;
|
|
viewradexpandmax = 8;
|
|
viewradexpandcount = 0;
|
|
viewraddir = 1;
|
|
frametime = .05;
|
|
while ( 1 )
|
|
{
|
|
if ( distance( flat_origin( self.origin ), flat_origin( level.player.origin ) ) < 32 )
|
|
{
|
|
wait .05;
|
|
continue;
|
|
}
|
|
thread draw_arrow_time( self.origin, self.origin + vector_multiply( anglestoforward( self.angles ), arrowlength ), ( 0, 1, 1 ), frametime );
|
|
|
|
if ( level.psource_selectindex == index )
|
|
thread plot_circle_star_fortime( level.psource_selectrad, frametime, ( 1, 1, 0 ) );
|
|
else
|
|
thread plot_circle_fortime( level.psource_selectrad, frametime, ( 0, 1, 0 ) );
|
|
if ( isdefined( level.psource_viewindex ) && level.psource_viewindex == index )
|
|
{
|
|
thread debug_message( "image: " + self.image, self.origin, frametime );
|
|
if ( viewradexpandcount > viewradexpandmax )
|
|
viewraddir = -1;
|
|
else if ( viewradexpandcount < 0 )
|
|
viewraddir = 1;
|
|
viewradexpandcount += viewraddir;
|
|
viewrad = level.psource_selectrad + 3 + viewradexpandcount;
|
|
viewcolor = ( 0, 1, 1 );
|
|
}
|
|
else
|
|
{
|
|
viewrad = level.psource_selectrad + 3;
|
|
viewcolor = ( 0, 1, 0 );
|
|
}
|
|
thread plot_circle_fortime( viewrad, frametime, viewcolor );
|
|
wait .05;
|
|
}
|
|
}
|
|
|
|
plot_circle_star_fortime( radius, time, color )
|
|
{
|
|
if ( !isdefined( color ) )
|
|
color = ( 0, 1, 0 );
|
|
hangtime = .05;
|
|
circleres = 16;
|
|
hemires = circleres / 2;
|
|
circleinc = 360 / circleres;
|
|
circleres++ ;
|
|
plotpoints = [];
|
|
rad = 0;
|
|
|
|
plotpoints = [];
|
|
rad = 0.000;
|
|
timer = gettime() + ( time * 1000 );
|
|
while ( gettime() < timer )
|
|
{
|
|
angletoplayer = vectortoangles( self.origin - level.player geteye() );
|
|
for ( i = 0;i < circleres;i++ )
|
|
{
|
|
plotpoints[ plotpoints.size ] = self.origin + vector_multiply( anglestoforward( ( angletoplayer + ( rad, 90, 0 ) ) ), radius );
|
|
rad += circleinc;
|
|
}
|
|
for ( i = 0;i < plotpoints.size;i++ )
|
|
line( plotpoints[ i ], self.origin, color, 1 );
|
|
plotpoints = [];
|
|
wait hangtime;
|
|
}
|
|
}
|
|
|
|
plot_circle_fortime( radius, time, color )
|
|
{
|
|
if ( !isdefined( color ) )
|
|
color = ( 0, 1, 0 );
|
|
hangtime = .05;
|
|
circleres = 16;
|
|
hemires = circleres / 2;
|
|
circleinc = 360 / circleres;
|
|
circleres++ ;
|
|
plotpoints = [];
|
|
rad = 0;
|
|
|
|
plotpoints = [];
|
|
rad = 0.000;
|
|
timer = gettime() + ( time * 1000 );
|
|
while ( gettime() < timer )
|
|
{
|
|
angletoplayer = vectortoangles( self.origin - level.player geteye() );
|
|
for ( i = 0;i < circleres;i++ )
|
|
{
|
|
plotpoints[ plotpoints.size ] = self.origin + vector_multiply( anglestoforward( ( angletoplayer + ( rad, 90, 0 ) ) ), radius );
|
|
rad += circleinc;
|
|
}
|
|
plot_points( plotpoints, color[ 0 ], color[ 1 ], color[ 2 ], hangtime );
|
|
plotpoints = [];
|
|
wait hangtime;
|
|
}
|
|
}
|
|
|
|
psource_hudshow()
|
|
{
|
|
flag_clear( "psource_Notviewing" );
|
|
level.photosourcemod setshader( "psourcemodify", level.photosourcemodsize * 2, level.photosourcemodsize );
|
|
if ( isdefined( self.temp_image ) )
|
|
level.photosource setshader( self.temp_image, 640, 480 );
|
|
else
|
|
level.photosource setshader( self.image, 640, 480 );
|
|
level.player freezecontrols( true );
|
|
level.player setorigin( self.origin + ( level.player.origin - level.player geteye() ) - vector_multiply( anglestoforward( self.angles ), 3 ) );
|
|
level.player setplayerangles( self.angles );
|
|
level.photosource.alpha = 1;
|
|
flag_set( "psource_refresh" );
|
|
while ( level.player islookingorg( self ) && level.player usebuttonpressed() )
|
|
wait .05;
|
|
level.player freezecontrols( false );
|
|
|
|
level.photosource.alpha = 0;
|
|
flag_set( "psource_Notviewing" );
|
|
}
|
|
|
|
psource_select_next()
|
|
{
|
|
if ( getdvar( "psource_select_next" ) == "" )
|
|
return;
|
|
if ( !( level.psource_selectindex == level.psource_views.size ) )
|
|
level.psource_selectindex++ ;
|
|
|
|
setdvar( "psource_select_next", "" );
|
|
|
|
}
|
|
|
|
psource_select_prev()
|
|
{
|
|
if ( getdvar( "psource_select_prev" ) == "" )
|
|
return;
|
|
if ( !( level.psource_selectindex == 0 ) )
|
|
level.psource_selectindex -- ;
|
|
setdvar( "psource_select_prev", "" );
|
|
|
|
}
|
|
|
|
psource_select_new()
|
|
{
|
|
if ( getdvar( "psource_select_new" ) == "" )
|
|
return;
|
|
level.psource_selectindex = level.psource_views.size;
|
|
setdvar( "psource_select_new", "" );
|
|
|
|
}
|
|
|
|
psource_setview()
|
|
{
|
|
if ( getdvar( "psource_setview" ) == "" )
|
|
return;
|
|
view = psource_getcurrentview();
|
|
// view.temp_image = "case";
|
|
psource_setvieworgang( view );
|
|
setdvar( "psource_setview", "" );
|
|
}
|
|
|
|
psource_setvieworgang( view )
|
|
{
|
|
view.origin = level.player geteye();
|
|
view.angles = level.player getplayerangles();
|
|
}
|
|
|
|
psource_dump()
|
|
{
|
|
if ( getdvar( "psource_dump" ) == "" )
|
|
return;
|
|
println( " " );
|
|
println( " " );
|
|
println( " " );
|
|
println( "--------******--------" );
|
|
println( " photo source dump (paste these to your level script before maps\_load::main() ) " );
|
|
println( "--------******--------" );
|
|
println( " " );
|
|
println( " " );
|
|
// println ("thread maps\\\_photosource::photosource_init();");
|
|
for ( i = 0;i < level.psource_views.size;i++ )
|
|
println( "maps\\\_photosource::psource_create(\"" + level.psource_views[ i ].image + "\"," + level.psource_views[ i ].origin + "," + level.psource_views[ i ].angles + ");" );
|
|
// println ("thread maps\\\_photosource::photosource_main();");
|
|
println( " " );
|
|
println( " " );
|
|
println( " " );
|
|
setdvar( "psource_dump", "" );
|
|
|
|
}
|
|
|
|
psource_help()
|
|
{
|
|
if ( getdvar( "psource_help" ) == "" )
|
|
return;
|
|
println( " " );
|
|
println( " " );
|
|
println( "Photo refrenence - Help " );
|
|
println( " " );
|
|
println( " photo reference is a tool to help communicate art direction within the level " );
|
|
println( " An artist or a level designer can run this tool to place images of photo " );
|
|
println( " source like a gallery throughout the level." );
|
|
println( " " );
|
|
println( " before starting do /exec psource.cfg" );
|
|
println( " " );
|
|
println( "psource_enable ( 7 Key ) - toggles psource on and off" );
|
|
println( "psource_setview ( 8 Key ) - sets the view of the currently selected position." );
|
|
println( "psource_select_prev ( [ Key ) - selects prev psourceposition" );
|
|
println( "psource_select_next ( ] Key ) - selects next psourceposition" );
|
|
println( "psource_select_new ( \\ Key ) - selects NEW psourceposition, used to create a new position on setview" );
|
|
println( "psource_help ( h Key ) - prints to console this help text" );
|
|
println( "psource_dump ( u Key ) - dumps view list to the console to be cut and pasted into script somewhere" );
|
|
println( "psource_delete ( del Key ) - deletes the currently selected view (yellow star in circle)" );
|
|
println( " " );
|
|
println( "Pressing the usebutton on a sphere will teleport you so that you can see " );
|
|
println( "the desired angle of the piece of reference, this also selects the view" );
|
|
println( "and highlights it yellow" );
|
|
println( " " );
|
|
println( "To change the image of the currently selected view go to the console and enter this dvar" );
|
|
println( "psource_image <materialname>" );
|
|
println( " " );
|
|
println( "Once you have all your views press the dump button, open your console.log and paste the script to your level script" );
|
|
setdvar( "psource_help", "" );
|
|
}
|
|
|
|
|
|
|
|
psource_delete()
|
|
{
|
|
if ( getdvar( "psource_delete" ) == "" )
|
|
return;
|
|
newarray = [];
|
|
for ( i = 0;i < level.psource_views.size;i++ )
|
|
if ( i != level.psource_selectindex )
|
|
newarray[ newarray.size ] = level.psource_views[ i ];
|
|
level.psource_views = newarray;
|
|
flag_set( "psource_refresh" );
|
|
setdvar( "psource_delete", "" );
|
|
}
|
|
|
|
psource_select_template()
|
|
{
|
|
if ( getdvar( "psource_select_template" ) == "" )
|
|
return;
|
|
setdvar( "psource_select_template", "" );
|
|
}
|
|
|
|
psource_editmode_update()
|
|
{
|
|
if ( getdvar( "psource_editmode" ) == "" )
|
|
return;
|
|
if ( !level.psource_editmode )
|
|
level.psource_editmode = true;
|
|
else
|
|
level.psource_editmode = false;
|
|
setdvar( "psource_editmode", "" );
|
|
}
|
|
|
|
psource_image_update()
|
|
{
|
|
if ( getdvar( "psource_image" ) == "" )
|
|
return;
|
|
view = psource_getcurrentview();
|
|
view.image = getdvar( "psource_image" );
|
|
view.temp_image = "case";// this is what will show when a new material is created( can't load mid level )
|
|
setdvar( "psource_image", "" );
|
|
}
|
|
|
|
psource_getcurrentview()
|
|
{
|
|
view = undefined;
|
|
if ( isdefined( level.psource_views[ level.psource_selectindex ] ) )
|
|
view = level.psource_views[ level.psource_selectindex ];
|
|
else
|
|
view = psource_newview( false );
|
|
return view;
|
|
}
|
|
|
|
psource_newview( bScriptAdded )
|
|
{
|
|
if ( !bScriptAdded )
|
|
level.photosourcemod setshader( "psourcemodify", level.photosourcemodsize * 2, level.photosourcemodsize );
|
|
|
|
view = spawnstruct();
|
|
view.image = "case";
|
|
if ( !bScriptAdded )
|
|
{
|
|
view.temp_image = "case";
|
|
psource_setvieworgang( view );
|
|
|
|
}
|
|
if ( isdefined( level.psource_views[ level.psource_selectindex ] ) )
|
|
level.psource_views[ level.psource_selectindex ] delete();
|
|
level.psource_views[ level.psource_selectindex ] = view;
|
|
if ( !bScriptAdded )
|
|
flag_set( "psource_refresh" );
|
|
return view;
|
|
}
|
|
|
|
//use this in level file to initialize all the stuff.
|
|
psource_create( image, position, angle )
|
|
{
|
|
/#
|
|
if ( !isdefined( level.flag ) )
|
|
level.flag = [];
|
|
if ( !isdefined( level.flag[ "psource_Notviewing" ] ) )
|
|
init();
|
|
if ( !isdefined( level.psource_selectindex ) )
|
|
level.psource_selectindex = 0;
|
|
if ( !isdefined( level.psource_views ) )
|
|
level.psource_views = [];
|
|
view = psource_newview( true );
|
|
view.origin = position;
|
|
view.angles = angle;
|
|
precacheshader( image );
|
|
view.image = image;
|
|
level.psource_selectindex++ ;
|
|
#/
|
|
}
|
|
|
|
islookingorg( view )
|
|
{
|
|
normalvec = vectorNormalize( view.origin - self getShootAtPos() );
|
|
veccomp = vectorNormalize( ( view.origin - ( 0, 0, level.psource_selectrad * 2 ) ) - self getShootAtPos() );
|
|
insidedot = vectordot( normalvec, veccomp );
|
|
|
|
anglevec = anglestoforward( self getplayerangles() );
|
|
vectordot = vectordot( anglevec, normalvec );
|
|
if ( vectordot > insidedot )
|
|
return true;
|
|
else
|
|
return false;
|
|
} |