commentary.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #include "../idlib/precompiled.h"
  2. #pragma hdrstop
  3. #include "Game_local.h"
  4. CLASS_DECLARATION( idStaticEntity, idCommentaryNode )
  5. END_CLASS
  6. void idCommentaryNode::Save( idSaveGame *savefile ) const
  7. {
  8. savefile->WriteBool(frobbed);
  9. savefile->WriteVec3(orgOrigin);
  10. }
  11. void idCommentaryNode::Restore( idRestoreGame *savefile )
  12. {
  13. savefile->ReadBool(frobbed);
  14. savefile->ReadVec3(orgOrigin);
  15. }
  16. void idCommentaryNode::Spawn( void )
  17. {
  18. GetPhysics()->SetContents( CONTENTS_RENDERMODEL );
  19. GetPhysics()->SetClipMask( MASK_SOLID | CONTENTS_MOVEABLECLIP );
  20. this->isFrobbable = true;
  21. this->noGrab = true;
  22. frobbed = false;
  23. orgOrigin = GetPhysics()->GetOrigin();
  24. if (g_commentary.GetBool())
  25. {
  26. StartSound( "snd_idle", SND_CHANNEL_ANY, 0, false, NULL );
  27. }
  28. BecomeActive( TH_THINK );
  29. }
  30. void idCommentaryNode::Think( void )
  31. {
  32. if (!frobbed)
  33. {
  34. idAngles ang;
  35. idVec3 org;
  36. ang.pitch = ang.roll = 0.0f;
  37. ang.yaw = ( gameLocal.time & 4095 ) * 360.0f / -4096.0f;
  38. SetAngles( ang );
  39. float scale = 0.005f + entityNumber * 0.00001f;
  40. org = orgOrigin;
  41. org.z += 2.0f + cos( ( gameLocal.time + 2000 ) * scale ) * 2.0f;
  42. SetOrigin( org );
  43. }
  44. Present();
  45. }
  46. void idCommentaryNode::OnFrob( idEntity* activator )
  47. {
  48. StopSound( SND_CHANNEL_ANY, false );
  49. frobbed = true;
  50. BecomeInactive( TH_THINK );
  51. void *buffer;
  52. idStr rawtext;
  53. if (fileSystem->ReadFile( va("text/%s.txt", spawnArgs.GetString( "message" )), &buffer) > 0)
  54. {
  55. rawtext = (char *) buffer;
  56. fileSystem->FreeFile( buffer );
  57. }
  58. else
  59. {
  60. //failed to load text.
  61. gameLocal.GetLocalPlayer()->Event_hudMessage(va("Failed to find commentary text: %s\n", spawnArgs.GetString( "message" )));
  62. return;
  63. }
  64. if (gameLocal.GetLocalPlayer()->toggleCommentary(1, rawtext))
  65. {
  66. StartSound( "snd_press", SND_CHANNEL_ANY, 0, false, NULL );
  67. SetSkin(declManager->FindSkin( "skins/commentary/noglow" ));
  68. }
  69. }