您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ G_TouchTriggers函数代码示例

51自学网 2021-06-01 21:02:15
  C++
这篇教程C++ G_TouchTriggers函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中G_TouchTriggers函数的典型用法代码示例。如果您正苦于以下问题:C++ G_TouchTriggers函数的具体用法?C++ G_TouchTriggers怎么用?C++ G_TouchTriggers使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了G_TouchTriggers函数的29个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: SV_StepDirection

/*======================SV_StepDirectionTurns to the movement direction, and walks the current distance iffacing it.======================*/qboolean SV_StepDirection (edict_t *ent, float yaw, float dist){	vec3_t		move, oldorigin;	float		delta;		ent->ideal_yaw = yaw;	M_ChangeYaw (ent);		yaw = yaw*M_PI*2 / 360;	move[0] = cos(yaw)*dist;	move[1] = sin(yaw)*dist;	move[2] = 0;	VectorCopy (ent->s.origin, oldorigin);	if (SV_movestep (ent, move, false))	{		delta = ent->s.angles[YAW] - ent->ideal_yaw;		if (delta > 45 && delta < 315)		{		// not turned far enough, so don't take the step			VectorCopy (oldorigin, ent->s.origin);		}		gi.linkentity (ent);		G_TouchTriggers (ent);		return true;	}	gi.linkentity (ent);	G_TouchTriggers (ent);	return false;}
开发者ID:ernestbuffington,项目名称:NaturalBornKillers,代码行数:38,


示例2: M_default_movestep

qboolean M_default_movestep (edict_t *self, usercmd_t *ucmd){	vec3_t	movedir;	vec3_t	neworigin;	int		movetype;	float	speed = 0;	AngleVectors( tv( 0, self->s.angles[YAW], 0), movedir, NULL, NULL);	if( ucmd->forwardmove > 200 )		speed = 20;	else if( ucmd->forwardmove > 10 )		speed = 5;	//else if( ucmd->forwardmove < -200 )		//speed = -20;	//else if( ucmd->forwardmove < -10 )		//speed = -5;	else {		//speed is 0		VectorCopy( self->s.origin, self->s.old_origin );		//relink		gi.linkentity(self);//trap_LinkEntity (self);		G_TouchTriggers (self);		return true;	}	VectorCopy( self->s.origin, self->s.old_origin );	//VectorCopy( self->ai->move_vector, movedir );	VectorNormalize( movedir );	movetype = M_default_GravityBoxStep( self->s.origin, speed, movedir, neworigin, self->mins, self->maxs, MASK_AISOLID, self );	if( movetype & LINK_INVALID )	{		return false;	} else {		VectorCopy( neworigin, self->s.origin );		//store velocity for dmclass move code checks		VectorSubtract(self->s.origin, self->s.old_origin, self->velocity);		//relink		gi.linkentity(self);//trap_LinkEntity (self);		G_TouchTriggers (self);		return true;	}	return false;}
开发者ID:ZwS,项目名称:qudos,代码行数:50,


示例3: G_RoundTouchTriggers

static void G_RoundTouchTriggers (int team){	Actor* actor = nullptr;	while ((actor = G_EdictsGetNextLivingActorOfTeam(actor, team))) {		G_TouchTriggers(actor);	}}
开发者ID:drone-pl,项目名称:ufoai,代码行数:8,


示例4: SpectatorThink

/*=================SpectatorThink=================*/void SpectatorThink( gentity_t *ent, usercmd_t *ucmd ) {	gclient_t	*client = ent->client;	if ( client->sess.spectatorState != SPECTATOR_FOLLOW ) 	{		client->ps.pm_type = PM_SPECTATOR;		client->ps.speed = 400;	// faster than normal		pmove_t		pm;		// set up for pmove		memset (&pm, 0, sizeof(pm));		pm.ps = &client->ps;		pm.cmd = *ucmd;		pm.tracemask = MASK_PLAYERSOLID & ~CONTENTS_BODY;	// spectators can fly through bodies		pm.trace = trap_Trace;		pm.pointcontents = trap_PointContents;		pm.animations = NULL;		// perform a pmove		Pmove (&pm);		G_UpdatePlayerStateScores ( ent );		// save results of pmove		VectorCopy( client->ps.origin, ent->s.origin );		G_TouchTriggers( ent );		trap_UnlinkEntity( ent );	}	client->oldbuttons = client->buttons;	client->buttons = ucmd->buttons;	// attack button cycles through spectators	if ( client->sess.spectatorState != SPECTATOR_FOLLOW && g_forceFollow.integer )	{		Cmd_FollowCycle_f( ent, 1 );	}	if ( ( client->buttons & BUTTON_ATTACK ) && ! ( client->oldbuttons & BUTTON_ATTACK ) ) 	{		Cmd_FollowCycle_f( ent, 1 );	}	else if ( ( client->buttons & BUTTON_ALT_ATTACK ) && ! ( client->oldbuttons & BUTTON_ALT_ATTACK ) ) 	{		Cmd_FollowCycle_f( ent, -1 );	}	else if ( !g_forceFollow.integer && ucmd->upmove > 0 && (client->ps.pm_flags & PMF_FOLLOW) )	{		G_StopFollowing( ent );	}}
开发者ID:Jordi1990,项目名称:Sof2MPSDK,代码行数:57,


示例5: SV_StepDirection

/*======================SV_StepDirectionTurns to the movement direction, and walks the current distance iffacing it.======================*/qboolean SV_StepDirection (edict_t *ent, float yaw, float dist){    vec3_t		move, oldorigin;    float		delta;    if(!ent->inuse)	return true;		// PGM g_touchtrigger free problem    ent->ideal_yaw = yaw;    M_ChangeYaw (ent);    yaw = yaw*M_PI*2 / 360;    move[0] = cos(yaw)*dist;    move[1] = sin(yaw)*dist;    move[2] = 0;    VectorCopy (ent->s.origin, oldorigin);    if (SV_movestep (ent, move, false))    {        ent->monsterinfo.aiflags &= ~AI_BLOCKED;        if(!ent->inuse)	return true;		// PGM g_touchtrigger free problem        delta = ent->s.angles[YAW] - ent->ideal_yaw;        if (strncmp(ent->classname, "monster_widow", 13))        {            if (delta > 45 && delta < 315)            {   // not turned far enough, so don't take the step                VectorCopy (oldorigin, ent->s.origin);            }        }        gi.linkentity (ent);        G_TouchTriggers (ent);        return true;    }    gi.linkentity (ent);    G_TouchTriggers (ent);    return false;}
开发者ID:DrItanium,项目名称:rogue,代码行数:46,


示例6: SV_PushEntity

/* * Does not change the entities velocity at all */trace_tSV_PushEntity(edict_t *ent, vec3_t push){	trace_t trace;	vec3_t start;	vec3_t end;	int mask;	VectorCopy(ent->s.origin, start);	VectorAdd(start, push, end);retry:	if (ent->clipmask)	{		mask = ent->clipmask;	}	else	{		mask = MASK_SOLID;	}	trace = gi.trace(start, ent->mins, ent->maxs, end, ent, mask);	VectorCopy(trace.endpos, ent->s.origin);	gi.linkentity(ent);	if (trace.fraction != 1.0)	{		SV_Impact(ent, &trace);		/* if the pushed entity went away and the pusher is still there */		if (!trace.ent->inuse && ent->inuse)		{			/* move the pusher back and try again */			VectorCopy(start, ent->s.origin);			gi.linkentity(ent);			goto retry;		}	}	if (ent->inuse)	{		G_TouchTriggers(ent);	}	return trace;}
开发者ID:yquake2,项目名称:xatrix,代码行数:51,


示例7: SV_PushEntity

/*============SV_PushEntityDoes not change the entities velocity at all============*/trace_t SV_PushEntity (edict_t *ent, vec3_t push){	trace_t	trace;	vec3_t	start;	vec3_t	end;	int		mask;	VectorCopy (ent->s.origin, start);	VectorAdd (start, push, end);retry:	if (ent->clipmask)		mask = ent->clipmask;	else		mask = MASK_SOLID;	trace = gi.trace (start, ent->mins, ent->maxs, end, ent, mask);		VectorCopy (trace.endpos, ent->s.origin);	gi.linkentity (ent);	if (trace.fraction != 1.0)	{		SV_Impact (ent, &trace);		// if the pushed entity went away and the pusher is still there		if (!trace.ent->inuse && ent->inuse)		{			// move the pusher back and try again			VectorCopy (start, ent->s.origin);			gi.linkentity (ent);			goto retry;		}	}// ================// PGM	// FIXME - is this needed?	ent->gravity = 1.0;// PGM// ================	if (ent->inuse)		G_TouchTriggers (ent);	return trace;}					
开发者ID:ajbonner,项目名称:yet-another-quake2-fork,代码行数:54,


示例8: G_ActorUseDoor

/** * @brief Make the actor use (as in open/close) a door edict * @note Will also check whether the door is still reachable (this might have * changed due to the rotation) after the usage * @param actor The actor that is using the door * @param door The door that should be opened/closed */void G_ActorUseDoor (Edict* actor, Edict* door){	/* check whether it's part of an edict group but not the master */	if (door->flags & FL_GROUPSLAVE)		door = door->groupMaster;	if (!G_ClientUseEdict(actor->getPlayer(), actor, door))		return;	/* end this loop here, for the AI this is a) not interesting,	 * and b) could result in endless loops */	if (G_IsAI(actor))		return;	Edict* closeActor = nullptr;	while ((closeActor = G_FindRadius(closeActor, door->origin, UNIT_SIZE * 3))) {		/* check whether the door is still reachable (this might have		 * changed due to the rotation) or whether an actor can reach it now */		G_TouchTriggers(closeActor);	}}
开发者ID:Maximaximum,项目名称:ufoai,代码行数:28,


示例9: G_PushEntity

/* * @brief Does not change the entity's velocity at all */c_trace_t G_PushEntity(g_edict_t *ent, vec3_t push) {	c_trace_t trace;	vec3_t start;	vec3_t end;	int32_t mask;	VectorCopy(ent->s.origin, start);	VectorAdd(start, push, end);	retry: if (ent->clip_mask)		mask = ent->clip_mask;	else		mask = MASK_SOLID;	trace = gi.Trace(start, end, ent->mins, ent->maxs, ent, mask);	VectorCopy(trace.end, ent->s.origin);	gi.LinkEdict(ent);	if (trace.fraction != 1.0) {		G_Impact(ent, &trace);		// if the pushed entity went away and the pusher is still there		if (!trace.ent->in_use && ent->in_use) {			// move the pusher back and try again			VectorCopy(start, ent->s.origin);			gi.LinkEdict(ent);			goto retry;		}	}	if (ent->in_use && ent->client && ent->locals.health > 0)		G_TouchTriggers(ent);	return trace;}
开发者ID:jayschwa,项目名称:quake2world,代码行数:39,


示例10: SV_movestep

//FIXME since we need to test end position contents here, can we avoid doing//it again later in catagorize position?qboolean SV_movestep (edict_t *ent, vec3_t move, qboolean relink){	float		dz;	vec3_t		oldorg, neworg, end;	trace_t		trace;	int			i;	float		stepsize;	vec3_t		test;	int			contents;// BEGIN:	Xatrix/Ridah/Navigator/14-apr-1998	int			mask = MASK_MONSTERSOLID;	if (ent->cast_info.aiflags & AI_PLAYERCLIP)		mask = MASK_PLAYERSOLID;	else if (ent->flags & FL_RESPAWN)	// used for moveout command		mask = MASK_SOLID;// END:		Xatrix/Ridah/Navigator/14-apr-1998// try the move		VectorCopy (ent->s.origin, oldorg);	VectorAdd (ent->s.origin, move, neworg);// flying monsters don't step up	if ( ent->flags & (FL_SWIM | FL_FLY) )	{	// try one move with vertical motion, then one without		for (i=0 ; i<2 ; i++)		{			VectorAdd (ent->s.origin, move, neworg);			if (i == 0 && ent->enemy)			{				if (!ent->goalentity)					ent->goalentity = ent->enemy;				dz = ent->s.origin[2] - ent->goalentity->s.origin[2];				if (ent->goalentity->client)				{					if (dz > 40)						neworg[2] -= 8;					if (!((ent->flags & FL_SWIM) && (ent->waterlevel < 2)))						if (dz < 30)							neworg[2] += 8;				}				else				{						if (dz > 8)							neworg[2] -= 8;						else if (dz > 0)							neworg[2] -= dz;						else if (dz < -8)							neworg[2] += 8;						else							neworg[2] += dz;									}			}			// BEGIN:	Xatrix/Ridah/Navigator/14-apr-1998		(use modified mask for Grunts)			trace = gi.trace (ent->s.origin, ent->mins, ent->maxs, neworg, ent, mask);// END:		Xatrix/Ridah/Navigator/14-apr-1998			// fly monsters don't enter water voluntarily			if (ent->flags & FL_FLY)			{				if (!ent->waterlevel)				{					test[0] = trace.endpos[0];					test[1] = trace.endpos[1];					test[2] = trace.endpos[2] + ent->mins[2] + 1;					contents = gi.pointcontents(test);					if (contents & MASK_WATER)						return false;				}			}			// swim monsters don't exit water voluntarily			if (ent->flags & FL_SWIM)			{				if (ent->waterlevel < 2)				{					test[0] = trace.endpos[0];					test[1] = trace.endpos[1];					test[2] = trace.endpos[2] + ent->mins[2] + 1;					contents = gi.pointcontents(test);					if (!(contents & MASK_WATER))						return false;				}			}			if (trace.fraction == 1)			{				VectorCopy (trace.endpos, ent->s.origin);				if (relink)				{					gi.linkentity (ent);					G_TouchTriggers (ent);				}				return true;//.........这里部分代码省略.........
开发者ID:ernestbuffington,项目名称:NaturalBornKillers,代码行数:101,


示例11: ClientThink

//.........这里部分代码省略.........	{		pm.snapinitial = true;//		gi.dprintf ("pmove changed!/n");	}	pm.cmd = *ucmd;	pm.trace = PM_trace;	// adds default parms	pm.pointcontents = gi.pointcontents;	// perform a pmove	gi.Pmove (&pm);	// save results of pmove	client->ps.pmove = pm.s;	client->old_pmove = pm.s;	for (i=0 ; i<3 ; i++)	{		ent->s.origin[i] = pm.s.origin[i]*0.125;		ent->velocity[i] = pm.s.velocity[i]*0.125;	}	VectorCopy (pm.mins, ent->mins);	VectorCopy (pm.maxs, ent->maxs);	client->resp.cmd_angles[0] = SHORT2ANGLE(ucmd->angles[0]);	client->resp.cmd_angles[1] = SHORT2ANGLE(ucmd->angles[1]);	client->resp.cmd_angles[2] = SHORT2ANGLE(ucmd->angles[2]);	if (ent->groundentity && !pm.groundentity && (pm.cmd.upmove >= 10) && (pm.waterlevel == 0))	{		gi.sound(ent, CHAN_VOICE, gi.soundindex("*jump1.wav"), 1, ATTN_NORM, 0);		PlayerNoise(ent, ent->s.origin, PNOISE_SELF);	}	ent->viewheight = pm.viewheight;	ent->waterlevel = pm.waterlevel;	ent->watertype = pm.watertype;	ent->groundentity = pm.groundentity;	if (pm.groundentity)		ent->groundentity_linkcount = pm.groundentity->linkcount;	if (ent->deadflag)	{		client->ps.viewangles[ROLL] = 40;		client->ps.viewangles[PITCH] = -15;		client->ps.viewangles[YAW] = client->killer_yaw;	}	else	{		VectorCopy (pm.viewangles, client->v_angle);		VectorCopy (pm.viewangles, client->ps.viewangles);	}	gi.linkentity (ent);	if (ent->movetype != MOVETYPE_NOCLIP)		G_TouchTriggers (ent);	// touch other objects	for (i=0 ; i<pm.numtouch ; i++)	{		other = pm.touchents[i];		for (j=0 ; j<i ; j++)			if (pm.touchents[j] == other)				break;		if (j != i)			continue;	// duplicated		if (!other->touch)			continue;		other->touch (other, ent, NULL, NULL);	}	client->oldbuttons = client->buttons;	client->buttons = ucmd->buttons;	client->latched_buttons |= client->buttons & ~client->oldbuttons;	// save light level the player is standing on for	// monster sighting AI	ent->light_level = ucmd->lightlevel;	// fire weapon from final position if needed	if (client->latched_buttons & BUTTON_ATTACK)	{		if (!client->weapon_thunk)		{			client->weapon_thunk = true;			Think_Weapon (ent);		}	}#ifdef WITH_ACEBOT// ACEBOT_ADD	if (!ent->is_bot && !ent->deadflag && !ent->client->resp.spectator)		ACEND_PathMap(ent);// ACEBOT_END#endif}
开发者ID:ZwS,项目名称:qudos,代码行数:101,


示例12: G_ClientMove

//.........这里部分代码省略.........                G_EdictCalcOrigin(ent);                VectorCopy(ent->origin, pointTrace);                pointTrace[2] += PLAYER_MIN;                contentFlags = gi.PointContents(pointTrace);                /* link it at new position - this must be done for every edict                 * movement - to let the server know about it. */                gi.LinkEdict(ent);                /* Only the PHALANX team has these stats right now. */                if (ent->chr.scoreMission) {                    float truediv = gi.GetTUsForDirection(dir, 0);		/* regardless of crouching ! */                    if (G_IsCrouched(ent))                        ent->chr.scoreMission->movedCrouched += truediv;                    else                        ent->chr.scoreMission->movedNormal += truediv;                }                /* write the step to the net */                G_WriteStep(ent, &stepAmount, dvec, contentFlags);                /* check if player appears/perishes, seen from other teams */                G_CheckVis(ent, true);                /* check for anything appearing, seen by "the moving one" */                status = G_CheckVisTeamAll(ent->team, false, ent);                /* Set ent->TU because the reaction code relies on ent->TU being accurate. */                G_ActorSetTU(ent, initTU - usedTUs);                clientAction = ent->clientAction;                oldState = ent->state;                oldHP = ent->HP;                /* check triggers at new position */                if (G_TouchTriggers(ent)) {                    if (!clientAction)                        status |= VIS_STOP;                }                G_TouchSolids(ent, 10.0f);                /* state has changed - maybe we walked on a trigger_hurt */                if (oldState != ent->state)                    status |= VIS_STOP;                else if (oldHP != ent->HP)                    status |= VIS_STOP;            } else if (crouchFlag == 1) {                /* Actor is standing */                G_ClientStateChange(player, ent, STATE_CROUCHED, true);            } else if (crouchFlag == -1) {                /* Actor is crouching and should stand up */                G_ClientStateChange(player, ent, STATE_CROUCHED, false);            }            /* check for reaction fire */            if (G_ReactionFireOnMovement(ent)) {                status |= VIS_STOP;                autoCrouchRequired = false;            }            /* check for death */            if (((oldHP != 0 && oldHP != ent->HP) || (oldState != ent->state)) && !G_IsDazed(ent)) {                /** @todo Handle dazed via trigger_hurt */                /* maybe this was due to rf - then the G_ActorDie was already called */                if (!G_IsDead(ent)) {                    G_CheckDeathOrKnockout(ent, NULL, NULL, oldHP - ent->HP);                }                return;            }            if (G_ActorShouldStopInMidMove(ent, status, dvtab, numdv - 1)) {                /* don't autocrouch if new enemy becomes visible */                autoCrouchRequired = false;                break;            }            /* Restore ent->TU because the movement code relies on it not being modified! */            G_ActorSetTU(ent, initTU);        }        /* submit the TUs / round down */        if (g_notu != NULL && g_notu->integer)            G_ActorSetTU(ent, initTU);        else            G_ActorSetTU(ent, initTU - usedTUs);        G_SendStats(ent);        /* end the move */        G_GetFloorItems(ent);        gi.EndEvents();    }    if (autoCrouchRequired) {        /* toggle back to crouched state */        G_ClientStateChange(player, ent, STATE_CROUCHED, true);    }}
开发者ID:MyWifeRules,项目名称:ufoai-1,代码行数:101,


示例13: SV_Push

//.........这里部分代码省略.........			// move to a visible node			if ((check->svflags & SVF_MONSTER) && !check->goal_ent)			{				extern void AI_FreeAndClearGoalEnt( edict_t *self );				node_t *node;				if (node = NAV_GetClosestNode( check, VIS_PARTIAL, false, false ))				{					check->goal_ent = G_Spawn();					check->goal_ent->owner = check;					VectorCopy( node->origin, check->goal_ent->s.origin );					check->goal_ent->think = AI_FreeAndClearGoalEnt;					check->goal_ent->nextthink = level.time + 3;					check->goal_ent->dmg_radius = 0;		// get real close to it					if (check->cast_info.move_runwalk)						check->cast_info.currentmove = check->cast_info.move_runwalk;					else						check->cast_info.currentmove = check->cast_info.move_run;				}			}			// move this entity			pushed_p->ent = check;			VectorCopy (check->s.origin, pushed_p->origin);			VectorCopy (check->s.angles, pushed_p->angles);			pushed_p++;			// try moving the contacted entity 			VectorAdd (check->s.origin, move, check->s.origin);			if (check->client)			{	// FIXME: doesn't rotate monsters?				check->client->ps.pmove.delta_angles[YAW] += amove[YAW];				// JOSEPH 5-APR-99				if (pusher->touch)					pusher->touch(pusher, check, 0, 0);				// END JOSEPH			}			// figure movement due to the pusher's amove			VectorSubtract (check->s.origin, pusher->s.origin, org);			org2[0] = DotProduct (org, forward);			org2[1] = -DotProduct (org, right);			org2[2] = DotProduct (org, up);			VectorSubtract (org2, org, move2);			VectorAdd (check->s.origin, move2, check->s.origin);			// may have pushed them off an edge			if (check->groundentity != pusher)				check->groundentity = NULL;			block = SV_TestEntityPosition (check);			if (!block)			{	// pushed ok				gi.linkentity (check);				// impact?				continue;			}			// if it is ok to leave in the old position, do it			// this is only relevent for riding entities, not pushed			// FIXME: this doesn't acount for rotation			VectorSubtract (check->s.origin, move, check->s.origin);			block = SV_TestEntityPosition (check);			if (!block)			{				pushed_p--;				continue;			}		}				// save off the obstacle so we can call the block function		obstacle = check;		// move back any entities we already moved		// go backwards, so if the same entity was pushed		// twice, it goes back to the original position		for (p=pushed_p-1 ; p>=pushed ; p--)		{			VectorCopy (p->origin, p->ent->s.origin);			VectorCopy (p->angles, p->ent->s.angles);			if (p->ent->client)			{				p->ent->client->ps.pmove.delta_angles[YAW] = p->deltayaw;			}			gi.linkentity (p->ent);		}		return false;	}//FIXME: is there a better way to handle this?	// see if anything we moved has touched a trigger	for (p=pushed_p-1 ; p>=pushed ; p--)		G_TouchTriggers (p->ent);	return true;}
开发者ID:hypov8,项目名称:kingpin_mm1.5,代码行数:101,


示例14: G_ClientThink

//.........这里部分代码省略.........		VectorCopy(pm.maxs, ent->maxs);		client->cmd_angles[0] = SHORT2ANGLE(ucmd->angles[0]);		client->cmd_angles[1] = SHORT2ANGLE(ucmd->angles[1]);		client->cmd_angles[2] = SHORT2ANGLE(ucmd->angles[2]);		// check for jump, play randomized sound		if (ent->ground_entity && !pm.ground_entity && (pm.cmd.up >= 10)				&& (pm.water_level == 0) && client->jump_time < g_level.time				- 0.2) {			vec3_t angles, forward, velocity;			float speed;			VectorSet(angles, 0.0, ent->s.angles[YAW], 0.0);			AngleVectors(angles, forward, NULL, NULL);			VectorCopy(ent->velocity, velocity);			velocity[2] = 0.0;			speed = VectorNormalize(velocity);			if (DotProduct(velocity, forward) < 0.0 && speed > 200.0)				G_SetAnimation(ent, ANIM_LEGS_JUMP2, true);			else				G_SetAnimation(ent, ANIM_LEGS_JUMP1, true);			ent->s.event = EV_CLIENT_JUMP;			client->jump_time = g_level.time;		}		ent->view_height = pm.view_height;		ent->water_level = pm.water_level;		ent->water_type = pm.water_type;		ent->ground_entity = pm.ground_entity;		if (ent->ground_entity)			ent->ground_entity_link_count = ent->ground_entity->link_count;		VectorCopy(pm.angles, client->angles);		VectorCopy(pm.angles, client->ps.angles);		gi.LinkEntity(ent);		// touch jump pads, hurt brushes, etc..		if (ent->move_type != MOVE_TYPE_NO_CLIP && ent->health > 0)			G_TouchTriggers(ent);		// touch other objects		for (i = 0; i < pm.num_touch; i++) {			other = pm.touch_ents[i];			for (j = 0; j < i; j++)				if (pm.touch_ents[j] == other)					break;			if (j != i)				continue; // duplicated			if (!other->touch)				continue;			other->touch(other, ent, NULL, NULL);		}	}	client->old_buttons = client->buttons;	client->buttons = ucmd->buttons;	client->latched_buttons |= client->buttons & ~client->old_buttons;	// fire weapon if requested	if (client->latched_buttons & BUTTON_ATTACK) {		if (client->persistent.spectator) {			client->latched_buttons = 0;			if (client->chase_target) { // toggle chase camera				client->chase_target = NULL;				client->ps.pmove.pm_flags &= ~PMF_NO_PREDICTION;			} else {				G_ChaseTarget(ent);			}		} else if (client->weapon_think_time < g_level.time) {			G_WeaponThink(ent);		}	}	// update chase camera if being followed	for (i = 1; i <= sv_max_clients->integer; i++) {		other = g_game.edicts + i;		if (other->in_use && other->client->chase_target == ent) {			G_ChaseThink(other);		}	}	G_ClientInventoryThink(ent);}
开发者ID:darkshade9,项目名称:aq2w,代码行数:101,


示例15: SV_Physics_Step

//.........这里部分代码省略.........		wasonground = true;	else		wasonground = false;			if (ent->avelocity[0] || ent->avelocity[1] || ent->avelocity[2])		SV_AddRotationalFriction (ent);	// add gravity except:	//   flying monsters	//   swimming monsters who are in the water	if (! wasonground)		if (!(ent->flags & FL_FLY))			if (!((ent->flags & FL_SWIM) && (ent->waterlevel > 2)))			{				if (ent->velocity[2] < sv_gravity->value*-0.1)					hitsound = true;				if (ent->waterlevel == 0)					SV_AddGravity (ent);			}	// friction for flying monsters that have been given vertical velocity	if ((ent->flags & FL_FLY) && (ent->velocity[2] != 0))	{		speed = fabs(ent->velocity[2]);		control = speed < sv_stopspeed->value ? sv_stopspeed->value : speed;		friction = sv_friction/3;		newspeed = speed - (FRAMETIME * control * friction);		if (newspeed < 0)			newspeed = 0;		newspeed /= speed;		ent->velocity[2] *= newspeed;	}	// friction for flying monsters that have been given vertical velocity	if ((ent->flags & FL_SWIM) && (ent->velocity[2] != 0))	{		speed = fabs(ent->velocity[2]);		control = speed < sv_stopspeed->value ? sv_stopspeed->value : speed;		newspeed = speed - (FRAMETIME * control * sv_waterfriction * ent->waterlevel);		if (newspeed < 0)			newspeed = 0;		newspeed /= speed;		ent->velocity[2] *= newspeed;	}	if (ent->velocity[2] || ent->velocity[1] || ent->velocity[0])	{		// apply friction		// let dead monsters who aren't completely onground slide		if ((wasonground) || (ent->flags & (FL_SWIM|FL_FLY)))			if (!(ent->health <= 0.0 && !M_CheckBottom(ent)))			{				vel = ent->velocity;				speed = sqrt(vel[0]*vel[0] +vel[1]*vel[1]);				if (speed)				{					friction = sv_friction;					control = speed < sv_stopspeed->value ? sv_stopspeed->value : speed;					newspeed = speed - FRAMETIME*control*friction;					if (newspeed < 0)						newspeed = 0;					newspeed /= speed;					vel[0] *= newspeed;					vel[1] *= newspeed;				}			}		if (ent->svflags & SVF_MONSTER)			mask = MASK_MONSTERSOLID;		else			mask = MASK_SOLID;		SV_FlyMove (ent, FRAMETIME, mask);		gi.linkentity (ent);// ========// PGM - reset this every time they move. //       G_touchtriggers will set it back if appropriate		ent->gravity = 1.0;// ========				G_TouchTriggers (ent);		if (!ent->inuse)			return;		if (ent->groundentity)			if (!wasonground)				if (hitsound)					gi.sound (ent, 0, gi.soundindex("world/land.wav"), 1, 1, 0);	}	if(!ent->inuse)			// PGM g_touchtrigger free problem		return;// regular thinking	SV_RunThink (ent);}
开发者ID:ajbonner,项目名称:yet-another-quake2-fork,代码行数:101,


示例16: ClientEndFrame

//.........这里部分代码省略.........		currentSpeed = sqrt(ent->client->ps.velocity[0] * ent->client->ps.velocity[0] + ent->client->ps.velocity[1] * ent->client->ps.velocity[1]);		// Nico, update overall max speed		if (currentSpeed > ent->client->sess.overallMaxSpeed) {			ent->client->sess.overallMaxSpeed = currentSpeed;		}		// Nico, update max speed of the current run		if (currentSpeed > ent->client->sess.maxSpeed) {			ent->client->sess.maxSpeed = currentSpeed;		}	}	// used for informing of speclocked teams.	// Zero out here and set only for certain specs	ent->client->ps.powerups[PW_BLACKOUT] = 0;	if ((ent->client->sess.sessionTeam == TEAM_SPECTATOR) || (ent->client->ps.pm_flags & PMF_LIMBO)) {       // JPW NERVE		SpectatorClientEndFrame(ent);		return;	}	// turn off any expired powerups	// OSP -- range changed for MV	for (i = 0 ; i < PW_NUM_POWERUPS ; ++i) {		if (i == PW_FIRE ||                 // these aren't dependant on level.time		    i == PW_ELECTRIC ||		    i == PW_BREATHER ||		    ent->client->ps.powerups[i] == 0            // OSP		    || i == PW_OPS_CLASS_1		    || i == PW_OPS_CLASS_2		    || i == PW_OPS_CLASS_3		    ) {			continue;		}		// OSP -- If we're paused, update powerup timers accordingly.		// Make sure we dont let stuff like CTF flags expire.		if (ent->client->ps.powerups[i] < level.time) {			ent->client->ps.powerups[i] = 0;		}	}	//	// If the end of unit layout is displayed, don't give	// the player any normal movement attributes	//	// burn from lava, etc	P_WorldEffects(ent);	// apply all the damage taken this frame	P_DamageFeedback(ent);	// add the EF_CONNECTION flag if we haven't gotten commands recently	if (level.time - ent->client->lastCmdTime > 1000) {		ent->s.eFlags |= EF_CONNECTION;	} else {		ent->s.eFlags &= ~EF_CONNECTION;	}	ent->client->ps.stats[STAT_HEALTH] = ent->health;   // FIXME: get rid of ent->health...	                                                    // Gordon: WHY? other ents use it.	G_SetClientSound(ent);	// set the latest infor	// Ridah, fixes jittery zombie movement	if (g_smoothClients.integer) {		BG_PlayerStateToEntityStateExtraPolate(&ent->client->ps, &ent->s, level.time, qfalse);	} else {		BG_PlayerStateToEntityState(&ent->client->ps, &ent->s, qfalse);	}	// DHM - Nerve :: If it's been a couple frames since being revived, and props_frame_state	//					wasn't reset, go ahead and reset it	if (ent->props_frame_state >= 0 && ((level.time - ent->s.effect3Time) > 100)) {		ent->props_frame_state = -1;	}	// DHM - Nerve :: Reset 'count2' for flamethrower	if (!(ent->client->buttons & BUTTON_ATTACK)) {		ent->count2 = 0;	}	// dhm	// zinx - #280 - run touch functions here too, so movers don't have to wait	// until the next ClientThink, which will be too late for some map	// scripts (railgun)	G_TouchTriggers(ent);	// run entity scripting	G_Script_ScriptRun(ent);	// store the client's current position for antilag traces	G_StoreClientPosition(ent);}
开发者ID:ETrun,项目名称:ETrun,代码行数:101,


示例17: G_RunMissile

/*================G_RunMissile================*/void G_RunMissile(gentity_t * ent){	vec3_t          origin;	trace_t         tr;	int             passent;	// get current position	BG_EvaluateTrajectory(&ent->s.pos, level.time, origin);	// if this missile bounced off an invulnerability sphere	if(ent->target_ent)	{		passent = ent->target_ent->s.number;	}#ifdef MISSIONPACK	// prox mines that left the owner bbox will attach to anything, even the owner	else if(ent->s.weapon == WP_PROX_LAUNCHER && ent->count)	{		passent = ENTITYNUM_NONE;	}#endif	else	{		// ignore interactions with the missile owner		passent = ent->r.ownerNum;	}	// trace a line from the previous position to the current position	trap_Trace(&tr, ent->r.currentOrigin, ent->r.mins, ent->r.maxs, origin, passent, ent->clipmask);	if(tr.startsolid || tr.allsolid)	{		// make sure the tr.entityNum is set to the entity we're stuck in		trap_Trace(&tr, ent->r.currentOrigin, ent->r.mins, ent->r.maxs, ent->r.currentOrigin, passent, ent->clipmask);		tr.fraction = 0;	}	else	{		VectorCopy(tr.endpos, ent->r.currentOrigin);	}	trap_LinkEntity(ent);	if(tr.fraction != 1)	{		// never explode or bounce on sky		if(tr.surfaceFlags & SURF_NOIMPACT)		{			// If grapple, reset owner			if(ent->parent && ent->parent->client && ent->parent->client->hook == ent)			{				ent->parent->client->hook = NULL;			}			G_FreeEntity(ent);			return;		}		G_MissileImpact(ent, &tr);		if(ent->s.eType != ET_PROJECTILE && ent->s.eType != ET_PROJECTILE2)		{			return;				// exploded		}	}#ifdef MISSIONPACK	// if the prox mine wasn't yet outside the player body	if(ent->s.weapon == WP_PROX_LAUNCHER && !ent->count)	{		// check if the prox mine is outside the owner bbox		trap_Trace(&tr, ent->r.currentOrigin, ent->r.mins, ent->r.maxs, ent->r.currentOrigin, ENTITYNUM_NONE, ent->clipmask);		if(!tr.startsolid || tr.entityNum != ent->r.ownerNum)		{			ent->count = 1;		}	}#endif	// otty: added	G_TouchTriggers(ent);	// check think function after bouncing	G_RunThink(ent);}
开发者ID:SinSiXX,项目名称:Rogue-Reborn,代码行数:88,


示例18: ClientThink_real

//.........这里部分代码省略.........		ent->eventTime = level.time;	}		// See if the invulnerable flag should be removed for this client	if ( ent->client->ps.eFlags & EF_INVULNERABLE )	{		if ( level.time - ent->client->invulnerableTime >= g_respawnInvulnerability.integer * 1000 )		{			ent->client->ps.eFlags &= ~EF_INVULNERABLE;		}	}	if (g_smoothClients.integer)	{		BG_PlayerStateToEntityStateExtraPolate( &ent->client->ps, &ent->s, ent->client->ps.commandTime, true );	}	else 	{		BG_PlayerStateToEntityState( &ent->client->ps, &ent->s, true );	}	SendPendingPredictableEvents( &ent->client->ps );	if ( !( ent->client->ps.eFlags & EF_FIRING ) ) 	{		client->fireHeld = false;		// for grapple	}	// use the snapped origin for linking so it matches client predicted versions	VectorCopy( ent->s.pos.trBase, ent->r.currentOrigin );	VectorCopy (pm.mins, ent->r.mins);	VectorCopy (pm.maxs, ent->r.maxs);	ent->waterlevel = pm.waterlevel;	ent->watertype = pm.watertype;	// Need to cache off the firemodes to the persitant data segment so they	// are maintained across spectating and respawning	memcpy ( ent->client->pers.firemode, ent->client->ps.firemode, sizeof(ent->client->ps.firemode ) );	// execute client events	ClientEvents( ent, oldEventSequence );	// Update the client animation info	G_UpdateClientAnimations ( ent );	// link entity now, after any personal teleporters have been used	trap_LinkEntity (ent);	if ( !ent->client->noclip ) 	{		G_TouchTriggers( ent );	}	// NOTE: now copy the exact origin over otherwise clients can be snapped into solid	VectorCopy( ent->client->ps.origin, ent->r.currentOrigin );	// Update the clients anti-lag history	G_UpdateClientAntiLag ( ent );	// touch other objects	ClientImpacts( ent, &pm );	// save results of triggers and client events	if (ent->client->ps.eventSequence != oldEventSequence) 	{		ent->eventTime = level.time;	}	// swap and latch button actions	client->oldbuttons = client->buttons;	client->buttons = ucmd->buttons;	client->latched_buttons |= client->buttons & ~client->oldbuttons;	// check for respawning	if ( client->ps.stats[STAT_HEALTH] <= 0 ) 	{					// wait for the attack button to be pressed		if ( level.time > client->respawnTime ) 		{			if ( g_forcerespawn.integer > 0 && 				( level.time - client->respawnTime ) > g_forcerespawn.integer * 1000 ) 			{				respawn( ent );				return;			}			// pressing attack or use is the normal respawn method			if ( ucmd->buttons & BUTTON_ATTACK ) 			{				respawn( ent );			}		}		return;	}	// perform once-a-second actions	ClientTimerActions( ent, msec );}
开发者ID:Jordi1990,项目名称:Sof2MPSDK,代码行数:101,


示例19: SpectatorThink

/*=================SpectatorThinkNiceAss: Heavy modifications will be here for AQ2-like spectator mode and zcam!?=================*/void SpectatorThink(gentity_t * ent, usercmd_t * ucmd){	pmove_t pm;	gclient_t *client;	int clientNum;	client = ent->client;	clientNum = client - level.clients;	if (client->sess.spectatorState == SPECTATOR_ZCAM) {		client->ps.commandTime = ucmd->serverTime;		camera_think(ent);	}	if (client->sess.spectatorState == SPECTATOR_FREE) {		if (g_gametype.integer == GT_CTF && level.team_round_going &&			(client->sess.savedTeam == TEAM_RED || client->sess.savedTeam == TEAM_BLUE))			client->ps.pm_type = PM_FREEZE;		else			client->ps.pm_type = PM_SPECTATOR;		client->ps.speed = 400;	// faster than normal		// set up for pmove		memset(&pm, 0, sizeof(pm));		pm.ps = &client->ps;		pm.cmd = *ucmd;		pm.tracemask = 0;	// spectators can fly through bodies		pm.trace = trap_Trace;		pm.pointcontents = trap_PointContents;		pm.predict = qtrue;		// perform a pmove		Pmove(&pm);		// save results of pmove		VectorCopy(client->ps.origin, ent->s.origin);		G_TouchTriggers(ent);		trap_UnlinkEntity(ent);	}// JBravo: Lets not allow bots to use any specmode other than FREE	if (ent->r.svFlags & SVF_BOT)		return;	//Slicer - Changing this for aq2 way	// Jump button cycles throught spectators	if (client->sess.spectatorState == SPECTATOR_FOLLOW || client->sess.spectatorState == SPECTATOR_ZCAM) {		if (ucmd->upmove >= 10) {			if (!(client->ps.pm_flags & PMF_JUMP_HELD)) {				client->ps.pm_flags |= PMF_JUMP_HELD;				if (client->sess.spectatorState == SPECTATOR_ZCAM) {					if (client->camera->mode == CAMERA_MODE_SWING)						CameraSwingCycle(ent, 1);				} else					Cmd_FollowCycle_f(ent, 1);			}		} else			client->ps.pm_flags &= ~PMF_JUMP_HELD;	}	client->oldbuttons = client->buttons;	client->buttons = ucmd->buttons;	if (g_gametype.integer == GT_CTF && client->sess.spectatorState == SPECTATOR_FREE &&		(client->sess.savedTeam == TEAM_RED || client->sess.savedTeam == TEAM_BLUE))		return;	// Attack Button cycles throught free view, follow or zcam	if ((ucmd->buttons & BUTTON_ATTACK) && !(client->oldbuttons & BUTTON_ATTACK)) {		if (g_gametype.integer == GT_TEAMPLAY && g_RQ3_limchasecam.integer != 0 && client->sess.referee == 0 ) {			if (!OKtoFollow(clientNum))				return;			if (client->sess.spectatorState != SPECTATOR_FOLLOW) {				client->sess.spectatorState = SPECTATOR_FOLLOW;				client->specMode = SPECTATOR_FOLLOW;				client->ps.pm_flags |= PMF_FOLLOW;				client->ps.stats[STAT_RQ3] &= ~RQ3_ZCAM;			}			return;		} else if (client->sess.spectatorState == SPECTATOR_FREE && OKtoFollow(clientNum)) {			client->sess.spectatorState = SPECTATOR_ZCAM;			client->specMode = SPECTATOR_ZCAM;			client->camera->mode = CAMERA_MODE_SWING;			client->ps.stats[STAT_RQ3] |= RQ3_ZCAM;			client->ps.pm_flags &= ~PMF_FOLLOW;			CameraSwingCycle(ent, 1);			RQ3_SpectatorMode(ent);		} else if (client->sess.spectatorState == SPECTATOR_ZCAM && client->camera->mode == CAMERA_MODE_SWING			   && OKtoFollow(clientNum)) {			client->sess.spectatorState = SPECTATOR_ZCAM;			client->specMode = SPECTATOR_ZCAM;			client->camera->mode = CAMERA_MODE_FLIC;			client->ps.stats[STAT_RQ3] |= RQ3_ZCAM;			client->ps.pm_flags &= ~PMF_FOLLOW;			CameraFlicBegin(ent);			RQ3_SpectatorMode(ent);//.........这里部分代码省略.........
开发者ID:Zekom,项目名称:reaction,代码行数:101,


示例20: ClientThink_real

//.........这里部分代码省略.........	if ((pm.cmd.upmove > 10) &&	    (pm.waterlevel == 0) &&	    ent->s.groundEntityNum != ENTITYNUM_NONE && pm.ps->groundEntityNum == ENTITYNUM_NONE)		bJumping = 1;	// save results of pmove	if (ent->client->ps.eventSequence != oldEventSequence) {		ent->eventTime = level.time;	}	BG_PlayerStateToEntityState(&ent->client->ps, &ent->s, qtrue);	SendPendingPredictableEvents(&ent->client->ps);	if (!(ent->client->ps.eFlags & EF_FIRING)) {		client->fireHeld = qfalse;	// for grapple	}	// use the snapped origin for linking so it matches client predicted versions	VectorCopy(ent->s.pos.trBase, ent->r.currentOrigin);	VectorCopy(pm.mins, ent->r.mins);	VectorCopy(pm.maxs, ent->r.maxs);	ent->waterlevel = pm.waterlevel;	ent->watertype = pm.watertype;	// execute client events	ClientEvents(ent, oldEventSequence);	// link entity now, after any personal teleporters have been used	// JBravo: this call reactivates gibbed players.	if (!ent->client->gibbed)		trap_LinkEntity(ent);	if (!ent->client->noclip) {		G_TouchTriggers(ent);	}	// NOTE: now copy the exact origin over otherwise clients can be snapped into solid	VectorCopy(ent->client->ps.origin, ent->r.currentOrigin);	//test for solid areas in the AAS file	BotTestAAS(ent->r.currentOrigin);	// touch other objects	ClientImpacts(ent, &pm);	//Elder: someone added	if (bJumping)		JumpKick(ent);	// save results of triggers and client events	if (ent->client->ps.eventSequence != oldEventSequence) {		ent->eventTime = level.time;	}	// swap and latch button actions	client->oldbuttons = client->buttons;	client->buttons = ucmd->buttons;	client->latched_buttons |= client->buttons & ~client->oldbuttons;	// check for respawning	// JBravo: Lets make dead players into spectators.	if (client->ps.stats[STAT_HEALTH] <= 0) {		// wait for the attack button to be pressed		if (level.time > client->respawnTime) {			// forcerespawn is to prevent users from waiting out powerups			if (g_forcerespawn.integer > 0 &&			    (level.time - client->respawnTime) > g_forcerespawn.integer * 1000 &&			    g_gametype.integer != GT_TEAMPLAY && g_gametype.integer != GT_CTF) {
开发者ID:Zekom,项目名称:reaction,代码行数:67,


示例21: SV_movestep

//FIXME since we need to test end position contents here, can we avoid doing//it again later in catagorize position?bool SV_movestep(edict_t *ent, vec3_t move, bool relink){    float       dz;    vec3_t      oldorg, neworg, end;    trace_t     trace;    int         i;    float       stepsize;    vec3_t      test;    int         contents;// try the move    VectorCopy(ent->s.origin, oldorg);    VectorAdd(ent->s.origin, move, neworg);// flying monsters don't step up    if (ent->flags & (FL_SWIM | FL_FLY)) {        // try one move with vertical motion, then one without        for (i = 0 ; i < 2 ; i++) {            VectorAdd(ent->s.origin, move, neworg);            if (i == 0 && ent->enemy) {                if (!ent->goalentity)                    ent->goalentity = ent->enemy;                dz = ent->s.origin[2] - ent->goalentity->s.origin[2];                if (ent->goalentity->client) {                    if (dz > 40)                        neworg[2] -= 8;                    if (!((ent->flags & FL_SWIM) && (ent->waterlevel < 2)))                        if (dz < 30)                            neworg[2] += 8;                } else {                    if (dz > 8)                        neworg[2] -= 8;                    else if (dz > 0)                        neworg[2] -= dz;                    else if (dz < -8)                        neworg[2] += 8;                    else                        neworg[2] += dz;                }            }            trace = gi.trace(ent->s.origin, ent->mins, ent->maxs, neworg, ent, MASK_MONSTERSOLID);            // fly monsters don't enter water voluntarily            if (ent->flags & FL_FLY) {                if (!ent->waterlevel) {                    test[0] = trace.endpos[0];                    test[1] = trace.endpos[1];                    test[2] = trace.endpos[2] + ent->mins[2] + 1;                    contents = gi.pointcontents(test);                    if (contents & MASK_WATER)                        return false;                }            }            // swim monsters don't exit water voluntarily            if (ent->flags & FL_SWIM) {                if (ent->waterlevel < 2) {                    test[0] = trace.endpos[0];                    test[1] = trace.endpos[1];                    test[2] = trace.endpos[2] + ent->mins[2] + 1;                    contents = gi.pointcontents(test);                    if (!(contents & MASK_WATER))                        return false;                }            }            if (trace.fraction == 1) {                VectorCopy(trace.endpos, ent->s.origin);                if (relink) {                    gi.linkentity(ent);                    G_TouchTriggers(ent);                }                return true;            }            if (!ent->enemy)                break;        }        return false;    }// push down from a step height above the wished position    if (!(ent->monsterinfo.aiflags & AI_NOSTEP))        stepsize = STEPSIZE;    else        stepsize = 1;    neworg[2] += stepsize;    VectorCopy(neworg, end);    end[2] -= stepsize * 2;    trace = gi.trace(neworg, ent->mins, ent->maxs, end, ent, MASK_MONSTERSOLID);    if (trace.allsolid)        return false;    if (trace.startsolid) {//.........这里部分代码省略.........
开发者ID:AndreyNazarov,项目名称:q2pro,代码行数:101,


示例22: ClientThink_real

//.........这里部分代码省略.........	if (g_smoothClients.integer) {		BG_PlayerStateToEntityStateExtraPolate( &ent->client->ps, &ent->s, ent->client->ps.commandTime, qtrue );	}	else {		BG_PlayerStateToEntityState( &ent->client->ps, &ent->s, qtrue );	}	SendPendingPredictableEvents( &ent->client->ps );	if ( !( ent->client->ps.eFlags & EF_FIRING ) ) {		client->fireHeld = qfalse;		// for grapple	}	// use the snapped origin for linking so it matches client predicted versions	VectorCopy( ent->s.pos.trBase, ent->r.currentOrigin );	VectorCopy (pm.mins, ent->r.mins);	VectorCopy (pm.maxs, ent->r.maxs);	ent->waterlevel = pm.waterlevel;	ent->watertype = pm.watertype;	// execute client events	ClientEvents( ent, oldEventSequence );	if ( pm.useEvent )	{		//TODO: Use//		TryUse( ent );	}	// link entity now, after any personal teleporters have been used	trap_LinkEntity (ent);	if ( !ent->client->noclip ) {		G_TouchTriggers( ent );	}	// NOTE: now copy the exact origin over otherwise clients can be snapped into solid	VectorCopy( ent->client->ps.origin, ent->r.currentOrigin );	//test for solid areas in the AAS file//	BotTestAAS(ent->r.currentOrigin);	// touch other objects	ClientImpacts( ent, &pm );	// save results of triggers and client events	if (ent->client->ps.eventSequence != oldEventSequence) {		ent->eventTime = level.time;	}	// swap and latch button actions	client->oldbuttons = client->buttons;	client->buttons = ucmd->buttons;	client->latched_buttons |= client->buttons & ~client->oldbuttons;	// Did we kick someone in our pmove sequence?	if (client->ps.forceKickFlip)	{		gentity_t *faceKicked = &g_entities[client->ps.forceKickFlip-1];		if (faceKicked && faceKicked->client && (!OnSameTeam(ent, faceKicked) || g_friendlyFire.integer) &&			(!faceKicked->client->ps.duelInProgress || faceKicked->client->ps.duelIndex == ent->s.number) &&			(!ent->client->ps.duelInProgress || ent->client->ps.duelIndex == faceKicked->s.number))		{			if ( faceKicked && faceKicked->client && faceKicked->health && faceKicked->takedamage )			{//push them away and do pain
开发者ID:Boothand,项目名称:jk2mp,代码行数:67,


示例23: SpectatorThink

/*=================SpectatorThink=================*/void SpectatorThink(gentity_t *ent, usercmd_t *ucmd) {	pmove_t   pm;	gclient_t *client;	client = ent->client;	if (client->sess.spectatorState != SPECTATOR_FOLLOW) {		client->ps.pm_type = PM_SPECTATOR;		client->ps.speed   = SPECTATOR_SPEED; // was: 400 // faster than normal		if (client->ps.sprintExertTime) {			client->ps.speed *= 3;  // (SA) allow sprint in free-cam mode		}		// OSP - dead players are frozen too, in a timeout		if (client->ps.pm_flags & PMF_LIMBO) {			client->ps.pm_type = PM_FREEZE;		} else if (client->noclip) {			client->ps.pm_type = PM_NOCLIP;		}		// set up for pmove		memset(&pm, 0, sizeof (pm));		pm.ps            = &client->ps;		pm.pmext         = &client->pmext;		pm.character     = client->pers.character;		pm.cmd           = *ucmd;		pm.tracemask     = MASK_PLAYERSOLID & ~CONTENTS_BODY; // spectators can fly through bodies		pm.trace         = trap_TraceCapsuleNoEnts;		pm.pointcontents = trap_PointContents;		Pmove(&pm);   // JPW NERVE		// Rafael - Activate		// Ridah, made it a latched event (occurs on keydown only)		if (client->latched_buttons & BUTTON_ACTIVATE) {			Cmd_Activate_f(ent);		}		// save results of pmove		VectorCopy(client->ps.origin, ent->s.origin);		G_TouchTriggers(ent);		trap_UnlinkEntity(ent);	}	client->oldbuttons = client->buttons;	client->buttons    = ucmd->buttons;//----(SA)	added	client->oldwbuttons = client->wbuttons;	client->wbuttons    = ucmd->wbuttons;	// attack button cycles through spectators	if ((client->buttons & BUTTON_ATTACK) && !(client->oldbuttons & BUTTON_ATTACK)) {		Cmd_FollowCycle_f(ent, 1);	} else if (		(client->sess.sessionTeam == TEAM_SPECTATOR) &&   // don't let dead team players do free fly		(client->sess.spectatorState == SPECTATOR_FOLLOW) &&		(((client->buttons & BUTTON_ACTIVATE) &&		  !(client->oldbuttons & BUTTON_ACTIVATE)) || ucmd->upmove > 0)) {		// code moved to StopFollowing		StopFollowing(ent);	}}
开发者ID:ETrun,项目名称:ETrun,代码行数:70,


示例24: SV_Physics_NewToss

/*=============SV_Physics_NewTossToss, bounce, and fly movement. When on ground and no velocity, do nothing. With velocity,slide.=============*/void SV_Physics_NewToss (edict_t *ent){	trace_t		trace;	vec3_t		move;//	float		backoff;	edict_t		*slave;	qboolean	wasinwater;	qboolean	isinwater;	qboolean	wasonground;	float		speed, newspeed;	vec3_t		old_origin;//	float		firstmove;//	int			mask;	// regular thinking	SV_RunThink (ent);	// if not a team captain, so movement will be handled elsewhere	if ( ent->flags & FL_TEAMSLAVE)		return;	if (ent->groundentity)		wasonground = true;	else		wasonground = false;		wasinwater = ent->waterlevel;	// find out what we're sitting on.	VectorCopy (ent->s.origin, move);	move[2] -= 0.25;	trace = gi.trace (ent->s.origin, ent->mins, ent->maxs, move, ent, ent->clipmask);	if(ent->groundentity && ent->groundentity->inuse)		ent->groundentity = trace.ent;	else		ent->groundentity = NULL;	// if we're sitting on something flat and have no velocity of our own, return.	if (ent->groundentity && (trace.plane.normal[2] == 1.0) && 		!ent->velocity[0] && !ent->velocity[1] && !ent->velocity[2])	{		return;	}	// store the old origin	VectorCopy (ent->s.origin, old_origin);	SV_CheckVelocity (ent);	// add gravity	SV_AddGravity (ent);	if (ent->avelocity[0] || ent->avelocity[1] || ent->avelocity[2])		SV_AddRotationalFriction (ent);	// add friction	speed = VectorLength(ent->velocity);	if(ent->waterlevel)				// friction for water movement	{		newspeed = speed - (sv_waterfriction * 6 * ent->waterlevel);		if (newspeed < 0)			newspeed = 0;		newspeed /= speed;		VectorScale (ent->velocity, newspeed, ent->velocity);	}	else if (!ent->groundentity)	// friction for air movement	{		newspeed = speed - ((sv_friction));		if (newspeed < 0)			newspeed = 0;		newspeed /= speed;		VectorScale (ent->velocity, newspeed, ent->velocity);	}	else	// use ground friction	{		newspeed = speed - (sv_friction * 6);		if (newspeed < 0)			newspeed = 0;		newspeed /= speed;		VectorScale (ent->velocity, newspeed, ent->velocity);	}	SV_FlyMove (ent, FRAMETIME, ent->clipmask);	gi.linkentity (ent);	G_TouchTriggers (ent);// check for water transition	wasinwater = (ent->watertype & MASK_WATER);	ent->watertype = gi.pointcontents (ent->s.origin);	isinwater = ent->watertype & MASK_WATER;//.........这里部分代码省略.........
开发者ID:ajbonner,项目名称:yet-another-quake2-fork,代码行数:101,


示例25: ClientThink_real

//.........这里部分代码省略.........	// save results of pmove	if (ent->client->ps.eventSequence != oldEventSequence) {		ent->eventTime   = level.time;		ent->r.eventTime = level.time;	}	// Ridah, fixes jittery zombie movement	if (g_smoothClients.integer) {		BG_PlayerStateToEntityStateExtraPolate(&ent->client->ps, &ent->s, level.time, qfalse);	} else {		BG_PlayerStateToEntityState(&ent->client->ps, &ent->s, qfalse);	}	if (!(ent->client->ps.eFlags & EF_FIRING)) {		client->fireHeld = qfalse;      // for grapple	}//	// use the snapped origin for linking so it matches client predicted versions	VectorCopy(ent->s.pos.trBase, ent->r.currentOrigin);	VectorCopy(pm.mins, ent->r.mins);	VectorCopy(pm.maxs, ent->r.maxs);	ent->waterlevel = pm.waterlevel;	ent->watertype  = pm.watertype;	// execute client events	ClientEvents(ent, oldEventSequence);	// link entity now, after any personal teleporters have been used	trap_LinkEntity(ent);	if (!ent->client->noclip) {		G_TouchTriggers(ent);	}	// NOTE: now copy the exact origin over otherwise clients can be snapped into solid	VectorCopy(ent->client->ps.origin, ent->r.currentOrigin);	// touch other objects	ClientImpacts(ent, &pm);	// save results of triggers and client events	if (ent->client->ps.eventSequence != oldEventSequence) {		ent->eventTime = level.time;	}	// swap and latch button actions	client->oldbuttons      = client->buttons;	client->buttons         = ucmd->buttons;	client->latched_buttons = client->buttons & ~client->oldbuttons;	//----(SA)	added	client->oldwbuttons      = client->wbuttons;	client->wbuttons         = ucmd->wbuttons;	client->latched_wbuttons = client->wbuttons & ~client->oldwbuttons;	// suburb, return here for noclippers in spec to avoid following checks	if (client->sess.sessionTeam == TEAM_SPECTATOR && client->noclip) {		return;	}	// Rafael - Activate	// Ridah, made it a latched event (occurs on keydown only)	if (client->latched_buttons & BUTTON_ACTIVATE) {		Cmd_Activate_f(ent);
开发者ID:ETrun,项目名称:ETrun,代码行数:67,


示例26: SV_Push

//.........这里部分代码省略.........			continue;		if (check->movetype == MOVETYPE_PUSH		|| check->movetype == MOVETYPE_STOP		|| check->movetype == MOVETYPE_NONE		|| check->movetype == MOVETYPE_NOCLIP)			continue;		if (!check->area.prev)			continue;		// not linked in anywhere	// if the entity is standing on the pusher, it will definitely be moved		if (check->groundentity != pusher)		{			// see if the ent needs to be tested			if ( check->absmin[0] >= maxs[0]			|| check->absmin[1] >= maxs[1]			|| check->absmin[2] >= maxs[2]			|| check->absmax[0] <= mins[0]			|| check->absmax[1] <= mins[1]			|| check->absmax[2] <= mins[2] )				continue;			// see if the ent's bbox is inside the pusher's final position			if (!SV_TestEntityPosition (check))				continue;		}		if ((pusher->movetype == MOVETYPE_PUSH) || (check->groundentity == pusher))		{			// move this entity			pushed_p->ent = check;			VectorCopy (check->s.origin, pushed_p->origin);			VectorCopy (check->s.angles, pushed_p->angles);			pushed_p++;			// try moving the contacted entity 			VectorAdd (check->s.origin, move, check->s.origin);			if (check->client)			{	// FIXME: doesn't rotate monsters?				check->client->ps.pmove.delta_angles[YAW] += amove[YAW];			}			// figure movement due to the pusher's amove			VectorSubtract (check->s.origin, pusher->s.origin, org);			org2[0] = DotProduct (org, forward);			org2[1] = -DotProduct (org, right);			org2[2] = DotProduct (org, up);			VectorSubtract (org2, org, move2);			VectorAdd (check->s.origin, move2, check->s.origin);			// may have pushed them off an edge			if (check->groundentity != pusher)				check->groundentity = NULL;			block = SV_TestEntityPosition (check);			if (!block)			{	// pushed ok				gi.linkentity (check);				// impact?				continue;			}			// if it is ok to leave in the old position, do it			// this is only relevent for riding entities, not pushed			// FIXME: this doesn't acount for rotation			VectorSubtract (check->s.origin, move, check->s.origin);			block = SV_TestEntityPosition (check);			if (!block)			{				pushed_p--;				continue;			}		}				// save off the obstacle so we can call the block function		obstacle = check;		// move back any entities we already moved		// go backwards, so if the same entity was pushed		// twice, it goes back to the original position		for (p=pushed_p-1 ; p>=pushed ; p--)		{			VectorCopy (p->origin, p->ent->s.origin);			VectorCopy (p->angles, p->ent->s.angles);			if (p->ent->client)			{				p->ent->client->ps.pmove.delta_angles[YAW] = p->deltayaw;			}			gi.linkentity (p->ent);		}		return false;	}//FIXME: is there a better way to handle this?	// see if anything we moved has touched a trigger	for (p=pushed_p-1 ; p>=pushed ; p--)		G_TouchTriggers (p->ent);	return true;}
开发者ID:ajbonner,项目名称:yet-another-quake2-fork,代码行数:101,


示例27: SV_Physics_Step

//.........这里部分代码省略.........				/*&&	(land_node->node_type & NODE_LANDING)*/)			{	// if climbing ladder, and we're reached the landing position, stop				// Ridah, 8-jun-99, make sure dog's don't climb ladders				if (!ent->gender)				{					goto abort_climb;				}				if (ent->s.origin[2] > land_node->origin[2])				{//gi.dprintf( "-> end of climb/n" );//					VectorSubtract( land_node->origin, ent->s.origin, ent->velocity );					AngleVectors( ent->s.angles, ent->velocity, NULL, NULL );					ent->velocity[2] = 0;					VectorNormalize( ent->velocity );					VectorScale( ent->velocity, 96, ent->velocity );					ent->velocity[2] = 200;					ent->flags &= ~FL_FLY;					ent->nav_data.goal_index = 0;		// look for a new node					ent->nav_data.cache_node = -1;					if (ent->cast_info.move_end_climb)						ent->cast_info.currentmove = ent->cast_info.move_end_climb;				}				else				{					trace_t tr;					vec3_t	end, goal_vec;					VectorSubtract( land_node->origin, ent->s.origin, goal_vec );					ent->velocity[0] = goal_vec[0];					ent->velocity[1] = goal_vec[1];					ent->velocity[2] = 120;					// if another character is above us, abort					VectorCopy( ent->s.origin, end );					end[2] += 128;					tr = gi.trace( ent->s.origin, ent->mins, ent->maxs, end, ent, MASK_PLAYERSOLID | MASK_MONSTERSOLID );										if ((tr.fraction < 1) && (tr.ent->svflags & SVF_MONSTER))					{abort_climb:						AngleVectors( ent->s.angles, goal_vec, NULL, NULL );						VectorScale( goal_vec, -64, ent->velocity );						ent->flags &= ~FL_FLY;						ent->nav_data.goal_index = 0;						if (ent->cast_info.move_end_climb)						{							ent->cast_info.currentmove = ent->cast_info.move_end_climb;						}						else if (ent->cast_info.move_jump)						{							ent->cast_info.currentmove = ent->cast_info.move_jump;						}					}					else if (ent->s.origin[2] > (land_node->origin[2] - 48))					{	// we're near the top, stopping climbing anim//gi.dprintf( "near end of climb/n" );						if (ent->cast_info.move_end_climb)							ent->cast_info.currentmove = ent->cast_info.move_end_climb;						// add some forward momentum						AngleVectors( ent->s.angles, goal_vec, NULL, NULL );						VectorMA( ent->velocity, 64, goal_vec, ent->velocity );					}				}			}		}exit_vel_check:		// END:		Xatrix/Ridah		gi.linkentity (ent);		G_TouchTriggers (ent);// Note to Ryan: we can't use this because we are playing specific sounds elsewhere/*		if (ent->groundentity)			if (!wasonground)				if (hitsound)					// BEGIN:	Xatrix/Ridah/Navigator/03-apr-1998					if (!(ent->cast_info.move_run))					// END:		Xatrix/Ridah/Navigator/03-apr-1998						gi.sound (ent, 0, gi.soundindex("world/land.wav"), 1, 1, 0);*/	}// regular thinking	SV_RunThink (ent);}
开发者ID:hypov8,项目名称:kingpin_mm1.5,代码行数:101,


示例28: ClientThink

//.........这里部分代码省略.........		VectorCopy (pm.mins, ent->mins);		VectorCopy (pm.maxs, ent->maxs);		client->resp.cmd_angles[0] = SHORT2ANGLE(ucmd->angles[0]);		client->resp.cmd_angles[1] = SHORT2ANGLE(ucmd->angles[1]);		client->resp.cmd_angles[2] = SHORT2ANGLE(ucmd->angles[2]);		if (ent->groundentity && !pm.groundentity && (pm.cmd.upmove >= 10) && (pm.waterlevel == 0))		{			gi.sound(ent, CHAN_VOICE, gi.soundindex("*jump1.wav"), 1, ATTN_NORM, 0);			PlayerNoise(ent, ent->s.origin, PNOISE_SELF);		}		ent->viewheight = pm.viewheight;		ent->waterlevel = pm.waterlevel;		ent->watertype = pm.watertype;		ent->groundentity = pm.groundentity;		if (pm.groundentity)			ent->groundentity_linkcount = pm.groundentity->linkcount;		if (ent->deadflag)		{			client->ps.viewangles[ROLL] = 40;			client->ps.viewangles[PITCH] = -15;			client->ps.viewangles[YAW] = client->killer_yaw;		}		else		{			VectorCopy (pm.viewangles, client->v_angle);			VectorCopy (pm.viewangles, client->ps.viewangles);		}		gi.linkentity (ent);		if (ent->movetype != MOVETYPE_NOCLIP)			G_TouchTriggers (ent);		// touch other objects		for (i=0 ; i<pm.numtouch ; i++)		{			other = pm.touchents[i];			for (j=0 ; j<i ; j++)				if (pm.touchents[j] == other)					break;			if (j != i)				continue;	// duplicated			if (!other->touch)				continue;			other->touch (other, ent, NULL, NULL);		}	}	client->oldbuttons = client->buttons;	client->buttons = ucmd->buttons;	client->latched_buttons |= client->buttons & ~client->oldbuttons;	// save light level the player is standing on for	// monster sighting AI	ent->light_level = ucmd->lightlevel;	// fire weapon from final position if needed	if (client->latched_buttons & BUTTON_ATTACK)	{		if (client->resp.spectator) {			client->latched_buttons = 0;			if (client->chase_target) {				client->chase_target = NULL;				client->ps.pmove.pm_flags &= ~PMF_NO_PREDICTION;			} else				GetChaseTarget(ent);		} else if (!client->weapon_thunk) {			client->weapon_thunk = true;			Think_Weapon (ent);		}	}	if (client->resp.spectator) {		if (ucmd->upmove >= 10) {			if (!(client->ps.pmove.pm_flags & PMF_JUMP_HELD)) {				client->ps.pmove.pm_flags |= PMF_JUMP_HELD;				if (client->chase_target)					ChaseNext(ent);				else					GetChaseTarget(ent);			}		} else			client->ps.pmove.pm_flags &= ~PMF_JUMP_HELD;	}	// update chase cam if being followed	for (i = 1; i <= maxclients->value; i++) {		other = g_edicts + i;		if (other->inuse && other->client->chase_target == ent)			UpdateChaseCam(other);	}}
开发者ID:Bubbasacs,项目名称:MidtermMod,代码行数:101,


示例29: ClientThink_real

//.........这里部分代码省略.........		ent->r.eventTime = level.time;	}	// Ridah, fixes jittery zombie movement	if ( g_smoothClients.integer ) {		BG_PlayerStateToEntityStateExtraPolate( &ent->client->ps, &ent->s, ent->client->ps.commandTime, qtrue );	} else {		BG_PlayerStateToEntityState( &ent->client->ps, &ent->s, qtrue );	}	if ( !( ent->client->ps.eFlags & EF_FIRING ) ) {		client->fireHeld = qfalse;      // for grapple	}////	// use the precise origin for linking//	VectorCopy( ent->client->ps.origin, ent->r.currentOrigin );////	// use the snapped origin for linking so it matches client predicted versions	VectorCopy( ent->s.pos.trBase, ent->r.currentOrigin );	VectorCopy( pm.mins, ent->r.mins );	VectorCopy( pm.maxs, ent->r.maxs );	ent->waterlevel = pm.waterlevel;	ent->watertype = pm.watertype;	// execute client events	ClientEvents( ent, oldEventSequence );	// link entity now, after any personal teleporters have been used	trap_LinkEntity( ent );	if ( !ent->client->noclip ) {		G_TouchTriggers( ent );	}	// NOTE: now copy the exact origin over otherwise clients can be snapped into solid	VectorCopy( ent->client->ps.origin, ent->r.currentOrigin );	// store the client's current position for antilag traces	G_StoreClientPosition( ent );	// touch other objects	ClientImpacts( ent, &pm );	// save results of triggers and client events	if ( ent->client->ps.eventSequence != oldEventSequence ) {		ent->eventTime = level.time;	}	// swap and latch button actions	client->oldbuttons = client->buttons;	client->buttons = ucmd->buttons;	client->latched_buttons = client->buttons & ~client->oldbuttons;//	client->latched_buttons |= client->buttons & ~client->oldbuttons;	// FIXME:? (SA) MP method (causes problems for us.  activate 'sticks')	//----(SA)	added	client->oldwbuttons = client->wbuttons;	client->wbuttons = ucmd->wbuttons;	client->latched_wbuttons = client->wbuttons & ~client->oldwbuttons;//	client->latched_wbuttons |= client->wbuttons & ~client->oldwbuttons;	// FIXME:? (SA) MP method	// Rafael - Activate	// Ridah, made it a latched event (occurs on keydown only)	if ( client->latched_buttons & BUTTON_ACTIVATE ) {		Cmd_Activate_f( ent );
开发者ID:chegestar,项目名称:omni-bot,代码行数:67,



注:本文中的G_TouchTriggers函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ G_UNLIKELY函数代码示例
C++ G_TempEntity函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。