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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? actor.cpp

?? this keik game source
?? CPP
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
      {
      enemydistance = MIN_AIM_DISTANCE;
      }

      // 0 is maximum accuracy
   invaim = 1.0f - aim;
   if ( invaim < 0 )
      invaim = 0;
	skl = min( skill->value, 3 );
   if ( skl < 1 )
      skl = 1;
	accuracy = 1 - ( min( skl, 3 ) * 0.18 );
   accuracy *= invaim;
	spread = ( 8 * MIN_AIM_DISTANCE * accuracy ) / enemydistance;
	ang.x += G_CRandom( spread );
	ang.y += G_CRandom( spread );

	ang.AngleVectors( forward, right, up );
	}

qboolean Actor::CanShootFrom
	(
	Vector pos,
	Entity *ent,
	qboolean usecurrentangles
	)

	{
   int      mask;
	Vector	delta;
	Vector	start;
	Vector	end;
	float		len;
	trace_t	trace;
	Vehicle	*v;
	Entity	*t;
   Vector   ang;

	if ( !currentWeapon || !WithinDistance( ent, vision_distance ) )
		{
      if (!currentWeapon && !has_melee )
		   return false;
		}

	if ( usecurrentangles )
		{
   	Vector	dir;

      start = pos + GunPosition() - worldorigin;
//      start = pos + centroid - worldorigin;
		end = ent->centroid;
		end.z += ( ent->absmax.z - ent->centroid.z ) * 0.75f;
		delta = end - start;
      ang = delta.toAngles();
      ang.x = -ang.x;
      ang.y = angles.y;
		len = delta.length();
   	ang.AngleVectors( &dir, NULL, NULL );
      dir *= len;
      end = start + dir;
		}
	else
		{
		start = pos + GunPosition() - worldorigin;
		end = ent->centroid;
		end.z += ( ent->absmax.z - ent->centroid.z ) * 0.75f;
      delta = end - start;
      len = delta.length();
		}

	// check if we're too far away, or too close
   if ( currentWeapon )
      {
	   if ( ( len > attack_range ) || ( len > currentWeapon->GetMaxRange() ) || ( len < currentWeapon->GetMinRange() ) )
		   {
		   return false;
		   }
      mask = MASK_SHOT;
      }
   else
      {
	   if ( ( len > attack_range ) || ( len > melee_range ) )
		   {
		   return false;
		   }
      mask = MASK_PROJECTILE;
      }

	// shoot past the guy we're shooting at
	end += delta * 4;

#if 0
   if ( usecurrentangles )
      {
      G_DebugLine( start, end, 1, 0, 0, 1 );
      }
   else
      {
	   G_DebugLine( start, end, 1, 1, 0, 1 );
      }
#endif

	// Check if he's visible
	trace = G_Trace( start, vec_zero, vec_zero, end, this, mask, "Actor::CanShootFrom" );
	if ( trace.startsolid )
		{
		return false;
		}

	// If we hit the guy we wanted, then shoot
	if ( trace.ent == ent->edict )
		{
		return true;
		}

	// if we hit a vehicle, check if the driver is someone we want to hit
	t = trace.ent->entity;
	if ( t && t->isSubclassOf( Vehicle ) )
		{
		v = ( Vehicle * )t;
		if ( ( v->Driver() == ent ) || IsEnemy( v->Driver() ) )
			{
			return true;
			}
		return false;
		}

	// If we hit someone else we don't like, then shoot
	if ( IsEnemy( t ) )
		{
		return true;
		}

	// if we hit something breakable, check if shooting it will
   // let us shoot someone.
	if ( t->isSubclassOf( Shatter ) || 
		t->isSubclassOf( Object ) ||
		t->isSubclassOf( DamageThreshold ) ||
		t->isSubclassOf( ScriptModel ) )
		{
      trace = G_Trace( Vector( trace.endpos ), vec_zero, vec_zero, end, t, mask, "Actor::CanShootFrom 2" );
	   if ( trace.startsolid )
		   {
		   return false;
		   }

	   // If we hit the guy we wanted, then shoot
	   if ( trace.ent == ent->edict )
		   {
		   return true;
		   }

	   // If we hit someone else we don't like, then shoot
	   if ( IsEnemy( trace.ent->entity ) )
		   {
		   return true;
		   }

      // Forget it then
      return false;
		}

	return false;
	}

qboolean Actor::CanShoot
	(
	Entity *ent,
	qboolean usecurrentangles
	)

	{
	return CanShootFrom( worldorigin, ent, usecurrentangles );
	}

float Actor::AttackRange
	(
   void
	)

	{
	if ( !currentWeapon && !has_melee )
		{
		return 0;
		}

   if ( currentWeapon )
      {
	   return ( currentWeapon->GetMaxRange() );
      }
   else
      {
      return ( melee_range );
      }
	}

float Actor::MinimumAttackRange
	(
   void
	)

	{
   float range;
   float maxrange;

	if ( !currentWeapon && !has_melee )
		{
		return 100;
		}

   range = melee_range * 0.75f;
   maxrange = melee_range;

   if ( currentWeapon )
      {
	   range = currentWeapon->GetMinRange();
      if ( !range && melee_range )
         range = melee_range * 0.75f;
	   maxrange = currentWeapon->GetMaxRange();
      }

   if ( range > maxrange )
      range = maxrange;

   return range;
	}

qboolean Actor::HasWeapon
	(
   void
	)
   {
   return ( currentWeapon != NULL );
   }

//***********************************************************************************************
//
// Actor type script commands
//
//***********************************************************************************************

void Actor::FriendEvent
	(
	Event *ev
	)

	{
	actortype = IS_FRIEND;
	}

void Actor::CivilianEvent
	(
	Event *ev
	)

	{
	actortype = IS_CIVILIAN;
	}

void Actor::EnemyEvent
	(
	Event *ev
	)

	{
	actortype = IS_ENEMY;
	}

void Actor::InanimateEvent
   (
   Event *ev
   )

   {
   actortype = IS_INANIMATE;
   //
   // clear the monster flag so triggers are not triggered
   //
	edict->svflags	&= ~SVF_MONSTER;
   //
   // don't make them move
   //
   setMoveType( MOVETYPE_NONE );
   // 
   // don't make it bleed
   //
   flags &= ~FL_BLOOD;
   // 
   // don't make it gib
   //
   flags &= ~FL_DIE_GIBS;
   }
   
void Actor::MonsterEvent
	(
	Event *ev
	)

	{
	actortype = IS_MONSTER;
	}

void Actor::AnimalEvent
	(
	Event *ev
	)

	{
	actortype = IS_ANIMAL;
	}

//***********************************************************************************************
//
// Enemy management
//
//***********************************************************************************************

qboolean Actor::HasEnemies
	(
	void
	)

	{
	return ( enemyList.NumObjects() > 0 );
	}

qboolean Actor::IsEnemy
	(
	Entity *ent
	)

	{
	return enemyList.ObjectInList( EntityPtr( ent ) ) && seenEnemy;
	}

void Actor::MakeEnemy
	(
	Entity *ent,
   qboolean force
	)

	{
   // don't get mad at things that can't be hurt or the world
	if ( 
         ent && 
         ( ent != world ) && 
         ( ent != this ) && 
         !( ent->flags & FL_NOTARGET ) &&
         ( ent->takedamage != DAMAGE_NO )
      )
		{
      if ( !enemyList.ObjectInList( EntityPtr( ent ) ) )
         {
		   enemyList.AddObject( EntityPtr( ent ) );
         }

		if ( !currentEnemy && !seenEnemy )
			{
			currentEnemy = ent;
			if ( DoAction( "sightenemy", force ) )
				{
				seenEnemy = true;
            Chatter( "snd_sightenemy", 5 );
				}
			else
				{
				currentEnemy = NULL;
				}
			}
		}
	}

void Actor::ClearEnemies
   (
   void
   )

   {
	currentEnemy = NULL;
   seenEnemy = false;
   enemyList.ClearObjectList();
   }


qboolean Actor::Likes
	(
	Entity *ent
	)

	{
	Actor *act;

	if ( ent->isClient() )
		{
		return ( actortype == IS_FRIEND );
		}
   else if ( actortype == IS_MONSTER )
      {
      // monsters don't like anyone, but they don't particular hate everyone
      return false;
      }
	else if ( ent->isSubclassOf( Actor ) )
		{
		act = ( Actor * )ent;
		return ( act->actortype == actortype );
		}

	return false;
	}

qboolean Actor::Hates
	(
	Entity *ent
	)

	{
	Actor *act;

   assert( ent );
   if ( !ent )
      {
      return false;
      }

	if ( ent->isClient() )
		{
      if ( ent->flags & FL_SP_MUTANT )
         {
         if ( actortype == IS_ENEMY )
            return false;
         else
            return true;
         }
      else
         {
		   return ( actortype != IS_CIVILIAN ) && ( actortype != IS_FRIEND );
         }
		}
	else if ( ent->isSubclassOf( Actor ) && ( actortype != IS_INANIMATE ) )
		{
		act = ( Actor * )ent;
//      if ( act->actortype == IS_INANIMATE )
//         {
//         // heh... Mutants hate inanimate objects. :)
//         return ( actortype == IS_MONSTER );
//         }
      if ( ( act->actortype <= IS_ENEMY ) && ( actortype <= IS_ENEMY ) )
			{
			return false;
			}
		if ( ( act->actortype == IS_FRIEND ) && ( actortype <= IS_ENEMY ) )
			{
			return true;
			}
		if ( ( act->actortype <= IS_ENEMY ) && ( actortype == IS_FRIEND ) )
			{
			return true;
			}
		}

	return false;
	}

//***********************************************************************************************
//
// Targeting functions
//
//***********************************************************************************************

qboolean Actor::GetVisibleTargets
	(
	void
	)

	{
	Sentient	*ent;
	Vector	delta;
	int		i;
	int		n;

	targetList.ClearObjectList();
	nearbyList.ClearObjectList();

	n = SentientList.NumObjects();
	for( i = 1; i <= n; i++ )
		{
		ent = SentientList.ObjectAt( i );

		//if ( ( ent == this ) || ent->deadflag || ( ent->flags & FL_NOTARGET ) || !Hates( ent ) )
		if ( ( ent == this ) || ( ent->flags & FL_NOTARGET ) || ent->hidden() )
			{
			continue;
			}

		if ( WithinDistance( ent, vision_distance ) && CanSeeFOV( ent ) )
			{
			targetList.AddObject( EntityPtr( ent ) );
			if ( WithinDistance( ent, 96 ) )
				{
				nearbyList.AddObject( EntityPtr( ent ) );
				}
			}
		}

	return ( targetList.NumObjects() > 0 );
	}

void Actor::TargetEnemies
	(
	Event *ev
	)

	{
	int i;
	int n;
	Entity *ent;
	Entity *newtarget;
	Actor *act;

   if ( actortype == IS_INANIMATE )
      {
      // inanimate objects don't need to worry about this kind of thing
      return;
      }

   if ( enemyList.NumObjects() >= 1 )
      {
      // don't target new enemies as much while we've already got an enemy
      PostEvent( EV_Actor_TargetEnemies, 5 );
      }
   else
      {
      PostEvent( EV_Actor_TargetEnemies, 1 );
      }

	if ( hidden() )
		{
		// don't target while hidden (for cinematic characters)
		//FIXME
		// probably should have a start/stop function
		return;
		}

	if ( GetVisibleTargets() )
		{
		n = targetList.NumObjects();
		for( i = 1; i <= n; i++ )
			{

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本大香伊一区二区三区| 成人欧美一区二区三区1314| 久久99精品视频| 亚洲三级在线免费观看| 欧美精品v国产精品v日韩精品| 国产一区二三区| 偷拍日韩校园综合在线| 久久久www免费人成精品| 国产剧情av麻豆香蕉精品| 91国模大尺度私拍在线视频| 欧美本精品男人aⅴ天堂| 国产一区视频导航| 亚洲黄色尤物视频| 久久久噜噜噜久久中文字幕色伊伊| 在线观看精品一区| 日韩国产一二三区| 亚洲人成精品久久久久| 精品久久久久av影院| 欧美午夜免费电影| 激情小说亚洲一区| 视频一区视频二区中文字幕| 久久精品男人的天堂| 欧美午夜精品理论片a级按摩| 国产成人8x视频一区二区| 亚洲无人区一区| 成人高清视频在线观看| 色综合久久中文字幕综合网| 久久草av在线| 亚洲高清免费一级二级三级| 国产日本欧洲亚洲| 欧美日韩国产经典色站一区二区三区| 成人av在线播放网站| 国产在线国偷精品免费看| 香蕉影视欧美成人| 午夜电影网一区| 亚洲国产成人高清精品| 久久品道一品道久久精品| 欧美亚洲愉拍一区二区| 91福利在线播放| 成人激情开心网| 九九在线精品视频| 亚洲激情中文1区| 国产喷白浆一区二区三区| 精品国产免费人成电影在线观看四季 | 欧美妇女性影城| av中文字幕一区| 成人午夜av影视| 毛片av中文字幕一区二区| 亚洲一级二级三级| 亚洲九九爱视频| 亚洲美女在线国产| 亚洲与欧洲av电影| 亚洲免费观看视频| 国产精品久久久久久久久动漫 | 综合在线观看色| 久久精品人人做人人爽97| 久久嫩草精品久久久精品| 国产日韩欧美一区二区三区乱码 | 天天综合天天做天天综合| 一区二区三区 在线观看视频| 亚洲精品自拍动漫在线| 国产清纯美女被跳蛋高潮一区二区久久w | 亚洲女同ⅹxx女同tv| 亚洲精品老司机| 亚洲一区免费在线观看| 久久久www成人免费毛片麻豆| 精品久久久久久最新网址| 69av一区二区三区| 日韩精品一区二区三区蜜臀| 欧美精品一区二区三区蜜臀| 国产亚洲1区2区3区| 国产精品国产三级国产普通话三级 | 国产女人18水真多18精品一级做 | 7777女厕盗摄久久久| 在线视频综合导航| 欧美午夜精品免费| 在线综合亚洲欧美在线视频| 欧美日韩精品一区二区天天拍小说 | 欧美激情一区三区| 1024成人网| 一区二区成人在线| 亚洲成av人片观看| 日韩精品一二三区| 国产成人高清视频| 99国产一区二区三精品乱码| 在线观看视频91| 久久众筹精品私拍模特| 国产精品久久久久aaaa樱花| 亚洲国产精品欧美一二99| 激情久久五月天| 91亚洲资源网| 717成人午夜免费福利电影| 国产精品麻豆欧美日韩ww| 亚洲一区二区四区蜜桃| 精品一区二区三区在线播放视频| 午夜国产不卡在线观看视频| 高清av一区二区| 91麻豆精品国产91久久久久久| 中文字幕国产精品一区二区| 日韩福利电影在线| 色哟哟一区二区在线观看| 精品播放一区二区| 亚洲高清在线视频| 不卡一区在线观看| 91精品国产综合久久久久久漫画| 国产精品国产三级国产专播品爱网| 免费成人av在线播放| 不卡电影免费在线播放一区| 欧美一级黄色录像| 亚洲精品v日韩精品| 国产精品123| 日韩欧美一区中文| 午夜激情综合网| 欧美自拍丝袜亚洲| 国产精品麻豆视频| 成人黄色av网站在线| 久久综合九色综合97婷婷| 青青草国产精品亚洲专区无| 欧美在线999| 亚洲免费观看高清| av激情亚洲男人天堂| 国产欧美日韩视频在线观看| 婷婷综合五月天| 91精品福利视频| 国产精品色婷婷久久58| 看电影不卡的网站| 91精品国产91综合久久蜜臀| 亚洲福中文字幕伊人影院| 99精品国产视频| 亚洲日本丝袜连裤袜办公室| 成人黄色大片在线观看| 国产精品久久久久毛片软件| 国产成人精品综合在线观看| 久久久蜜桃精品| 国产99久久久国产精品免费看| 久久久影视传媒| 国产精品一区在线观看你懂的| 久久久久国产精品麻豆| 九九视频精品免费| 精品国产乱子伦一区| 韩国欧美国产1区| 国产午夜亚洲精品不卡| 国产精品主播直播| 在线精品国精品国产尤物884a| 久久久久高清精品| 高清国产一区二区三区| 国产精品久久久久aaaa樱花| 91小视频在线免费看| 亚洲综合清纯丝袜自拍| 欧美亚洲综合久久| 五月天视频一区| 91精品麻豆日日躁夜夜躁| 国产精品蜜臀在线观看| jvid福利写真一区二区三区| 亚洲人成网站色在线观看| 在线观看av一区二区| 五月天久久比比资源色| 91麻豆精品久久久久蜜臀| 精品一区二区三区视频在线观看 | 久久 天天综合| 国产欧美日本一区视频| 色综合天天综合| 日韩精品一卡二卡三卡四卡无卡| 欧美一区二区三区四区高清| 国产最新精品精品你懂的| 国产精品毛片无遮挡高清| 亚洲同性同志一二三专区| 中文字幕在线观看一区| 91久久精品网| 免费成人在线观看视频| 久久久久久一级片| 色婷婷精品大视频在线蜜桃视频| 亚洲午夜国产一区99re久久| 欧美一级欧美一级在线播放| 国产成人aaaa| 丝袜亚洲精品中文字幕一区| 久久久久久久久蜜桃| 在线看不卡av| 免播放器亚洲一区| 国产精品美女久久久久高潮| 欧美精品一二三区| 成人美女视频在线看| 亚洲成av人片在线观看无码| 久久久亚洲精品一区二区三区| 色婷婷激情久久| 国产高清成人在线| 亚洲第一综合色| 久久精品亚洲一区二区三区浴池| 91久久精品午夜一区二区| 激情都市一区二区| 亚洲最色的网站| 国内精品在线播放| 国产精品一区二区男女羞羞无遮挡 | 国产视频一区二区在线| 欧美午夜视频网站| 粉嫩aⅴ一区二区三区四区五区 | 午夜天堂影视香蕉久久| 中文字幕av不卡| 日韩免费看的电影| 欧美亚洲综合久久|