亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? vehicle.cpp

?? this keik game source
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
void Vehicle::DriverUse
	(
	Event *ev
	)

	{
	Event *event;
	Entity *other;	
   Sentient *sent;

	other = ev->GetEntity( 1 );
	if ( !other || !other->isSubclassOf( Sentient ) )
		{
		return;
		}

   sent = ( Sentient * )other;
	if ( driver )
		{
      int height;
      int ang;
      Vector angles;
      Vector forward;
      Vector pos;
      float ofs;
      trace_t trace;

		if ( other != driver )
			{
			return;
			}

      if ( locked )
         return;

      //
      // place the driver on the ground
      //
      ofs = size.length() * 0.5f;
      for ( height = 0; height < 100; height += 16 )
         {
         for ( ang = 0; ang < 360; ang += 30 )
            {
            angles[ 1 ] = driver->worldangles[ 1 ] + ang + 90;
         	angles.AngleVectors( &forward, NULL, NULL );
            pos = worldorigin + (forward * ofs);
            pos[2] += height;
      		trace = G_Trace( pos, driver->mins, driver->maxs, pos, NULL, MASK_PLAYERSOLID, "Vehicle::DriverUse 1" );
            if ( !trace.allsolid )
               {
               Vector end;

               end = pos;
               end[ 2 ] -= 128;
         		trace = G_Trace( pos, driver->mins, driver->maxs, end, NULL, MASK_PLAYERSOLID, "Vehicle::DriverUse 2" );
               if ( trace.fraction < 1.0f )
                  {
                  driver->setOrigin( pos );
                  goto foundpos;
                  }
               }
            }
         }
      return;

foundpos:

		turnimpulse = 0;
		moveimpulse = 0;
		jumpimpulse = 0;

		//driver->unbind();
		event = new Event( EV_Vehicle_Exit );
		event->AddEntity( this );
		driver->ProcessEvent( event );
      if ( hasweapon )
         {
         driver->takeWeapon( weaponName.c_str() );
         }
      if ( drivable )
         {
         edict->s.sound = 0;
         RandomSound( "snd_dooropen", 1, CHAN_BODY );
         RandomSound( "snd_stop", 1, CHAN_VOICE );
         driver->setSolidType( SOLID_BBOX );
         }

		driver = NULL;
      //if ( drivable )
   	//   setMoveType( MOVETYPE_NONE );
		}
	else
		{
		driver = ( Sentient * )other;
		lastdriver = driver;

      if ( drivable )
   	   setMoveType( MOVETYPE_VEHICLE );
      if ( hasweapon )
         {
         Weapon *weapon;

         weapon = driver->giveWeapon( weaponName.c_str() );
         if ( weapon )
            {
            driver->ForceChangeWeapon( weapon );
            }
         else
            {
            return;
            }
         }
      if ( drivable )
         {
         RandomSound( "snd_doorclose", 1, CHAN_BODY );
         RandomSound( "snd_start", 1, CHAN_VOICE );
         driver->setSolidType( SOLID_NOT );
         }

		event = new Event( EV_Vehicle_Enter );
		event->AddEntity( this );
      if ( driveranim.length() )
         event->AddString( driveranim );
		driver->ProcessEvent( event );

		//driver->bind( this );
		//offset = other->origin;
		offset = other->worldorigin - worldorigin;

		flags	|= FL_POSTTHINK;
      SetDriverAngles( worldangles + seatangles );
		}
	}

qboolean Vehicle::Drive
	(
	usercmd_t *ucmd
	)

	{
	Vector i, j, k;

	if ( !driver || !driver->isClient() )
		{
		return false;
		}

   if ( !drivable )
      {
   	driver->client->ps.pmove.pm_type = PM_INVEHICLE;
      ucmd->forwardmove = 0;
      ucmd->sidemove = 0;
      return false;
      }

	driver->client->ps.pmove.pm_type = PM_LOCKVIEW;
   driver->client->ps.pmove.pm_flags |= PMF_NO_PREDICTION;

	moveimpulse = ( ( float )ucmd->forwardmove ) * 3;
	turnimpulse = ( ( float )-ucmd->sidemove ) * 0.5;
	jumpimpulse = ( ( float )ucmd->upmove * gravity ) / 350;
   if ( ( jumpimpulse < 0 ) || ( !jumpable ) )
      jumpimpulse = 0;

	turnimpulse += 2*angledist( SHORT2ANGLE( ucmd->angles[ 1 ] ) - driver->client->resp.cmd_angles[ 1 ] );

	return true;
	}

void Vehicle::Postthink
	(
	void
	)

	{
	float			turn;
	Vector		i, j, k;
   int         index;
   trace_t     trace;
   Vector      normalsum;
   int         numnormals;
   Vector      temp;
   Vector      pitch;
   Vector      roll;
	VehicleBase *v;
	VehicleBase *last;
   float       drivespeed;


   if ( drivable )
      {
      currentspeed = moveimpulse / 10;

	   turnangle = turnangle * 0.25f + turnimpulse;
	   if ( turnangle > maxturnrate )
		   {
		   turnangle = maxturnrate;
		   }
	   else if ( turnangle < -maxturnrate )
		   {
		   turnangle = -maxturnrate;
		   }
	   else if ( fabs( turnangle ) < 2 )
		   {
		   turnangle = 0;
		   }
      temp[ PITCH ] = 0;
      temp[ YAW ] = angles[ YAW ];
      temp[ ROLL ] = 0;
      temp.AngleVectors( &i, &j, &k );
      j = vec_zero - j;

      //
      // figure out what our orientation is
      //
      numnormals = 0;
      for ( index = 0; index < 4; index++ )
         {
         Vector start, end;
         Vector boxoffset;

         boxoffset = Corners[ index ];
	      start = worldorigin + i * boxoffset[0] + j * boxoffset[1] + k * boxoffset[2];
         end = start;
         end[ 2 ] -= maxtracedist;
         trace = G_Trace( start, vec_zero, vec_zero, end, NULL, MASK_SOLID, "Vehicle::PostThink Corners" );
         if ( trace.fraction != 1.0f && !trace.startsolid )
            {
            normalsum += Vector( trace.plane.normal );
            numnormals++;
            }
         }
      if ( numnormals > 1 )
         {
         temp = normalsum * ( 1.0f/ numnormals );
         temp.normalize();
         i = temp.CrossProduct( temp, j );
         pitch = i;
         // determine pitch
         angles[ 0 ] = (pitch.toPitch());
         }

	   turn = turnangle * ( 1.0f / 200.0f );

      if ( groundentity )
         {
         float dot;
         Vector newvel;
         Vector flatvel;

         velocity[ 0 ] *= 0.925f;
         velocity[ 1 ] *= 0.925f;
         flatvel = Vector( orientation[ 0 ] );
         velocity += flatvel * currentspeed;
         flatvel[ 2 ] = 0;
         dot = velocity * flatvel;
	      if ( dot > speed )
		      {
		      dot = speed;
		      }
	      else if ( dot < -speed )
		      {
		      dot = -speed;
		      }
	      else if ( fabs( dot ) < 20.0f )
		      {
		      dot = 0;
		      }
         newvel = flatvel * dot;
         velocity[ 0 ] = newvel[ 0 ];
         velocity[ 1 ] = newvel[ 1 ];
         velocity[ 2 ] += dot * jumpimpulse;

		   avelocity *= 0.05;
         if ( steerinplace )
            {
            if ( dot < 350 )
               dot = 350;
  		      avelocity.y += turn * dot;
            }
         else
            {
  		      avelocity.y += turn * dot;
            }
         }
      else
         {
		   avelocity *= 0.1;
		   }
	   angles += avelocity * FRAMETIME;
	   setAngles( angles );
      }
   drivespeed = velocity * Vector( orientation[ 0 ] );

   if ( drivable && driver )
      {
      Event * event;

      event = new Event( EV_RandomEntitySound );
      if ( currentspeed > 0 )
         event->AddString( "snd_forward" );
      else if ( currentspeed < 0 )
         event->AddString( "snd_backward" );
      else
         event->AddString( "snd_idle" );
      ProcessEvent( event );
      }
	i = Vector( orientation[ 0 ] );
	j = Vector( orientation[ 1 ] );
	k = Vector( orientation[ 2 ] );

	if ( driver )
		{
      Player * player;

      player = ( Player * )( Sentient * )driver;
		player->setOrigin( worldorigin + i * driveroffset[0] + j * driveroffset[1] + k * driveroffset[2] );
      if ( drivable )
         {
         player->velocity = vec_zero;
         player->setAngles( angles );
         player->v_angle = angles;
         player->v_angle[ PITCH ] = player->v_angle[ PITCH ];
         }
		}

	last = this;
	while( last->vlink )
		{
		v = last->vlink;
		v->setOrigin( worldorigin + i * v->offset.x + j * v->offset.y + k * v->offset.z );
		v->avelocity = avelocity;
		v->velocity = velocity;
		v->angles[ ROLL ] = angles[ ROLL ];
		v->angles[ YAW ] = angles[ YAW ];
		v->angles[ PITCH ] = (int)( v->angles[ PITCH ] + (drivespeed/4) ) % 360;

		if ( v->isSubclassOf( FrontWheels ) )
			{
			v->angles += Vector( 0, turnangle, 0 );
			}
		v->setAngles( v->angles );

		last = v;
		}

   CheckWater();
   WorldEffects();

   // save off last origin
   last_origin = worldorigin;

	if ( !driver && !velocity.length() && groundentity && !( watertype & CONTENTS_LAVA ) )
		{
		flags &= ~FL_POSTTHINK;
      if ( drivable )
   	   setMoveType( MOVETYPE_NONE );
		}
   }

void Vehicle::VehicleTouched
	(
	Event *ev
	)

	{
	Entity	*other;
	float		speed;
   Vector   delta;
	Vector	dir;

 	other = ev->GetEntity( 1 );
	if ( other == driver )
		{
		return;
		}

   if ( other == world )
      {
      return;
      }

   if ( drivable && !driver )
      {
      return;
      }

   delta = worldorigin - last_origin;
	speed = delta.length();
	if ( speed > 2 )
		{
      RandomGlobalSound( "vehicle_crash" );
		dir = delta * ( 1 / speed );
		other->Damage( this, lastdriver, speed * 8, worldorigin, dir, vec_zero, speed*15, 0, MOD_VEHICLE, -1, -1, 1.0f );
		}

	}

void Vehicle::VehicleBlocked
	(
	Event *ev
	)

	{
	Entity	*other;
	float		speed;
   float    damage;
   Vector   delta;
   Vector   newvel;
	Vector	dir;

   return;
   if ( !velocity[0] && !velocity[1] )
      return;

	other = ev->GetEntity( 1 );
	if ( other == driver )
		{
		return;
		}
   if ( other->isSubclassOf( VehicleBase ) )
      {
      delta = other->worldorigin - worldorigin;
      delta.normalize();

      newvel = vec_zero - ( velocity) + ( other->velocity * 0.25 );
      if ( newvel * delta < 0 )
         {
         velocity = newvel;
         delta = velocity - other->velocity;
         damage = delta.length()/4;
         }
      else
         {
         return;
         }
      }
   else if ( ( velocity.length() < 350 ) )
      {
      other->velocity += velocity*1.25f;
      other->velocity[ 2 ] += 100; 
      damage = velocity.length()/4;
      }
   else
      {
      damage = other->health + 1000;
      }

	// Gib 'em outright
	speed = fabs( velocity.length() );
	dir = velocity * ( 1 / speed );
 	other->Damage( this, lastdriver, damage, worldorigin, dir, vec_zero, speed, 0, MOD_VEHICLE, -1, -1, 1.0f );
   } 

Sentient *Vehicle::Driver
	(
	void
	)

	{
	return driver;
	}

qboolean Vehicle::IsDrivable
	(
	void
	)

	{
	return drivable;
	}

void Vehicle::SetSpeed
	(
	Event *ev
	)
   {
   speed = ev->GetFloat( 1 );
   }

void Vehicle::SetTurnRate
	(
	Event *ev
	)
   {
   maxturnrate = ev->GetFloat( 1 );
   }

float Vehicle::SetDriverPitch
	(
	float pitch
	)
   {
   return 0;
   }


CLASS_DECLARATION( Vehicle, DrivableVehicle, "script_drivablevehicle" );

ResponseDef DrivableVehicle::Responses[] =
	{
		{ &EV_Damage,				( Response )Entity::DamageEvent },
		{ &EV_Killed,				( Response )DrivableVehicle::Killed },
		{ NULL, NULL }
	};

DrivableVehicle::DrivableVehicle()
	{
   drivable = true;
   flags |= FL_SPARKS|FL_DIE_TESSELATE|FL_DIE_EXPLODE|FL_DARKEN;
	}

void DrivableVehicle::Killed(Event *ev)
   {
   Entity * ent;
   Entity * attacker;
   Vector dir;
   Event * event;
   const char * name;
   int num;
	VehicleBase *last;

   takedamage = DAMAGE_NO;
   setSolidType( SOLID_NOT );
	hideModel();

	attacker		= ev->GetEntity( 1 );

//
// kill the driver
//
   if ( driver )
      {
      Vector dir;
      SentientPtr sent;
      Event * event;

      velocity = vec_zero;
      sent = driver;
      event = new Event( EV_Use );
      event->AddEntity( sent );
      ProcessEvent( event );
      dir = sent->worldorigin - worldorigin;
      dir[ 2 ] += 64;
      dir.normalize();
    	sent->Damage( this, this, sent->health*2, worldorigin, dir, vec_zero, 50, 0, MOD_VEHICLE, -1, -1, 1.0f );
      }

   if (flags & FL_DIE_TESSELATE)
      {
      dir = worldorigin - attacker->worldorigin;
      TesselateModel
         (
         this,
         tess_min_size,
         tess_max_size,
         dir,
         ev->GetInteger( 2 ),
         tess_percentage,
         tess_thickness,
         vec3_origin
         );
		ProcessEvent( EV_BreakingSound );
      }

   if (flags & FL_DIE_EXPLODE)
      {
	   CreateExplosion( worldorigin, 150*edict->s.scale, edict->s.scale * 2, true, this, this, this );
      }

   if (flags & FL_DIE_GIBS)
      {
      setSolidType( SOLID_NOT );
      hideModel();

      CreateGibs( this, -150, edict->s.scale, 3 );
      }
//
// kill all my wheels
//
	last = this;
	while( last->vlink )
		{
		last->vlink->PostEvent( EV_Remove, 0 );
		last = last->vlink;
		}


//
// kill the killtargets
//
	name = KillTarget();
	if ( name && strcmp( name, "" ) )
		{
		num = 0;
		do
			{
			num = G_FindTarget( num, name );
			if ( !num )
				{
				break;
				}

			ent = G_GetEntity( num );
			ent->PostEvent( EV_Remove, 0 );
			} 
		while ( 1 );
		}
		
//
// fire targets
//
	name = Target();
	if ( name && strcmp( name, "" ) )
		{
		num = 0;
		do
			{
			num = G_FindTarget( num, name );
			if ( !num )
				{
				break;
				}

			ent = G_GetEntity( num );
		
			event = new Event( EV_Activate );
			event->AddEntity( attacker );
			ent->ProcessEvent( event );
			}
		while ( 1 );
		}

   PostEvent( EV_Remove, 0 );
   }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人精品影院| 久久亚洲综合色一区二区三区| 日韩精品每日更新| 欧美国产97人人爽人人喊| 色婷婷综合久久久久中文 | 一二三区精品视频| 久久蜜臀精品av| 欧美日韩成人在线一区| 白白色 亚洲乱淫| 久国产精品韩国三级视频| 综合久久一区二区三区| 久久婷婷久久一区二区三区| 欧美丝袜丝交足nylons图片| 国产一区二区三区不卡在线观看| 一区二区三区四区高清精品免费观看 | 亚洲一区二区三区四区在线观看 | 国产精品久久久一区麻豆最新章节| 成人黄色综合网站| 日本欧美一区二区三区| 国产欧美一区二区在线观看| 欧美日韩国产精选| 91网上在线视频| 蜜臀av性久久久久蜜臀av麻豆| 国产精品日日摸夜夜摸av| 欧美v日韩v国产v| 欧美日韩激情一区二区| 色狠狠一区二区| 91丝袜美腿高跟国产极品老师 | 久国产精品韩国三级视频| 亚洲国产日韩精品| 亚洲视频免费观看| 亚洲欧美自拍偷拍色图| 久久先锋影音av鲁色资源网| 日韩视频一区在线观看| 色婷婷一区二区| 99riav久久精品riav| 欧美三级一区二区| 欧美区视频在线观看| 欧美一级片在线| 欧美成人精品高清在线播放| 91精品国产综合久久香蕉麻豆| 欧美体内she精高潮| 欧美精品一卡二卡| 精品国产亚洲在线| 久久伊99综合婷婷久久伊| 久久久91精品国产一区二区三区| 久久一留热品黄| 国产精品午夜电影| 一区二区三区日韩| 午夜亚洲国产au精品一区二区| 一区二区三区中文字幕| 日韩国产欧美在线播放| 国产在线麻豆精品观看| 不卡视频一二三四| 欧美性受xxxx| 久久久综合精品| 亚洲综合色视频| 国产尤物一区二区| 91久久精品网| 久久精品人人做人人爽人人| 中文字幕色av一区二区三区| 天天影视涩香欲综合网| 国产成人在线视频网站| 在线免费观看日本欧美| 久久综合狠狠综合| 婷婷国产v国产偷v亚洲高清| 国精品**一区二区三区在线蜜桃| 色婷婷一区二区三区四区| 久久色中文字幕| 久久99精品视频| 在线观看区一区二| 国产精品国产三级国产三级人妇| 日韩国产欧美视频| 欧美色图激情小说| 亚洲特级片在线| 国产iv一区二区三区| 欧美日韩第一区日日骚| 亚洲精选视频在线| 91网页版在线| 亚洲伦理在线精品| av电影一区二区| 中文字幕亚洲欧美在线不卡| 国产精品18久久久久| 精品欧美一区二区久久| 日本网站在线观看一区二区三区 | 成人免费不卡视频| 在线综合+亚洲+欧美中文字幕| 一区二区三区视频在线观看| 99精品视频免费在线观看| 国产精品久久久久久亚洲毛片| 国产乱码字幕精品高清av| 精品久久久久久无| 麻豆成人综合网| 久久久久97国产精华液好用吗| 久久99精品一区二区三区三区| 日韩欧美国产wwwww| 国内精品国产成人| 日本一区二区三区视频视频| 成a人片亚洲日本久久| 亚洲精品成人a在线观看| 99久久精品国产导航| 欧美极品aⅴ影院| jlzzjlzz亚洲日本少妇| 一区二区在线看| 精品国产成人在线影院| 国产成人免费视频网站高清观看视频| 国产欧美日韩激情| 色老头久久综合| 亚洲主播在线观看| 久久蜜桃一区二区| 欧美色精品天天在线观看视频| 午夜伊人狠狠久久| 国产精品色在线| 欧美一级艳片视频免费观看| 成人综合婷婷国产精品久久蜜臀 | 国产精品亚洲午夜一区二区三区| 国产精品久久久久桃色tv| 在线免费观看一区| 波多野结衣中文字幕一区 | 亚洲国产精品欧美一二99| ww久久中文字幕| 欧美高清dvd| 色综合欧美在线| 99久久免费国产| 国产精品一区久久久久| 蜜臀av性久久久久蜜臀av麻豆| 亚洲欧美成人一区二区三区| 欧美日韩大陆在线| 粉嫩一区二区三区在线看| 久久精品久久久精品美女| 亚洲成人av一区二区三区| 亚洲男人的天堂在线aⅴ视频| 国产视频一区在线播放| 精品国产污网站| 日韩一区二区视频| 欧美日韩一二区| 欧美三区在线视频| 欧美美女bb生活片| 欧美日韩精品二区第二页| 欧美亚洲尤物久久| 在线播放欧美女士性生活| 国产精品久线在线观看| 亚洲愉拍自拍另类高清精品| 成人一级视频在线观看| 日韩高清不卡在线| 日韩一级成人av| 国产喷白浆一区二区三区| 亚洲一区二区三区四区五区中文 | 香蕉影视欧美成人| 一本大道久久a久久综合婷婷| 亚洲男人电影天堂| 欧美美女黄视频| 日本欧美韩国一区三区| 久久日韩精品一区二区五区| 国产成人午夜99999| 精品国产乱码久久久久久久 | 91丨porny丨国产入口| 国产午夜亚洲精品理论片色戒| 99久久精品国产观看| 亚洲1区2区3区视频| 欧美一区二区美女| 国产成人精品三级| 亚洲综合激情小说| 精品1区2区在线观看| 在线欧美日韩国产| 国产一区二区免费视频| 亚洲色图制服丝袜| 欧美浪妇xxxx高跟鞋交| 99久久精品免费| 毛片不卡一区二区| 亚洲视频一区二区在线| 精品成人一区二区| 欧洲精品一区二区| 免费看日韩a级影片| 亚洲欧洲av一区二区三区久久| 91精品国产综合久久久久久 | 99久久综合狠狠综合久久| 亚洲mv在线观看| 中文在线一区二区| 6080日韩午夜伦伦午夜伦| 韩国女主播一区| 另类欧美日韩国产在线| 亚洲免费在线观看| 国产亚洲综合性久久久影院| 91精品办公室少妇高潮对白| 国产乱人伦偷精品视频不卡| 亚洲国产精品一区二区www在线| 国产视频亚洲色图| 精品1区2区在线观看| 欧美日韩大陆在线| 91麻豆福利精品推荐| 狠狠狠色丁香婷婷综合激情| 日韩国产欧美一区二区三区| 亚洲精品日韩专区silk| 国产天堂亚洲国产碰碰| 久久久久久久综合日本| 欧美一区二区在线免费播放| 91麻豆视频网站| 国产成人综合精品三级| 国产91高潮流白浆在线麻豆|