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

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

?? thrall.cpp

?? this keik game source
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
   owner = G_GetEntity( this->owner );

   if ( !owner )
      {
      owner = world;
      }

   if ( !other || ( ( other == owner ) && ( owner != world ) ) || ( other->isSubclassOf( DrunkMissile ) ) )
		{
		return;
		}

   flags &= ~FL_PRETHINK;
   stopsound( CHAN_VOICE );
	setSolidType( SOLID_NOT );
	hideModel();

	if ( HitSky() )
		{
      PostEvent( EV_Remove, 0 );
      return;
		}

	damg = 40 + ( int )G_Random( 20 );

   other->Damage( this, owner, damg, worldorigin, velocity, level.impact_trace.plane.normal, 200, 0, MOD_ROCKET, -1, -1, 1.0f );

   SpawnBlastDamage( &level.impact_trace, damg, owner );

   v = velocity;
	v.normalize();
	
	// don't do radius damage to the other, because all the damage
	// was done in the impact
	v = worldorigin - v * 36;
	CreateExplosion( v, damg, 0.7f, true, this, owner, other );
	PostEvent( EV_Remove, 0.1 );
	}

EXPORT_FROM_DLL float DrunkMissile::ResolveMinimumDistance
	(
	Entity *potential_target,
	float currmin
	)

   {
   float		currdist;
	float		dot;
	Vector	angle;
	Vector	delta;
	Vector	norm;
	float		sine = 0.4f;

	delta = potential_target->centroid - worldorigin;

	norm = delta;
	norm.normalize();

	// Test if the target is in front of the missile
	dot = norm * orientation[ 0 ];
	if ( dot < 0 )
		{
		return currmin;
		}

	// Test if we're within the rocket's viewcone (45 degree cone)
	dot = norm * orientation[ 1 ];
	if ( fabs( dot ) > sine )
		{
		return currmin;
		}

	dot = norm * orientation[ 2 ];
	if ( fabs( dot ) > sine )
		{
		return currmin;
		}

	currdist = delta.length();
	if ( currdist < currmin )
		{
		currmin = currdist;
		target = potential_target;
		}

	return currmin;
	}

EXPORT_FROM_DLL float DrunkMissile::AdjustAngle
	(
	float maxadjust,
	float currangle,
	float targetangle
	)

   {
   float dangle;
	float magangle;

	dangle = currangle - targetangle;

	if ( dangle )
		{
		magangle = ( float )fabs( dangle );
		if ( magangle < maxadjust )
			{
			currangle = targetangle;
			}
		else 
			{
			if ( magangle > 180.0f  )
				{
				maxadjust = -maxadjust;
				}
			if ( dangle > 0 )
				{
				maxadjust = -maxadjust;
				}
			currangle += maxadjust;
			}
		}

	while( currangle >= 360.0f )
		{
		currangle -= 360.0f;
		}

	while( currangle < 0.0f )
		{
		currangle += 360.0f;
		}

	return currangle;
	}

EXPORT_FROM_DLL void DrunkMissile::HeatSeek
	(
	Event *ev
	)

	{
	float		mindist;
	Entity	*ent;
	trace_t  trace;
	Vector	delta;
	Vector	v;
   int      n;
   int      i;

   if ( ( !target ) || ( target == world ) )
		{
		mindist = 8192.0f;

	   n = SentientList.NumObjects();
	   for( i = 1; i <= n; i++ )
		   {
		   ent = SentientList.ObjectAt( i );
			if ( ent->entnum == owner )
				{
				continue;
				}

			if ( ( ( ent->takedamage != DAMAGE_AIM ) || ( ent->health <= 0 ) ) && !( edict->svflags & SVF_MONSTER ) )
				{
				continue;
				}

			trace = G_Trace( worldorigin, vec_zero, vec_zero, ent->centroid, this, MASK_SHOT, "DrunkMissile::HeatSeek" );
			if ( ( trace.fraction != 1.0 ) && ( trace.ent != ent->edict ) )
				{
				continue;
				}
	
			mindist = ResolveMinimumDistance( ent, mindist );
			}
		}
	else 
		{
      float predict;
      float dist;
      float time;
      float angspeed;

      delta = target->centroid - worldorigin;
      dist = delta.length();
      time = dist * ( 1 / DRUNKMISSILE_SPEED );
      predict = ( time * ( 0.5 + ( skill->value + 1 ) * 0.125 ) );
		delta += target->velocity * predict;
		delta.z = -delta.z;
		v = delta.toAngles();

      angspeed = 5.0f + skill->value;
		angles.x = AdjustAngle( angspeed, angles.x, v.x );
		angles.y = AdjustAngle( angspeed, angles.y, v.y );
		angles.z = AdjustAngle( angspeed, angles.z, v.z );
		}

   if ( !target )
	   {
      PostEvent( EV_DrunkMissile_HeatSeek, 0.2 );
	   }
   else
      {
      PostEvent( EV_DrunkMissile_HeatSeek, 0.1 );
      }
	}

EXPORT_FROM_DLL void DrunkMissile::Prethink
	(
	void
	)

	{
	trace_t trace;
	Vector end;

	angles += Vector( G_CRandom( 3 ), G_CRandom( 5 ), 0 );

	// Check if we're about to hit the ground at a shallow angle
	if ( ( velocity.z < 0 ) && ( angles.x < 15.0f ) )
		{
		end = worldorigin + velocity * 0.1f;
		trace = G_Trace( worldorigin, vec_zero, vec_zero, end, this, MASK_SHOT, "DrunkMissile::Prethink" );
		if ( trace.fraction != 1 )
			{
			if ( trace.plane.normal[ 2 ] > 0.6f )
				{
				angles.x = -3;
				}
			}
		}

   setAngles( angles );
   velocity = Vector( orientation[ 0 ] ) * DRUNKMISSILE_SPEED;
	}

EXPORT_FROM_DLL void DrunkMissile::Setup
	(
	Entity *owner,
	Vector pos,
	Vector dir
	)

	{
   Event *ev;

	this->owner = owner->entnum;
	edict->owner = owner->edict;

   flags |= FL_PRETHINK;

	setMoveType( MOVETYPE_FLYMISSILE );
	setSolidType( SOLID_BBOX );
	edict->clipmask = MASK_PROJECTILE;

	// set missile duration
   ev = new Event( EV_Touch );
   ev->AddEntity( world );
   PostEvent( ev, 10 );

   PostEvent( EV_DrunkMissile_HeatSeek, 0.1 + G_Random( 0.2f ) );

	// set missile direction
	angles = dir.toAngles();
	angles[ PITCH ] = - angles[ PITCH ];
	setAngles( angles );
	velocity = Vector( orientation[ 0 ] ) * 800.0f;

	target = NULL;

	setModel( "trocket.def" );
	setSize( "-1 -1 -1", "1 1 1" );
	takedamage = DAMAGE_YES;
	health = 10;
	setOrigin( pos );
   worldorigin.copyTo(edict->s.old_origin);

   edict->s.renderfx |= RF_DLIGHT;
   edict->s.effects  |= EF_ROCKET;
   edict->s.effects  |= EF_EVERYFRAME;
   edict->s.angles[ROLL] = rand() % 360;
	avelocity = "0 0 90";
	gravity = 0;
   edict->s.color_r      = 0.8;
   edict->s.color_g      = 0.4;
   edict->s.color_b      = 0;
   edict->s.radius       = 200;

	// setup ambient thrust
	ev = new Event( EV_RandomEntitySound );
	//ev->AddString( "thrust" );
   ev->AddString( "fire" );
   ProcessEvent( ev );
	}

CLASS_DECLARATION( Projectile, ThrallPulse, NULL );

ResponseDef ThrallPulse::Responses[] =
	{
      { &EV_Touch,                   ( Response )ThrallPulse::Explode },
		{ NULL, NULL }
	};

EXPORT_FROM_DLL void ThrallPulse::Explode
	(
   Event *ev
	)

	{
	int damg;
	Vector v;
	Entity *other;
   Entity *owner;
   ThrallPulseDebris *debris;
   int i;

   other = ev->GetEntity( 1 );

   owner = G_GetEntity( this->owner );

   if ( !owner )
      owner = world;

   if ( !other || ( other == owner ) || ( other->isSubclassOf( ThrallPulse ) ) )
		{
		return;
		}

   flags &= ~FL_PRETHINK;
   stopsound( CHAN_VOICE );
	setSolidType( SOLID_NOT );
	hideModel();

	if ( HitSky() )
		{
      PostEvent( EV_Remove, 0 );
      return;
		}

	damg = 160 + ( int )G_Random( 50 );

   other->Damage( this, owner, damg, worldorigin, velocity, level.impact_trace.plane.normal, 320, 0, MOD_ROCKET, -1, -1, 1.0f );

   SpawnBlastDamage( &level.impact_trace, damg, owner );
   
   v = velocity;
	v.normalize();
	
	// don't do radius damage to the other, because all the damage
	// was done in the impact
	v = worldorigin - v * 36;
	CreateExplosion( v, damg, 0.7f, true, this, owner, other );
	PostEvent( EV_Remove, 0.1 );
   FlashPlayers( v, 1, 1, 1, 0.5, 768 );

   for( i = 1; i < 4; i++ )
      {
      debris = new ThrallPulseDebris;
      debris->Setup( owner, v, i );
      }
	}

EXPORT_FROM_DLL void ThrallPulse::Setup
	(
	Entity *owner,
	Vector pos,
	Vector dir
	)

	{
   Event *ev;

	this->owner = owner->entnum;
	edict->owner = owner->edict;

	setMoveType( MOVETYPE_FLYMISSILE );
	setSolidType( SOLID_BBOX );
	edict->clipmask = MASK_PROJECTILE;

	// set missile duration
   ev = new Event( EV_Touch );
   ev->AddEntity( world );
   PostEvent( ev, 10 );

	// set missile direction
	angles = dir.toAngles();
	angles[ PITCH ] = - angles[ PITCH ];
	setAngles( angles );
	velocity = Vector( orientation[ 0 ] ) * 1400.0f;

	setModel( "sprites/thrallpulse.spr" );
	setSize( "-8 -8 -8", "8 8 8" );
	takedamage = DAMAGE_NO;
	setOrigin( pos );
   worldorigin.copyTo(edict->s.old_origin);
   showModel();

   edict->s.renderfx |= RF_DLIGHT;
   edict->s.angles[ROLL] = rand() % 360;
	avelocity = "0 0 90";
	gravity = 0;
   edict->s.color_r      = 0.8;
   edict->s.color_g      = 0;
   edict->s.color_b      = 0;
   edict->s.radius       = 200;
	}

CLASS_DECLARATION( Projectile, ThrallPulseDebris, NULL );

ResponseDef ThrallPulseDebris::Responses[] =
	{
      { &EV_Touch,            ( Response )ThrallPulseDebris::Touch },
		{ NULL, NULL }
	};

EXPORT_FROM_DLL void ThrallPulseDebris::Touch
	(
   Event *ev
	)

	{
	Entity *other;
   Entity *owner;

   if ( level.time < nexttouch )
      {
      return;
      }

   nexttouch = level.time + 1;

   other = ev->GetEntity( 1 );
   owner = G_GetEntity( this->owner );
   if ( !owner )
      {
      owner = world;
      }

   if ( !other )
		{
		return;
		}

   other->Damage( this, owner, 10 * edict->s.scale, worldorigin, velocity, 
      level.impact_trace.plane.normal, velocity.length(), 0, MOD_DEBRIS, -1, -1, 1.0f );
	}

EXPORT_FROM_DLL void ThrallPulseDebris::Prethink
	(
   void
	)

	{
   if ( ( level.time - spawntime ) > 4 )
      {
      edict->s.scale *= 0.9;
      setSize( Vector( -4, -4, -4 ) * edict->s.scale, Vector( 4, 4, 4 ) * edict->s.scale );
      }
   }

EXPORT_FROM_DLL void ThrallPulseDebris::Setup
	(
   Entity *owner,
	Vector pos,
	float size
	)

	{
	this->owner = owner->entnum;
	edict->owner = owner->edict;

   nexttouch = 0;
   spawntime = level.time;
   flags |= FL_PRETHINK;
   setModel( "thrallfire.def" );
   setMoveType( MOVETYPE_BOUNCE );
	setSolidType( SOLID_TRIGGER );
   edict->s.effects |= EF_ROCKET;
   showModel();
   setOrigin( pos );
   worldorigin.copyTo( edict->s.old_origin );
   velocity = Vector( G_CRandom( 200 ), G_CRandom( 200 ), G_Random( 100 ) + 100 );
   PostEvent( EV_Remove, 4 + 2 * size );
   edict->s.scale *= size;
   setSize( Vector( -4, -4, -4 ) * edict->s.scale, Vector( 4, 4, 4 ) * edict->s.scale );
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女久久久精品| 欧美日韩成人激情| 亚洲精品一线二线三线| 视频一区欧美精品| 欧美三级中文字幕在线观看| 一区二区三区在线视频免费观看| 不卡电影一区二区三区| 国产精品久久777777| 粉嫩aⅴ一区二区三区四区五区| 久久亚区不卡日本| 国产高清久久久| 国产欧美日韩在线| av在线一区二区三区| 亚洲欧美一区二区不卡| 色综合天天综合网天天狠天天| 亚洲精品美国一| 欧美喷水一区二区| 免费精品99久久国产综合精品| 日韩欧美一区中文| 国模少妇一区二区三区| 国产日韩欧美不卡在线| 99re成人精品视频| 亚洲成人激情综合网| 欧美一区二区三区系列电影| 国内精品伊人久久久久av一坑| 国产欧美一区在线| 欧美在线观看视频一区二区| 午夜视频一区二区| 久久久久久影视| 91理论电影在线观看| 中文字幕在线播放不卡一区| 欧美在线一区二区| 美腿丝袜一区二区三区| 国产片一区二区| 欧美性视频一区二区三区| 天堂一区二区在线| 国产丝袜在线精品| k8久久久一区二区三区| 亚洲美女在线国产| 欧美伊人精品成人久久综合97 | 日韩精品在线网站| 国产超碰在线一区| 亚洲午夜一二三区视频| 久久女同性恋中文字幕| 久久精品国产一区二区| k8久久久一区二区三区| 国产精品的网站| 欧美老女人第四色| 欧美图片一区二区三区| 一区二区三区四区五区视频在线观看| 美女视频免费一区| 色婷婷av一区二区三区之一色屋| 亚洲天堂av一区| 精品一区二区三区在线播放| 国产精品久久久久9999吃药| 欧美日韩国产综合草草| 狠狠色狠狠色合久久伊人| 亚洲人成精品久久久久久| 91麻豆精品国产91| 一本大道久久精品懂色aⅴ| 国产中文字幕精品| 亚洲高清在线视频| 欧美日韩高清影院| 麻豆国产精品官网| 日韩欧美成人一区| 91女人视频在线观看| 亚洲18影院在线观看| 成人免费在线视频观看| 精品电影一区二区| 欧美日韩国产影片| 91丨九色丨尤物| 懂色av中文一区二区三区| 日日欢夜夜爽一区| 亚洲精品免费在线观看| 国产精品第一页第二页第三页| 久久久精品黄色| 日韩精品一区二区三区老鸭窝| 欧美日韩国产美| 欧美天堂亚洲电影院在线播放| 成人激情午夜影院| 国产麻豆精品久久一二三| 久久99久久久久| 日韩成人av影视| 午夜电影一区二区| 欧美日韩国产不卡| 99久久久久免费精品国产| 国产精品乱人伦| 久久综合色8888| 久久综合久久综合九色| 欧美成人精品1314www| 欧美精品九九99久久| 欧美日韩国产小视频在线观看| 日本韩国精品一区二区在线观看| 91亚洲国产成人精品一区二区三| 99re热这里只有精品视频| 极品少妇一区二区三区精品视频| 日韩不卡一区二区三区| 亚洲午夜电影在线| 亚洲国产精品久久久男人的天堂| 夜夜嗨av一区二区三区四季av| 亚洲黄色录像片| 亚洲午夜激情av| 五月激情综合色| 日本不卡在线视频| 精品一二线国产| 国产剧情一区二区| 精品一二三四区| 成人性生交大片免费看视频在线 | 亚洲成av人影院在线观看网| 一区二区在线看| 亚洲伊人伊色伊影伊综合网| 国内成+人亚洲+欧美+综合在线| 亚洲激情网站免费观看| 欧美一区二区人人喊爽| 日本女人一区二区三区| 亚洲成人免费观看| 久久国内精品自在自线400部| 看片网站欧美日韩| 国产精品资源网| 99久久精品国产导航| 欧美日韩国产综合一区二区三区 | 日韩视频免费直播| 色嗨嗨av一区二区三区| 午夜一区二区三区在线观看| 国产99久久久精品| 日本高清无吗v一区| 日本一区二区三区电影| 一区二区不卡在线播放| 国产一本一道久久香蕉| 国产成人免费在线观看| 亚洲午夜私人影院| 国产精品综合二区| 日韩欧美精品在线| 精品国产乱码久久久久久夜甘婷婷 | 精品视频免费在线| 综合色天天鬼久久鬼色| 亚洲va韩国va欧美va精品| 在线观看成人小视频| 亚洲综合偷拍欧美一区色| 91麻豆精品视频| 午夜一区二区三区在线观看| 国产精品一级片| 国产日韩欧美精品一区| 国产99一区视频免费| 亚洲国产精品麻豆| 欧美电视剧在线看免费| av毛片久久久久**hd| 三级影片在线观看欧美日韩一区二区| 日韩免费看的电影| 91久久精品国产91性色tv| 国产精品自在欧美一区| 秋霞av亚洲一区二区三| 国产偷国产偷精品高清尤物| 欧美电影免费提供在线观看| 色哟哟欧美精品| 欧美亚洲一区二区三区四区| www.欧美.com| av福利精品导航| 91精品免费在线观看| 91精品福利视频| 91蜜桃在线观看| eeuss鲁片一区二区三区 | 国产高清不卡二三区| 日韩av中文字幕一区二区| 国产精品久久久久7777按摩| 国产免费久久精品| 中文字幕高清不卡| 中文字幕精品综合| 久久久久久免费| 国产精品无人区| 亚洲天堂精品在线观看| 亚洲综合免费观看高清完整版| 95精品视频在线| 成人sese在线| 在线观看亚洲精品视频| 日韩欧美一级二级三级久久久| 日韩欧美中文字幕一区| 久久影音资源网| 亚洲精品日日夜夜| 久久国产精品区| 成人一区二区三区视频在线观看| 高清成人在线观看| 在线观看视频一区二区| 91精品福利在线一区二区三区| 九一久久久久久| 久久精品国产澳门| 91视频观看免费| 日韩欧美亚洲国产另类| 亚洲欧美色图小说| 国产一区视频网站| 91免费精品国自产拍在线不卡 | 中文字幕在线免费不卡| 亚洲一区二区欧美| 国产福利一区二区三区视频 | 色偷偷久久人人79超碰人人澡| 日韩一级大片在线观看| 亚洲大片精品永久免费| 色欧美88888久久久久久影院| 国产精品久久毛片av大全日韩| 中文字幕+乱码+中文字幕一区|