================= AimAtTarget Calculate origin2 so the target apogee will be hit ================= */
| 749 | ================= |
| 750 | */ |
| 751 | void AimAtTarget( gentity_t *self ) |
| 752 | { |
| 753 | gentity_t *ent; |
| 754 | vec3_t origin; |
| 755 | float height, gravity, time, forward; |
| 756 | float dist; |
| 757 | |
| 758 | VectorAdd( self->absmin, self->absmax, origin ); |
| 759 | VectorScale ( origin, 0.5, origin ); |
| 760 | |
| 761 | ent = G_PickTarget( self->target ); |
| 762 | if ( !ent ) |
| 763 | { |
| 764 | G_FreeEntity( self ); |
| 765 | return; |
| 766 | } |
| 767 | |
| 768 | if ( self->classname && !Q_stricmp( "trigger_push", self->classname ) ) |
| 769 | { |
| 770 | if ( (self->spawnflags&2) ) |
| 771 | {//check once a second to see if we should activate or deactivate ourselves |
| 772 | self->e_ThinkFunc = thinkF_trigger_push_checkclear; |
| 773 | self->nextthink = level.time + FRAMETIME; |
| 774 | } |
| 775 | |
| 776 | if ( (self->spawnflags&16) ) |
| 777 | {//relative, not an arc or linear |
| 778 | VectorCopy( ent->currentOrigin, self->s.origin2 ); |
| 779 | return; |
| 780 | } |
| 781 | else if ( (self->spawnflags&4) ) |
| 782 | {//linear, not an arc |
| 783 | VectorSubtract( ent->currentOrigin, origin, self->s.origin2 ); |
| 784 | VectorNormalize( self->s.origin2 ); |
| 785 | return; |
| 786 | } |
| 787 | } |
| 788 | |
| 789 | if ( self->classname && !Q_stricmp( "target_push", self->classname ) ) |
| 790 | { |
| 791 | if( self->spawnflags & PUSH_CONSTANT ) |
| 792 | { |
| 793 | VectorSubtract ( ent->s.origin, self->s.origin, self->s.origin2 ); |
| 794 | VectorNormalize( self->s.origin2); |
| 795 | VectorScale (self->s.origin2, self->speed, self->s.origin2); |
| 796 | return; |
| 797 | } |
| 798 | } |
| 799 | height = ent->s.origin[2] - origin[2]; |
| 800 | if ( height < 0 ) |
| 801 | {//sqrt of negative is bad! |
| 802 | height = 0; |
| 803 | } |
| 804 | gravity = g_gravity->value; |
| 805 | if ( gravity < 0 ) |
| 806 | { |
| 807 | gravity = 0; |
| 808 | } |
nothing calls this directly
no test coverage detected