/* ====================================================================== BUILD GUN ====================================================================== */ void CheckCkitRepair( gentity_t *ent ) { vec3_t viewOrigin, forward, end; trace_t tr; gentity_t *traceEnt; int bHealth; //TODO find a solution to move dependency of ent->s.number and &ent->eventTime outside this function playerState_t *ps=&ent->client->ps; if ( ps->weaponTime > 0 || ps->stats[ STAT_MISC ] > 0 ) { return; } BG_GetClientViewOrigin( ps, viewOrigin ); AngleVectors( ps->viewangles, forward, NULL, NULL ); VectorMA( viewOrigin, 100, forward, end ); trap_Trace( &tr, viewOrigin, NULL, NULL, end, ent->s.number, MASK_PLAYERSOLID ); traceEnt = &g_entities[ tr.entityNum ]; if ( tr.fraction < 1.0f && traceEnt->spawned && traceEnt->health > 0 && traceEnt->s.eType == ET_BUILDABLE && traceEnt->buildableTeam == TEAM_HUMANS ) { bHealth = BG_Buildable( traceEnt->s.modelindex )->health; if ( traceEnt->health < bHealth ) { traceEnt->health += HBUILD_HEALRATE; if ( traceEnt->health >= bHealth ) { traceEnt->health = bHealth; G_AddPlayerEvent( ps, EV_BUILD_REPAIRED, 0, ent->s.number, &ent->eventTime ); } else { G_AddPlayerEvent( ps, EV_BUILD_REPAIR, 0, ent->s.number, &ent->eventTime ); } ps->weaponTime += BG_Weapon( ps->weapon )->repeatRate1; } } }
void BotSeek( gentity_t *self, vec3_t direction ) { vec3_t viewOrigin; vec3_t seekPos; BG_GetClientViewOrigin( &self->client->ps, viewOrigin ); VectorNormalize( direction ); // move directly toward the target BotDirectionToUsercmd( self, direction, &self->botMind->cmdBuffer ); VectorMA( viewOrigin, 100, direction, seekPos ); // slowly change our aim to point to the target BotSlowAim( self, seekPos, 0.6 ); BotAimAtLocation( self, seekPos ); }
/* ====================================================================== BUILD GUN ====================================================================== */ void CheckCkitRepair( gentity_t *ent ) { vec3_t viewOrigin, forward, end; trace_t tr; gentity_t *traceEnt; int bHealth; if ( ent->client->ps.weaponTime > 0 || ent->client->ps.stats[ STAT_MISC ] > 0 ) { return; } BG_GetClientViewOrigin( &ent->client->ps, viewOrigin ); AngleVectors( ent->client->ps.viewangles, forward, NULL, NULL ); VectorMA( viewOrigin, 100, forward, end ); trap_Trace( &tr, viewOrigin, NULL, NULL, end, ent->s.number, MASK_PLAYERSOLID ); traceEnt = &g_entities[ tr.entityNum ]; if ( tr.fraction < 1.0f && traceEnt->spawned && traceEnt->health > 0 && traceEnt->s.eType == ET_BUILDABLE && traceEnt->buildableTeam == TEAM_HUMANS ) { bHealth = BG_Buildable( traceEnt->s.modelindex )->health; if ( traceEnt->health < bHealth ) { traceEnt->health += HBUILD_HEALRATE; if ( traceEnt->health >= bHealth ) { traceEnt->health = bHealth; G_AddEvent( ent, EV_BUILD_REPAIRED, 0 ); } else { G_AddEvent( ent, EV_BUILD_REPAIR, 0 ); } ent->client->ps.weaponTime += BG_Weapon( ent->client->ps.weapon )->repeatRate1; } } }
void G_CheckCkitRepair( gentity_t *self ) { vec3_t viewOrigin, forward, end; trace_t tr; gentity_t *traceEnt; if ( self->client->ps.weaponTime > 0 || self->client->ps.stats[ STAT_MISC ] > 0 ) { return; } BG_GetClientViewOrigin( &self->client->ps, viewOrigin ); AngleVectors( self->client->ps.viewangles, forward, NULL, NULL ); VectorMA( viewOrigin, 100, forward, end ); trap_Trace( &tr, viewOrigin, NULL, NULL, end, self->s.number, MASK_PLAYERSOLID ); traceEnt = &g_entities[ tr.entityNum ]; if ( tr.fraction < 1.0f && traceEnt->spawned && traceEnt->health > 0 && traceEnt->s.eType == ET_BUILDABLE && traceEnt->buildableTeam == TEAM_HUMANS ) { const buildableAttributes_t *buildable; buildable = BG_Buildable( traceEnt->s.modelindex ); if ( traceEnt->health < buildable->health ) { if ( G_Heal( traceEnt, HBUILD_HEALRATE ) ) { G_AddEvent( self, EV_BUILD_REPAIR, 0 ); } else { G_AddEvent( self, EV_BUILD_REPAIRED, 0 ); } self->client->ps.weaponTime += BG_Weapon( self->client->ps.weapon )->repeatRate1; } } }
void G_CheckCkitRepair( gentity_t *self ) { vec3_t viewOrigin, forward, end; trace_t tr; gentity_t *traceEnt; if ( self->client->ps.weaponTime > 0 || self->client->ps.stats[ STAT_MISC ] > 0 ) { return; } BG_GetClientViewOrigin( &self->client->ps, viewOrigin ); AngleVectors( self->client->ps.viewangles, forward, nullptr, nullptr ); VectorMA( viewOrigin, 100, forward, end ); trap_Trace( &tr, viewOrigin, nullptr, nullptr, end, self->s.number, MASK_PLAYERSOLID, 0 ); traceEnt = &g_entities[ tr.entityNum ]; if ( tr.fraction < 1.0f && traceEnt->spawned && traceEnt->s.eType == ET_BUILDABLE && traceEnt->buildableTeam == TEAM_HUMANS ) { HealthComponent *healthComponent = traceEnt->entity->Get<HealthComponent>(); if (healthComponent && healthComponent->Alive() && !healthComponent->FullHealth()) { traceEnt->entity->Heal(HBUILD_HEALRATE, nullptr); if (healthComponent->FullHealth()) { G_AddEvent(self, EV_BUILD_REPAIRED, 0); } else { G_AddEvent(self, EV_BUILD_REPAIR, 0); } self->client->ps.weaponTime += BG_Weapon( self->client->ps.weapon )->repeatRate1; } } }