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

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

?? vehicle.cpp

?? this keik game source
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//-----------------------------------------------------------------------------
//
//  $Logfile:: /Quake 2 Engine/Sin/code/game/vehicle.cpp                      $
// $Revision:: 51                                                             $
//   $Author:: Markd                                                          $
//     $Date:: 2/19/99 7:49p                                                  $
//
// Copyright (C) 1997 by Ritual Entertainment, Inc.
// All rights reserved.
//
// This source is may not be distributed and/or modified without
// expressly written permission by Ritual Entertainment, Inc.
//
// $Log:: /Quake 2 Engine/Sin/code/game/vehicle.cpp                           $
// 
// 51    2/19/99 7:49p Markd
// implemented turret for CTF
// 
// 50    11/16/98 8:26p Jimdose
// made vehicles check for water and lava
// 
// 49    10/23/98 12:26a Markd
// Took out some vehicle coasting
// 
// 48    10/22/98 4:45p Markd
// made vehicles more responsive
// 
// 47    10/20/98 7:52p Markd
// Fixed drivable vehicles
// 
// 46    10/19/98 12:07a Jimdose
// made all code use fast checks for inheritance (no text lookups when
// possible)
// isSubclassOf no longer requires ::_classinfo()
// 
// 45    10/18/98 9:01p Markd
// Added ShowWeapon method and showweapon variable
// 
// 44    10/17/98 8:14p Jimdose
// Changed Damage to DamgeEvent
// 
// 43    10/15/98 11:53p Markd
// added jumping ability to vehicles
// 
// 42    10/08/98 7:17p Markd
// added steerinplace and stuff
// 
// 41    10/06/98 10:17p Markd
// changed some vehicle physics stuff
// 
// 40    10/05/98 12:28a Jimdose
// Moved angledist to q_shared
// 
// 39    9/22/98 5:20p Markd
// Put in new consolidated gib function
// 
// 38    9/20/98 7:01p Markd
// made vehicle auto rotate its bounding box
// 
// 37    9/16/98 10:07p Markd
// working on vehicles
// 
// 36    9/16/98 4:29p Markd
// Put in scaled bounding boxes for vehicles
// 
// 35    9/16/98 11:01a Markd
// Fixed some vehicle stuff that broke the intro and non-drivable vehicles
// 
// 34    9/15/98 4:38p Markd
// Removed auto-jumping and other stuff
// 
// 33    9/15/98 4:30p Markd
// Updated vehicle code
// 
// 32    9/14/98 9:56p Markd
// put in sounds
// 
// 31    9/14/98 6:13p Markd
// working on vehicles
// 
// 30    9/14/98 3:30p Markd
// intermediate checkin
// 
// 29    9/09/98 3:04p Markd
// Added IsDrivable also setup some default pm_types etc.
// 
// 28    8/29/98 9:47p Jimdose
// Changed calls to gi.trace to G_Trace
// 
// 27    7/25/98 4:39p Jimdose
// Added Driver
// 
// 26    7/23/98 6:17p Aldie
// Updated damage system and fixed some damage related bugs.  Also put tracers
// back to the way they were, and added gib event to funcscriptmodels
// 
// 25    7/21/98 1:10p Aldie
// Added meansofdeath to obituaries
// 
// 24    7/20/98 12:09p Markd
// Added vehicleanim support and driveroffset stuff
// 
// 23    7/19/98 7:34p Markd
// Added proper vehicle exit 
// 
// 22    7/19/98 5:41p Markd
// Forced changing of weapons
// 
// 21    7/19/98 3:43p Markd
// Took out special damage handling
// 
// 20    7/18/98 11:26p Markd
// Fixed damage, forgot to register Damage Event
// 
// 19    7/18/98 11:15p Markd
// Added damage ability
// 
// 18    7/18/98 3:57p Markd
// Put in InVehicle support
// 
// 17    7/17/98 4:03p Markd
// Added a bunch of functionality to the vehicle class
// 
// 16    6/23/98 11:45p Jimdose
// Got rid of some warnings
// 
// 15    6/23/98 2:58p Jimdose
// Better (but still bad) driving code
// 
// 14    6/22/98 2:04p Jimdose
// Reintegrated into sin
// 
// 12    11/19/97 8:07p Jimdose
// Fixed bug where vehicle would "heal" monsters if the player backed into them
// with a vehicle.
// 
// 11    11/12/97 5:11p Jimdose
// Enter and Exit events are now defined in player
// 
// 10    11/01/97 2:09p Jimdose
// Fixed rover1
// 
// 9     11/01/97 2:02p Jimdose
// Worked on vehicles
// 
// 8     10/31/97 9:03p Jimdose
// Worked on vehicles
// 
// 7     10/30/97 11:48p Jimdose
// Worked on vehicle code
// 
// 6     10/29/97 8:49p Jimdose
// Began work on steering
// 
// 5     10/27/97 3:29p Jimdose
// Removed dependency on quakedef.h
// 
// 4     10/09/97 4:26p Jimdose
// Worked on vehicle code
// 
// 3     10/08/97 9:30p Jimdose
// Refined Vehicle movement.
// 
// 2     10/08/97 6:03p Jimdose
// Began vehicle support.
// 
// DESCRIPTION:
// Script controlled Vehicles.
// 

#include "g_local.h"
#include "scriptslave.h"
#include "vehicle.h"
#include "player.h"
#include "specialfx.h"
#include "explosion.h"
#include "earthquake.h"
#include "gibs.h"

Event EV_Vehicle_Start( "start" );
Event EV_Vehicle_Enter( "enter" );
Event EV_Vehicle_Exit( "exit" );
Event EV_Vehicle_Drivable( "drivable" );
Event EV_Vehicle_UnDrivable( "undrivable" );
Event EV_Vehicle_Jumpable( "canjump" );
Event EV_Vehicle_Lock( "lock" );
Event EV_Vehicle_UnLock( "unlock" );
Event EV_Vehicle_SeatAnglesOffset( "seatanglesoffset" );
Event EV_Vehicle_SeatOffset( "seatoffset" );
Event EV_Vehicle_DriverAnimation( "driveranim" );
Event EV_Vehicle_SetWeapon( "setweapon" );
Event EV_Vehicle_SetSpeed( "vehiclespeed" );
Event EV_Vehicle_SetTurnRate( "turnrate" );
Event EV_Vehicle_SteerInPlace( "steerinplace" );
Event EV_Vehicle_ShowWeapon( "showweapon" );


CLASS_DECLARATION( ScriptModel, VehicleBase, NULL );

ResponseDef VehicleBase::Responses[] =
	{
		{ NULL, NULL }
	};

VehicleBase::VehicleBase()
	{
   takedamage = DAMAGE_NO;
	showModel();
   setSolidType( SOLID_NOT );
	setMoveType( MOVETYPE_NONE );
   setOrigin( origin + Vector( "0 0 30") );

   //
   // we want the bounds of this model auto-rotated
   //
   flags |= FL_ROTATEDBOUNDS;

   //
   // rotate the mins and maxs for the model
   //
   setSize( mins, maxs );

	vlink = NULL;
	offset = "0 0 0";
	}

CLASS_DECLARATION( VehicleBase, BackWheels, "script_wheelsback" );

ResponseDef BackWheels::Responses[] =
	{
		{ NULL, NULL }
	};

CLASS_DECLARATION( VehicleBase, FrontWheels, "script_wheelsfront" );

ResponseDef FrontWheels::Responses[] =
	{
		{ NULL, NULL }
	};

CLASS_DECLARATION( VehicleBase, Vehicle, "script_vehicle" );

ResponseDef Vehicle::Responses[] =
	{
	   { &EV_Blocked,					      ( Response )Vehicle::VehicleBlocked },
	   { &EV_Touch,					      ( Response )Vehicle::VehicleTouched },
	   { &EV_Use,						      ( Response )Vehicle::DriverUse },
	   { &EV_Vehicle_Start,			      ( Response )Vehicle::VehicleStart },
	   { &EV_Vehicle_Drivable,		      ( Response )Vehicle::Drivable },
	   { &EV_Vehicle_UnDrivable,	      ( Response )Vehicle::UnDrivable },
	   { &EV_Vehicle_Jumpable,	         ( Response )Vehicle::Jumpable },
	   { &EV_Vehicle_SeatAnglesOffset,  ( Response )Vehicle::SeatAnglesOffset },
	   { &EV_Vehicle_SeatOffset,        ( Response )Vehicle::SeatOffset },
	   { &EV_Vehicle_Lock,		         ( Response )Vehicle::Lock },
	   { &EV_Vehicle_UnLock,	         ( Response )Vehicle::UnLock },
      { &EV_Vehicle_SetWeapon,         ( Response )Vehicle::SetWeapon },
      { &EV_Vehicle_DriverAnimation,   ( Response )Vehicle::DriverAnimation },
      { &EV_Vehicle_SetSpeed,          ( Response )Vehicle::SetSpeed },
      { &EV_Vehicle_SetTurnRate,       ( Response )Vehicle::SetTurnRate },
      { &EV_Vehicle_SteerInPlace,      ( Response )Vehicle::SteerInPlace },
      { &EV_Vehicle_ShowWeapon,        ( Response )Vehicle::ShowWeaponEvent },
		{ NULL, NULL }
	};

Vehicle::Vehicle()
	{
   takedamage = DAMAGE_YES;
   seatangles = vec_zero;
   driveroffset = vec_zero;
   seatoffset = vec_zero;
	driver = 0;
	lastdriver = 0;
	currentspeed = 0;
	turnangle = 0;
	turnimpulse = 0;
	moveimpulse = 0;
	jumpimpulse = 0;
   conesize = 75;
   hasweapon = false;
   locked = false;
   steerinplace = false;
   drivable = false;
   jumpable = false;
   showweapon = false;
   setSolidType( SOLID_BBOX );
   flags |= FL_SPARKS|FL_DIE_TESSELATE|FL_DIE_EXPLODE|FL_DARKEN;
   gravity = 1;
   mass = size.length() * 10;

   // 
   // we use this to signify the init state of the angles
   //
	health = G_GetFloatArg( "health", 1000 );
	speed = G_GetFloatArg( "speed", 600 );
	maxturnrate = G_GetFloatArg( "maxturnrate", 40.0f );
	PostEvent( EV_Vehicle_Start, 0 );
	}

void Vehicle::VehicleStart
	(
	Event *ev
	)

	{
	Entity *ent;
	VehicleBase *last;
   vec3_t	trans[ 3 ];
   vec3_t   orient;
   Vector   drivemins, drivemaxs;
   int		groupindex;
   int		tri_num;
   float    max;
   float    width,height;


	last = this;

	for( ent = G_NextEntity( world ); ent != NULL; ent = G_NextEntity( ent ) )
		{
		if ( ( ent != this ) && ( ent->isSubclassOf( VehicleBase ) ) )
			{
			if ( ( ent->absmax.x >= absmin.x ) && ( ent->absmax.y >= absmin.y ) && ( ent->absmax.z >= absmin.z ) && 
				( ent->absmin.x <= absmax.x ) && ( ent->absmin.y <= absmax.y ) && ( ent->absmin.z <= absmax.z ) )
				{
				last->vlink = ( VehicleBase * )ent;
				last = ( VehicleBase * )ent;
				last->offset = last->worldorigin - worldorigin;
            last->offset = getLocalVector( last->offset );
            last->edict->s.scale *= edict->s.scale;
				}
			}
		}

	last->vlink = NULL;

   //
   // get the seat offset
   //
   if ( gi.GetBoneInfo( edict->s.modelindex, "seat", &groupindex, &tri_num, orient ) )
		{
      gi.GetBoneTransform( edict->s.modelindex, groupindex, tri_num, orient, edict->s.anim, edict->s.frame, 
			edict->s.scale, trans, driveroffset.vec3() );
      }
   driveroffset += seatoffset * edict->s.scale;
   SetDriverAngles( worldangles + seatangles );

   max_health = health;

   //
   // calculate drive mins and maxs
   //
   max = 0;
   if ( fabs( mins[ 0 ] ) > max )
      max = fabs( mins[ 0 ] );
   if ( fabs( maxs[ 0 ] ) > max )
      max = fabs( maxs[ 0 ] );
   if ( fabs( mins[ 1 ] ) > max )
      max = fabs( mins[ 1 ] );
   if ( fabs( maxs[ 1 ] ) > max )
      max = fabs( maxs[ 1 ] );
   drivemins = Vector( -max, -max, mins[ 2 ] ) * edict->s.scale;
   drivemaxs = Vector( max, max, maxs[ 2 ] ) * edict->s.scale;

   width = maxs[ 1 ] - mins[ 1 ];
   height = maxs[ 0 ] - mins[ 0 ];

   maxtracedist = height;

   Corners[ 0 ][ 0 ] = -(width/4); 
   Corners[ 0 ][ 1 ] = (height/4);
   Corners[ 0 ][ 2 ] = 0; 

   Corners[ 1 ][ 0 ] = (width/4); 
   Corners[ 1 ][ 1 ] = (height/4);
   Corners[ 1 ][ 2 ] = 0; 

   Corners[ 2 ][ 0 ] = -(width/4); 
   Corners[ 2 ][ 1 ] = -(height/4);
   Corners[ 2 ][ 2 ] = 0; 

   Corners[ 3 ][ 0 ] = (width/4); 
   Corners[ 3 ][ 1 ] = -(height/4);
   Corners[ 3 ][ 2 ] = 0; 
   if ( drivable )
      {
      // drop everything back to the floor
      droptofloor( 64 );
      Postthink();
      }
   last_origin = worldorigin;
   setSize( drivemins, drivemaxs );
	}

void Vehicle::Drivable
	(
	Event *ev
	)

	{
	setMoveType( MOVETYPE_NONE );
   drivable = true;
	}

void Vehicle::UnDrivable
	(
	Event *ev
	)

	{
	setMoveType( MOVETYPE_PUSH );
   drivable = false;
	}

void Vehicle::Jumpable
	(
	Event *ev
	)

	{
   jumpable = true;
	}

void Vehicle::Lock
	(
	Event *ev
	)

	{
   locked = true;
	}

void Vehicle::UnLock
	(
	Event *ev
	)

	{
   locked = false;
	}

void Vehicle::SteerInPlace
	(
	Event *ev
	)

	{
   steerinplace = true;
	}

void Vehicle::SeatAnglesOffset
	(
	Event *ev
	)

	{
   seatangles = ev->GetVector( 1 );
	}

void Vehicle::SeatOffset
	(
	Event *ev
	)

	{
   seatoffset = ev->GetVector( 1 );
	}

void Vehicle::SetWeapon
	(
	Event *ev
	)

	{
   showweapon = true;
   hasweapon = true;
   weaponName = ev->GetString( 1 );
	}

void Vehicle::ShowWeaponEvent
	(
	Event *ev
	)

	{
   showweapon = true;
	}

void Vehicle::DriverAnimation
	(
	Event *ev
	)

	{
   driveranim = ev->GetString( 1 );
	}

qboolean Vehicle::HasWeapon
	(
   void
	)

	{
   return hasweapon;
	}

qboolean Vehicle::ShowWeapon
	(
   void
	)

	{
   return showweapon;
	}

void Vehicle::SetDriverAngles
	(
   Vector angles
   )
   {
   int i;

   if ( !driver )
      return;

	for( i = 0; i < 3; i++ )
		{
		driver->client->ps.pmove.delta_angles[ i ] = ANGLE2SHORT( angles[ i ] - driver->client->resp.cmd_angles[ i ] );
		}
   }

/*
=============
CheckWater
=============
*/
void Vehicle::CheckWater
   (
   void
   )

   {
	Vector  point;
	int	  cont;
	int	  sample1;
	int	  sample2;
	VehicleBase *v;
	const gravityaxis_t &grav = gravity_axis[ gravaxis ];

   unlink();
	v = this;
	while( v->vlink )
		{
		v = v->vlink;
      v->unlink();
		}

   if ( driver )
      {
      driver->unlink();
      }

   //
   // get waterlevel
   //
	waterlevel = 0;
	watertype = 0;

	sample2 = maxs[ grav.z ] - mins[ grav.z ];
	sample1 = sample2 / 2;

	point[ grav.x ] = worldorigin[ grav.x ];
	point[ grav.y ] = worldorigin[ grav.y ];
	point[ grav.z ] = worldorigin[ grav.z ] + mins[ grav.z ] + grav.sign;
	cont = gi.pointcontents( point.vec3() );

	if ( cont & MASK_WATER )
	   {
		watertype = cont;
		waterlevel = 1;
		point[ grav.z ] = worldorigin[ grav.z ] + mins[ grav.z ] + sample1;
		cont = gi.pointcontents( point.vec3() );
		if ( cont & MASK_WATER )
		   {
			waterlevel = 2;
			point[ grav.z ] = worldorigin[ grav.z ] + mins[ grav.z ] + sample2;
			cont = gi.pointcontents( point.vec3() );
			if ( cont & MASK_WATER )
            {
				waterlevel = 3;
            }
		   }
	   }

   link();
	v = this;
	while( v->vlink )
		{
		v = v->vlink;
      v->link();
		}

   if ( driver )
      {
      driver->link();
      driver->waterlevel = waterlevel;
      driver->watertype = watertype;
      }
   }
   
/*
=============
WorldEffects
=============
*/
void Vehicle::WorldEffects
	(
	void
	)

	{
   //
   // Check for earthquakes
   //
   if ( groundentity && ( level.earthquake > level.time ) )
      {
      velocity += Vector(EARTHQUAKE_STRENGTH*G_CRandom(),EARTHQUAKE_STRENGTH*G_CRandom(),fabs(50*G_CRandom()));
      }

   //
   // check for lava
   //
   if ( watertype & CONTENTS_LAVA )
      {
   	Damage( world, world, 20 * waterlevel, worldorigin, vec_zero, vec_zero, 0, DAMAGE_NO_ARMOR, MOD_LAVA, -1, -1, 1.0f );
      }
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本免费新一区视频| 91精品国产乱码| 91福利视频久久久久| 欧美一级精品在线| 18成人在线观看| 亚洲一线二线三线视频| 豆国产96在线|亚洲| 日韩欧美色电影| 亚洲h精品动漫在线观看| www.色精品| 久久日韩粉嫩一区二区三区| 日本道精品一区二区三区| 国产精品丝袜在线| 精品处破学生在线二十三| 亚洲国产成人av好男人在线观看| 懂色一区二区三区免费观看| 欧美在线制服丝袜| 亚洲啪啪综合av一区二区三区| 日本二三区不卡| 日韩高清国产一区在线| 欧美精品一区二区三区在线播放| 成人激情免费网站| 夜夜操天天操亚洲| 精品国产91久久久久久久妲己 | 久久久午夜精品理论片中文字幕| 天堂在线亚洲视频| 久久久99久久| 国产成人av电影在线| 日韩一级免费观看| 成人免费视频一区| 日韩av一级片| 中文字幕在线不卡一区| 欧美日韩大陆一区二区| 精东粉嫩av免费一区二区三区| 国产精品色哟哟网站| 欧美日韩精品一区二区三区蜜桃| 黄页网站大全一区二区| 亚洲精品欧美在线| 久久久一区二区| 欧美午夜一区二区三区免费大片| 国内精品伊人久久久久av影院| 亚洲蜜桃精久久久久久久| 日韩欧美国产高清| 一本高清dvd不卡在线观看 | 日韩电影免费一区| 成人欧美一区二区三区白人| 精品av久久707| 欧美人与禽zozo性伦| 本田岬高潮一区二区三区| 日本亚洲视频在线| 亚洲三级在线免费| 久久久www免费人成精品| 欧美日韩亚洲综合一区 | 18成人在线视频| 日韩丝袜美女视频| 欧美羞羞免费网站| 99久久精品国产麻豆演员表| 久久99热99| 亚洲成人午夜影院| 亚洲三级在线看| 中文一区二区完整视频在线观看 | 福利电影一区二区| 日本vs亚洲vs韩国一区三区二区 | 精品福利在线导航| 欧美精品久久99久久在免费线| 99在线视频精品| 国产乱国产乱300精品| 日本女优在线视频一区二区| 欧洲日韩一区二区三区| 国产日韩欧美一区二区三区乱码| 91精品视频网| 欧美日韩精品一二三区| 欧美在线观看一区| 91免费版在线看| 不卡免费追剧大全电视剧网站| 国产一区二区精品久久91| 久久精品理论片| 久久精品国产精品青草| 琪琪久久久久日韩精品| 天堂va蜜桃一区二区三区漫画版| 亚洲一级二级三级| 亚洲一二三四区| 亚洲午夜一二三区视频| 亚洲一区二区精品视频| 亚洲国产视频一区二区| 亚洲一区二区三区四区在线免费观看| 亚洲欧美福利一区二区| 日韩一区在线播放| 一区二区三区在线不卡| 一区二区三区高清| 三级影片在线观看欧美日韩一区二区| 一区二区三区中文字幕| 亚洲综合激情另类小说区| 亚洲成人免费影院| 日韩国产欧美在线播放| 天天免费综合色| 久久精工是国产品牌吗| 国产最新精品免费| 国产盗摄一区二区三区| 91社区在线播放| 欧美自拍偷拍一区| 在线观看视频一区| 欧美午夜电影一区| 精品国产伦一区二区三区观看体验 | 日韩免费视频一区| 精品亚洲成a人在线观看| 一区二区三区自拍| 亚洲18影院在线观看| 美女网站色91| 成人免费观看视频| 91美女精品福利| 午夜a成v人精品| 久久久久久影视| 亚洲精品免费看| 久久成人18免费观看| a亚洲天堂av| 51精品视频一区二区三区| 久久久久国产精品人| 亚洲美女在线一区| 久久99精品久久久久久国产越南| 国产麻豆精品95视频| 色婷婷综合久久久| 精品国产免费久久| 一二三区精品视频| 国产很黄免费观看久久| 欧美综合一区二区三区| 日本一区二区三级电影在线观看| 亚洲一区二区三区四区在线观看| 国产精品一区二区你懂的| 99re66热这里只有精品3直播| 欧美一区二区三区四区五区| 国产精品理伦片| 激情综合色播五月| 欧美美女一区二区在线观看| 国产精品丝袜91| 久久99九九99精品| 欧美日韩在线电影| 国产精品二区一区二区aⅴ污介绍| 午夜电影一区二区| 成人av第一页| 久久亚洲精华国产精华液| 午夜精品影院在线观看| 不卡高清视频专区| 国产欧美一区二区精品仙草咪| 五月天视频一区| 91久久奴性调教| 国产精品久久久久久亚洲毛片| 久久国产尿小便嘘嘘尿| 欧美疯狂性受xxxxx喷水图片| 亚洲欧美日韩电影| 国产成人福利片| 26uuuu精品一区二区| 人人狠狠综合久久亚洲| 欧美性色综合网| 夜夜嗨av一区二区三区| 9l国产精品久久久久麻豆| 久久婷婷一区二区三区| 美女一区二区久久| 777奇米成人网| 日韩一区精品视频| 欧美久久久一区| 视频一区视频二区中文| 欧美日韩一区二区三区四区 | 91久久一区二区| 中文字幕综合网| 不卡av在线免费观看| 欧美国产禁国产网站cc| 韩国精品一区二区| 国产午夜亚洲精品理论片色戒| 国产精品一区二区黑丝| 久久亚洲一区二区三区明星换脸| 久88久久88久久久| 国产日韩精品一区二区三区| 国产成人在线看| 国产精品久久久久9999吃药| 成人免费观看av| 亚洲精品一二三| 欧美日韩亚洲综合| 久久不见久久见免费视频7| 欧美tickling挠脚心丨vk| 韩日av一区二区| 亚洲国产精品成人综合色在线婷婷| 国产69精品久久777的优势| 国产精品二三区| 欧美欧美欧美欧美首页| 免费观看久久久4p| 精品国产免费久久| 成人白浆超碰人人人人| 亚洲一区二区三区四区五区中文| 精品视频一区 二区 三区| 久久电影网电视剧免费观看| 久久久久久久久久久久电影| 成人午夜av影视| 亚洲国产日韩av| 日韩精品一区二区在线| 成人三级伦理片| 石原莉奈一区二区三区在线观看| 久久嫩草精品久久久精品| 99re热这里只有精品免费视频 | 麻豆精品蜜桃视频网站|