Advertisement
Guest User

Untitled

a guest
Sep 29th, 2010
263
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.50 KB | None | 0 0
  1. #include common_scripts\utility;
  2. #include common_scripts\_createfx;
  3.  
  4. menu( name )
  5. {
  6. return level.create_fx_menu == name;
  7. }
  8.  
  9. setmenu( name )
  10. {
  11. level.create_fx_menu = name;
  12. }
  13.  
  14. create_fx_menu()
  15. {
  16. if ( button_is_clicked( "escape", "x" ) )
  17. {
  18. exit_menu();
  19. return;
  20. }
  21.  
  22. if ( menu( "creation" ) )
  23. {
  24. if ( button_is_clicked( "1" ) )
  25. {
  26. setmenu( "create_oneshot" );
  27. draw_effects_list();
  28. return;
  29. }
  30. if ( button_is_clicked( "2" ) )
  31. {
  32. setmenu( "create_loopfx" );
  33. draw_effects_list();
  34. return;
  35. }
  36. if ( button_is_clicked( "3" ) )
  37. {
  38. setmenu( "create_loopsound" );
  39. ent = createLoopSound();
  40. finish_creating_entity( ent );
  41. return;
  42. }
  43. if ( button_is_clicked( "4" ) )
  44. {
  45. setmenu( "create_exploder" );
  46. ent = createNewExploder();
  47. finish_creating_entity( ent );
  48. return;
  49. }
  50. }
  51. else
  52. if ( menu( "create_oneshot" ) || menu( "create_loopfx" ) || menu( "change_fxid" ) )
  53. {
  54. if ( button_is_clicked( "m" ) )
  55. {
  56. increment_list_offset();
  57. draw_effects_list();
  58. }
  59.  
  60. menu_fx_creation();
  61. }
  62. else
  63. if ( menu( "none" ) )
  64. {
  65. if ( button_is_clicked( "m" ) )
  66. increment_list_offset();
  67.  
  68. // change selected entities
  69. menu_change_selected_fx();
  70.  
  71. // if there's a selected ent then display the info on the last one to be selected
  72. if ( entities_are_selected() )
  73. {
  74. last_selected_ent = get_last_selected_entity();
  75.  
  76. // only update hudelems when we have new info
  77. if ( !IsDefined( level.last_displayed_ent ) || last_selected_ent != level.last_displayed_ent )
  78. {
  79. display_fx_info( last_selected_ent );
  80. level.last_displayed_ent = last_selected_ent;
  81. }
  82.  
  83. if ( button_is_clicked( "a" ) )
  84. {
  85. clear_settable_fx();
  86. setMenu( "add_options" );
  87. }
  88. }
  89. }
  90. else
  91. if ( menu( "add_options" ) )
  92. {
  93. if ( !entities_are_selected() )
  94. {
  95. clear_fx_hudElements();
  96. setMenu( "none" );
  97. return;
  98. }
  99.  
  100. display_fx_add_options( get_last_selected_entity() );
  101. if ( button_is_clicked( "m" ) )
  102. {
  103. increment_list_offset();
  104. // draw_effects_list();
  105. }
  106. }
  107. }
  108.  
  109. exit_menu()
  110. {
  111. clear_fx_hudElements();
  112. clear_entity_selection();
  113. update_selected_entities();
  114. setmenu( "none" );
  115. }
  116.  
  117. get_last_selected_entity()
  118. {
  119. return level.selected_fx_ents[ level.selected_fx_ents.size - 1 ];
  120. }
  121.  
  122. menu_fx_creation()
  123. {
  124. count = 0;
  125. picked_fx = undefined;
  126. keys = func_get_level_fx();
  127.  
  128. for ( i = level.effect_list_offset; i < keys.size; i++ )
  129. {
  130. count = count + 1;
  131. button_to_check = count;
  132. if ( button_to_check == 10 )
  133. button_to_check = 0;
  134. if ( button_is_clicked( button_to_check + "" ) )
  135. {
  136. picked_fx = keys[ i ];
  137. break;
  138. }
  139.  
  140. if ( count > level.effect_list_offset_max )
  141. break;
  142. }
  143.  
  144. if ( !isdefined( picked_fx ) )
  145. return;
  146.  
  147. if ( menu( "change_fxid" ) )
  148. {
  149. apply_option_to_selected_fx( get_option( "fxid" ), picked_fx );
  150. level.effect_list_offset = 0;
  151. clear_fx_hudElements();
  152. setMenu( "none" );
  153. return;
  154. }
  155.  
  156.  
  157. ent = undefined;
  158. if ( menu( "create_loopfx" ) )
  159. ent = createLoopEffect( picked_fx );
  160. if ( menu( "create_oneshot" ) )
  161. ent = createOneshotEffect( picked_fx );
  162.  
  163. finish_creating_entity( ent );
  164. }
  165.  
  166. finish_creating_entity( ent )
  167. {
  168. ent.v[ "angles" ] = vectortoangles( ( ent.v[ "origin" ] + ( 0, 0, 100 ) ) - ent.v[ "origin" ] );
  169. assert( isdefined( ent ) );
  170. ent post_entity_creation_function();// for createfx dev purposes
  171. clear_entity_selection();
  172. select_last_entity();
  173. move_selection_to_cursor();
  174. update_selected_entities();
  175. setMenu( "none" );
  176. }
  177.  
  178. menu_init()
  179. {
  180. level.createFX_options = [];
  181. // each option has a type, a name its stored under, a description, a default, and a mask it uses to determine
  182. // which types of fx can have this option
  183. addOption( "string", "fxid", "The FX", "nil", "fx" );
  184. addOption( "float", "delay", "Repeat rate/start delay", 0.5, "fx" );
  185. addOption( "float", "fire_range", "Fire damage range", 0, "fx" );
  186. addOption( "string", "flag", "Flag", "nil", "exploder" );
  187.  
  188. addOption( "string", "firefx", "2nd FX id", "nil", "exploder" );
  189. addOption( "float", "firefxdelay", "2nd FX id repeat rate", 0.5, "exploder" );
  190. addOption( "float", "firefxtimeout", "2nd FX timeout", 5, "exploder" );
  191. addOption( "string", "firefxsound", "2nd FX soundalias", "nil", "exploder" );
  192. addOption( "float", "damage", "Radius damage", 150, "exploder" );
  193. addOption( "float", "damage_radius", "Radius of radius damage", 250, "exploder" );
  194. addOption( "float", "delay_min", "Minimimum time between repeats", 1, "exploder" );
  195. addOption( "float", "delay_max", "Maximum time between repeats", 2, "exploder" );
  196. addOption( "int", "repeat", "Number of times to repeat", 5, "exploder" );
  197. addOption( "string", "exploder", "Exploder", 1, "exploder" );
  198. addOption( "string", "earthquake", "Earthquake", "nil", "exploder" );
  199.  
  200. if( !level.mp_createfx )
  201. addOption( "string", "rumble", "Rumble", "nil", "exploder" );
  202. addOption( "string", "ender", "Level notify for ending 2nd FX", "nil", "exploder" );
  203.  
  204. addOption( "string", "soundalias", "Soundalias", "nil", "all" );
  205. addOption( "string", "loopsound", "Loopsound", "nil", "exploder" );
  206.  
  207. if( !level.mp_createfx )
  208. addOption( "int", "stoppable", "Can be stopped from script", "1", "all" );
  209.  
  210. level.effect_list_offset = 0;
  211. level.effect_list_offset_max = 10;
  212.  
  213.  
  214. // creates mask groups. For example if the above says its mask is "fx", then all the types under "fx" can use the option
  215. level.createfxMasks = [];
  216. level.createfxMasks[ "all" ] = [];
  217. level.createfxMasks[ "all" ][ "exploder" ] = true;
  218. level.createfxMasks[ "all" ][ "oneshotfx" ] = true;
  219. level.createfxMasks[ "all" ][ "loopfx" ] = true;
  220. level.createfxMasks[ "all" ][ "soundfx" ] = true;
  221.  
  222. level.createfxMasks[ "fx" ] = [];
  223. level.createfxMasks[ "fx" ][ "exploder" ] = true;
  224. level.createfxMasks[ "fx" ][ "oneshotfx" ] = true;
  225. level.createfxMasks[ "fx" ][ "loopfx" ] = true;
  226.  
  227. level.createfxMasks[ "exploder" ] = [];
  228. level.createfxMasks[ "exploder" ][ "exploder" ] = true;
  229.  
  230. level.createfxMasks[ "loopfx" ] = [];
  231. level.createfxMasks[ "loopfx" ][ "loopfx" ] = true;
  232.  
  233. level.createfxMasks[ "oneshotfx" ] = [];
  234. level.createfxMasks[ "oneshotfx" ][ "oneshotfx" ] = true;
  235.  
  236. level.createfxMasks[ "soundfx" ] = [];
  237. level.createfxMasks[ "soundfx" ][ "soundalias" ] = true;
  238. }
  239.  
  240. get_last_selected_ent()
  241. {
  242. return level.selected_fx_ents[ level.selected_fx_ents.size - 1 ];
  243. }
  244.  
  245. entities_are_selected()
  246. {
  247. return level.selected_fx_ents.size > 0;
  248. }
  249.  
  250. menu_change_selected_fx()
  251. {
  252. if ( !level.selected_fx_ents.size )
  253. return;
  254.  
  255. count = 0;
  256. drawnCount = 0;
  257. ent = get_last_selected_ent();
  258.  
  259. for ( i = 0; i < level.createFX_options.size; i++ )
  260. {
  261. option = level.createFX_options[ i ];
  262. if ( !isdefined( ent.v[ option[ "name" ] ] ) )
  263. continue;
  264. count++ ;
  265. if ( count < level.effect_list_offset )
  266. continue;
  267.  
  268. drawnCount++ ;
  269. button_to_check = drawnCount;
  270. if ( button_to_check == 10 )
  271. button_to_check = 0;
  272.  
  273. if ( button_is_clicked( button_to_check + "" ) )
  274. {
  275. prepare_option_for_change( option, drawnCount );
  276. break;
  277. }
  278.  
  279. if ( drawnCount > level.effect_list_offset_max )
  280. {
  281. more = true;
  282. break;
  283. }
  284. }
  285. }
  286.  
  287. prepare_option_for_change( option, drawnCount )
  288. {
  289. if ( option[ "name" ] == "fxid" )
  290. {
  291. setMenu( "change_fxid" );
  292. draw_effects_list();
  293. return;
  294. }
  295.  
  296. createfx_centerprint( "To change " + option[ "description" ] + " on selected entities, type /fx newvalue" );
  297. level.createfx_inputlocked = true;
  298. set_option_index( option[ "name" ] );
  299. setdvar( "fx", "nil" );
  300. // change color of text to look selected
  301. level.createFxHudElements[ drawnCount + 3 ][ 0 ].color = ( 1, 1, 0 );
  302. }
  303.  
  304. menu_fx_option_set()
  305. {
  306. if ( getdvar( "fx" ) == "nil" )
  307. return;
  308.  
  309. option = get_selected_option();
  310. setting = undefined;
  311. if ( option[ "type" ] == "string" )
  312. setting = getdvar( "fx" );
  313. if ( option[ "type" ] == "int" )
  314. setting = getdvarint( "fx" );
  315. if ( option[ "type" ] == "float" )
  316. setting = getdvarfloat( "fx" );
  317.  
  318. apply_option_to_selected_fx( option, setting );
  319. }
  320.  
  321. apply_option_to_selected_fx( option, setting )
  322. {
  323. for ( i = 0; i < level.selected_fx_ents.size; i++ )
  324. {
  325. ent = level.selected_fx_ents[ i ];
  326.  
  327. if ( mask( option[ "mask" ], ent.v[ "type" ] ) )
  328. ent.v[ option[ "name" ] ] = setting;
  329. }
  330.  
  331. level.last_displayed_ent = undefined; // needed to force a redraw of the last display ent
  332. update_selected_entities();
  333. clear_settable_fx();
  334. }
  335.  
  336. set_option_index( name )
  337. {
  338. for ( i = 0; i < level.createFX_options.size; i++ )
  339. {
  340. if ( level.createFX_options[ i ][ "name" ] != name )
  341. continue;
  342.  
  343. level.selected_fx_option_index = i;
  344. return;
  345. }
  346. }
  347.  
  348. get_selected_option()
  349. {
  350. return level.createFX_options[ level.selected_fx_option_index ];
  351. }
  352.  
  353. mask( type, name )
  354. {
  355. return isdefined( level.createfxMasks[ type ][ name ] );
  356. }
  357.  
  358. addOption( type, name, description, defaultSetting, mask )
  359. {
  360. option = [];
  361. option[ "type" ] = type;
  362. option[ "name" ] = name;
  363. option[ "description" ] = description;
  364. option[ "default" ] = defaultSetting;
  365. option[ "mask" ] = mask;
  366. level.createFX_options[ level.createFX_options.size ] = option;
  367. }
  368.  
  369. get_option( name )
  370. {
  371. for ( i = 0; i < level.createFX_options.size; i++ )
  372. {
  373. if ( level.createFX_options[ i ][ "name" ] == name )
  374. return level.createFX_options[ i ];
  375. }
  376. }
  377.  
  378. display_fx_info( ent )
  379. {
  380. // are we doing the create fx menu right now?
  381. if ( !menu( "none" ) )
  382. return;
  383.  
  384. clear_fx_hudElements();
  385. set_fx_hudElement( "Name: " + ent.v[ "fxid" ] );
  386. set_fx_hudElement( "Type: " + ent.v[ "type" ] );
  387. set_fx_hudElement( "Origin: " + ent.v[ "origin" ] );
  388. set_fx_hudElement( "Angles: " + ent.v[ "angles" ] );
  389.  
  390. if ( entities_are_selected() )
  391. {
  392. // if entities are selected then we make the entity stats modifiable
  393. count = 0;
  394. drawnCount = 0;
  395. more = false;
  396. for ( i = 0; i < level.createFX_options.size; i++ )
  397. {
  398. option = level.createFX_options[ i ];
  399. if ( !isdefined( ent.v[ option[ "name" ] ] ) )
  400. continue;
  401. count++ ;
  402. if ( count < level.effect_list_offset )
  403. continue;
  404.  
  405. drawnCount++ ;
  406. set_fx_hudElement( drawnCount + ". " + option[ "description" ] + ": " + ent.v[ option[ "name" ] ] );
  407. if ( drawnCount > level.effect_list_offset_max )
  408. {
  409. more = true;
  410. break;
  411. }
  412. }
  413. if ( count > level.effect_list_offset_max )
  414. set_fx_hudElement( "(m) More >" );
  415. set_fx_hudElement( "(a) Add >" );
  416. set_fx_hudElement( "(x) Exit >" );
  417. }
  418. else
  419. {
  420. count = 0;
  421. more = false;
  422. for ( i = 0; i < level.createFX_options.size; i++ )
  423. {
  424. option = level.createFX_options[ i ];
  425. if ( !isdefined( ent.v[ option[ "name" ] ] ) )
  426. continue;
  427. count++ ;
  428. set_fx_hudElement( option[ "description" ] + ": " + ent.v[ option[ "name" ] ] );
  429. if ( count > level.createFx_hudElements )
  430. break;
  431. }
  432. }
  433. }
  434.  
  435. display_fx_add_options( ent )
  436. {
  437. // are we doing the create fx menu right now?
  438. assert( menu( "add_options" ) );
  439. assert( entities_are_selected() );
  440.  
  441. clear_fx_hudElements();
  442. set_fx_hudElement( "Name: " + ent.v[ "fxid" ] );
  443. set_fx_hudElement( "Type: " + ent.v[ "type" ] );
  444. set_fx_hudElement( "Origin: " + ent.v[ "origin" ] );
  445. set_fx_hudElement( "Angles: " + ent.v[ "angles" ] );
  446.  
  447. // if entities are selected then we make the entity stats modifiable
  448. count = 0;
  449. drawnCount = 0;
  450. more = false;
  451.  
  452. if ( level.effect_list_offset >= level.createFX_options.size )
  453. level.effect_list_offset = 0;
  454.  
  455. for ( i = 0; i < level.createFX_options.size; i++ )
  456. {
  457. option = level.createFX_options[ i ];
  458. if ( isdefined( ent.v[ option[ "name" ] ] ) )
  459. continue;
  460.  
  461. // does this type of effect get this kind of option?
  462. if ( !mask( option[ "mask" ], ent.v[ "type" ] ) )
  463. continue;
  464.  
  465. count++ ;
  466. if ( count < level.effect_list_offset )
  467. continue;
  468. if ( drawnCount >= level.effect_list_offset_max )
  469. continue;
  470.  
  471. drawnCount++ ;
  472. button_to_check = drawnCount;
  473. if ( button_to_check == 10 )
  474. button_to_check = 0;
  475. if ( button_is_clicked( button_to_check + "" ) )
  476. {
  477. add_option_to_selected_entities( option );
  478. // prepare_option_for_change( option, drawnCount );
  479. menuNone();
  480. level.last_displayed_ent = undefined; // needed to force a redraw of the last display ent
  481. return;
  482. }
  483.  
  484. set_fx_hudElement( button_to_check + ". " + option[ "description" ] );
  485. }
  486.  
  487. if ( count > level.effect_list_offset_max )
  488. set_fx_hudElement( "(m) More >" );
  489.  
  490. set_fx_hudElement( "(x) Exit >" );
  491. }
  492.  
  493. add_option_to_selected_entities( option )
  494. {
  495. setting = undefined;
  496. for ( i = 0; i < level.selected_fx_ents.size; i++ )
  497. {
  498. ent = level.selected_fx_ents[ i ];
  499.  
  500. if ( mask( option[ "mask" ], ent.v[ "type" ] ) )
  501. ent.v[ option[ "name" ] ] = option[ "default" ];
  502. }
  503. }
  504.  
  505. menuNone()
  506. {
  507. level.effect_list_offset = 0;
  508. clear_fx_hudElements();
  509. setMenu( "none" );
  510. }
  511.  
  512.  
  513. draw_effects_list()
  514. {
  515.  
  516. clear_fx_hudElements();
  517.  
  518. set_fx_hudElement( "Pick an effect:" );
  519. count = 0;
  520. more = false;
  521.  
  522. keys = func_get_level_fx();
  523.  
  524. if ( level.effect_list_offset >= keys.size )
  525. level.effect_list_offset = 0;
  526.  
  527. for ( i = level.effect_list_offset; i < keys.size; i++ )
  528. {
  529. count = count + 1;
  530. set_fx_hudElement( count + ". " + keys[ i ] );
  531. if ( count >= level.effect_list_offset_max )
  532. {
  533. more = true;
  534. break;
  535. }
  536. }
  537.  
  538. if ( keys.size > level.effect_list_offset_max )
  539. set_fx_hudElement( "(m) More >" );
  540. }
  541.  
  542. increment_list_offset()
  543. {
  544. level.effect_list_offset += level.effect_list_offset_max;
  545. // keys = getarraykeys(level._effect);
  546. // if (level.effect_list_offset >= keys.size)
  547. // level.effect_list_offset = 0;
  548. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement