Advertisement
Guest User

Untitled

a guest
Sep 29th, 2010
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.73 KB | None | 0 0
  1. #include maps\mp\_utility;
  2. #include common_scripts\utility;
  3. #include maps\mp\gametypes\_hud_util;
  4.  
  5. init()
  6. {
  7. if (isdefined(level.initedEntityHeadIcons))
  8. return;
  9. level.initedEntityHeadIcons = true;
  10.  
  11. game["entity_headicon_allies"] = maps\mp\gametypes\_teams::getTeamHeadIcon( "allies" );
  12. game["entity_headicon_axis"] = maps\mp\gametypes\_teams::getTeamHeadIcon( "axis" );
  13.  
  14. precacheShader( game["entity_headicon_allies"] );
  15. precacheShader( game["entity_headicon_axis"] );
  16.  
  17. if (!level.teamBased)
  18. return;
  19. }
  20.  
  21. // This can show to single players or to teams. Showing to a single player destroys instances of
  22. // the icon that are shown to their team. Showing to a team destroys instances of the icon that
  23. // are shown to players on that team
  24. setHeadIcon( showTo, icon, offset, width, height )
  25. {
  26. if ( !isDefined( self.entityHeadIcons ) )
  27. self.entityHeadIcons = [];
  28.  
  29. if ( !isPlayer( showTo ) && showTo == "none" )
  30. {
  31. foreach ( key, headIcon in self.entityHeadIcons )
  32. {
  33. // TODO: remove and fix properly after ship
  34. if ( isDefined( headIcon ) )
  35. headIcon destroy();
  36.  
  37. self.entityHeadIcons[ key ] = undefined;
  38. }
  39.  
  40. return;
  41. }
  42.  
  43. if ( isPlayer( showTo ) )
  44. {
  45. if ( isDefined( self.entityHeadIcons[ showTo.guid ] ) )
  46. {
  47. self.entityHeadIcons[ showTo.guid ] destroy();
  48. self.entityHeadIcons[ showTo.guid ] = undefined;
  49. }
  50.  
  51. if ( icon == "" )
  52. return;
  53.  
  54. // remove from team or we'd have two icons
  55. if ( isDefined( self.entityHeadIcons[ showTo.team ] ) )
  56. {
  57. self.entityHeadIcons[ showTo.team ] destroy();
  58. self.entityHeadIcons[ showTo.team ] = undefined;
  59. }
  60.  
  61. headIcon = newClientHudElem( showTo );
  62. self.entityHeadIcons[ showTo.guid ] = headIcon;
  63. }
  64. else
  65. {
  66. assert( showTo == "axis" || showTo == "allies" );
  67. assert( level.teamBased );
  68.  
  69. if ( isDefined( self.entityHeadIcons[ showTo ] ) )
  70. {
  71. self.entityHeadIcons[ showTo ] destroy();
  72. self.entityHeadIcons[ showTo ] = undefined;
  73. }
  74.  
  75. if ( icon == "" )
  76. return;
  77.  
  78. foreach ( key, hudIcon in self.entityHeadIcons )
  79. {
  80. if ( key == "axis" || key == "allies" )
  81. continue;
  82.  
  83. player = getPlayerForGuid( key );
  84. if ( player.team == showTo )
  85. {
  86. self.entityHeadIcons[ key ] destroy();
  87. self.entityHeadIcons[ key ] = undefined;
  88. }
  89. }
  90.  
  91. headIcon = newTeamHudElem( showTo );
  92. self.entityHeadIcons[ showTo ] = headIcon;
  93. }
  94.  
  95. if ( !isDefined( width ) || !isDefined( height ) )
  96. {
  97. width = 10;
  98. height = 10;
  99. }
  100.  
  101. headIcon.archived = true;
  102. headIcon.x = self.origin[0] + offset[0];
  103. headIcon.y = self.origin[1] + offset[1];
  104. headIcon.z = self.origin[2] + offset[2];
  105. headIcon.alpha = 0.85;
  106. headIcon setShader( icon, width, height );
  107. if ( isPlayer( showTo ) )
  108. headIcon setWaypoint( true, true, false );
  109. else
  110. headIcon setWaypoint( true, true, false );
  111.  
  112. headIcon thread keepPositioned( self, offset );
  113. self thread destroyIconsOnDeath();
  114. if ( isPlayer( showTo ) )
  115. headIcon thread destroyOnOwnerDisconnect( showTo );
  116. }
  117.  
  118.  
  119. destroyOnOwnerDisconnect( owner )
  120. {
  121. self endon ( "death" );
  122.  
  123. owner waittill ( "disconnect" );
  124.  
  125. self destroy();
  126. }
  127.  
  128.  
  129. destroyIconsOnDeath()
  130. {
  131. self notify ( "destroyIconsOnDeath" );
  132. self endon ( "destroyIconsOnDeath" );
  133.  
  134. self waittill ( "death" );
  135.  
  136. foreach ( key, headIcon in self.entityHeadIcons )
  137. {
  138. // TODO: remove and fix properly after ship
  139. if( !isDefined(headIcon) ) //needed for FFA host migration (when host has active head icons)
  140. continue;
  141.  
  142. headIcon destroy();
  143. }
  144. }
  145.  
  146.  
  147. keepPositioned( owner, offset )
  148. {
  149. self endon ( "death" );
  150. owner endon ( "death" );
  151.  
  152. pos = owner.origin;
  153.  
  154. for ( ;; )
  155. {
  156. if ( pos != owner.origin )
  157. {
  158. pos = owner.origin;
  159.  
  160. self.x = pos[0] + offset[0];
  161. self.y = pos[0] + offset[0];
  162. self.z = pos[0] + offset[0];
  163. }
  164. wait .05;
  165. }
  166. }
  167.  
  168.  
  169.  
  170. setTeamHeadIcon( team, offset ) // "allies", "axis", "all", "none"
  171. {
  172. if ( !level.teamBased )
  173. return;
  174.  
  175. if ( !isDefined( self.entityHeadIconTeam ) )
  176. {
  177. self.entityHeadIconTeam = "none";
  178. self.entityHeadIcon = undefined;
  179. }
  180.  
  181. shader = game["entity_headicon_" + team];
  182.  
  183. self.entityHeadIconTeam = team;
  184.  
  185. if ( isDefined( offset ) )
  186. self.entityHeadIconOffset = offset;
  187. else
  188. self.entityHeadIconOffset = (0,0,0);
  189.  
  190. self notify( "kill_entity_headicon_thread" );
  191.  
  192. if ( team == "none" )
  193. {
  194. if ( isDefined( self.entityHeadIcon ) )
  195. self.entityHeadIcon destroy();
  196. return;
  197. }
  198.  
  199. headIcon = newTeamHudElem( team );
  200. headIcon.archived = true;
  201. headIcon.x = self.origin[0] + self.entityHeadIconOffset[0];
  202. headIcon.y = self.origin[1] + self.entityHeadIconOffset[1];
  203. headIcon.z = self.origin[2] + self.entityHeadIconOffset[2];
  204. headIcon.alpha = .8;
  205. headIcon setShader( shader, 10, 10 );
  206. headIcon setWaypoint( false, false );
  207. self.entityHeadIcon = headIcon;
  208.  
  209. self thread keepIconPositioned();
  210. self thread destroyHeadIconsOnDeath();
  211. }
  212.  
  213. setPlayerHeadIcon( player, offset ) // "allies", "axis", "all", "none"
  214. {
  215. if ( level.teamBased )
  216. return;
  217.  
  218. if ( !isDefined( self.entityHeadIconTeam ) )
  219. {
  220. self.entityHeadIconTeam = "none";
  221. self.entityHeadIcon = undefined;
  222. }
  223.  
  224. self notify( "kill_entity_headicon_thread" );
  225.  
  226. if ( !isDefined( player ) )
  227. {
  228. if ( isDefined( self.entityHeadIcon ) )
  229. self.entityHeadIcon destroy();
  230. return;
  231. }
  232.  
  233. team = player.team;
  234. self.entityHeadIconTeam = team;
  235.  
  236. if ( isDefined( offset ) )
  237. self.entityHeadIconOffset = offset;
  238. else
  239. self.entityHeadIconOffset = (0,0,0);
  240.  
  241. shader = game["entity_headicon_" + team];
  242.  
  243. headIcon = newClientHudElem( player );
  244. headIcon.archived = true;
  245. headIcon.x = self.origin[0] + self.entityHeadIconOffset[0];
  246. headIcon.y = self.origin[1] + self.entityHeadIconOffset[1];
  247. headIcon.z = self.origin[2] + self.entityHeadIconOffset[2];
  248. headIcon.alpha = .8;
  249. headIcon setShader( shader, 10, 10 );
  250. headIcon setWaypoint( false, false );
  251. self.entityHeadIcon = headIcon;
  252.  
  253. self thread keepIconPositioned();
  254. self thread destroyHeadIconsOnDeath();
  255. }
  256.  
  257. keepIconPositioned()
  258. {
  259. self endon( "kill_entity_headicon_thread" );
  260. self endon( "death" );
  261.  
  262. pos = self.origin;
  263. while(1)
  264. {
  265. if ( pos != self.origin )
  266. {
  267. self updateHeadIconOrigin();
  268. pos = self.origin;
  269. }
  270. wait .05;
  271. }
  272. }
  273.  
  274. destroyHeadIconsOnDeath()
  275. {
  276. self endon( "kill_entity_headicon_thread" );
  277. self waittill ( "death" );
  278.  
  279. // TODO: remove and fix properly after ship
  280. if( !isDefined(self.entityHeadIcon) )
  281. return;
  282.  
  283. self.entityHeadIcon destroy();
  284. }
  285.  
  286.  
  287. updateHeadIconOrigin()
  288. {
  289. self.entityHeadIcon.x = self.origin[0] + self.entityHeadIconOffset[0];
  290. self.entityHeadIcon.y = self.origin[1] + self.entityHeadIconOffset[1];
  291. self.entityHeadIcon.z = self.origin[2] + self.entityHeadIconOffset[2];
  292. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement