Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

106 lines
2.7 KiB

  1. //========= Copyright Valve Corporation, All rights reserved. ============//
  2. //
  3. // Purpose: Base class for simple projectiles
  4. //
  5. // $Workfile: $
  6. // $Date: $
  7. // $NoKeywords: $
  8. //=============================================================================//
  9. #include "cbase.h"
  10. #include "cbasespriteprojectile.h"
  11. // memdbgon must be the last include file in a .cpp file!!!
  12. #include "tier0/memdbgon.h"
  13. LINK_ENTITY_TO_CLASS( baseprojectile, CBaseSpriteProjectile );
  14. //---------------------------------------------------------
  15. // Save/Restore
  16. //---------------------------------------------------------
  17. BEGIN_DATADESC( CBaseSpriteProjectile )
  18. DEFINE_FIELD( m_iDmg, FIELD_INTEGER ),
  19. DEFINE_FIELD( m_iDmgType, FIELD_INTEGER ),
  20. DEFINE_FIELD( m_hIntendedTarget, FIELD_EHANDLE ),
  21. END_DATADESC()
  22. //---------------------------------------------------------
  23. //---------------------------------------------------------
  24. void CBaseSpriteProjectile::Spawn( char *pszModel,
  25. const Vector &vecOrigin,
  26. const Vector &vecVelocity,
  27. edict_t *pOwner,
  28. MoveType_t iMovetype,
  29. MoveCollide_t nMoveCollide,
  30. int iDamage,
  31. int iDamageType,
  32. CBaseEntity *pIntendedTarget )
  33. {
  34. Precache();
  35. SetSolid( SOLID_BBOX );
  36. SetModel( pszModel );
  37. UTIL_SetSize( this, vec3_origin, vec3_origin );
  38. m_iDmg = iDamage;
  39. m_iDmgType = iDamageType;
  40. SetMoveType( iMovetype, nMoveCollide );
  41. UTIL_SetOrigin( this, vecOrigin );
  42. SetAbsVelocity( vecVelocity );
  43. SetOwnerEntity( Instance( pOwner ) );
  44. m_hIntendedTarget.Set( pIntendedTarget );
  45. // Call think for free the first time. It's up to derived classes to rethink.
  46. SetNextThink( gpGlobals->curtime );
  47. }
  48. //---------------------------------------------------------
  49. //---------------------------------------------------------
  50. void CBaseSpriteProjectile::Touch( CBaseEntity *pOther )
  51. {
  52. HandleTouch( pOther );
  53. }
  54. //---------------------------------------------------------
  55. //---------------------------------------------------------
  56. void CBaseSpriteProjectile::HandleTouch( CBaseEntity *pOther )
  57. {
  58. CBaseEntity *pOwner;
  59. pOwner = GetOwnerEntity();
  60. if( !pOwner )
  61. {
  62. pOwner = this;
  63. }
  64. trace_t tr;
  65. tr = BaseClass::GetTouchTrace( );
  66. CTakeDamageInfo info( this, pOwner, m_iDmg, m_iDmgType );
  67. GuessDamageForce( &info, (tr.endpos - tr.startpos), tr.endpos );
  68. pOther->TakeDamage( info );
  69. UTIL_Remove( this );
  70. }
  71. //---------------------------------------------------------
  72. //---------------------------------------------------------
  73. void CBaseSpriteProjectile::Think()
  74. {
  75. HandleThink();
  76. }
  77. //---------------------------------------------------------
  78. //---------------------------------------------------------
  79. void CBaseSpriteProjectile::HandleThink()
  80. {
  81. }