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

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

?? mover.cpp

?? this keik game source
?? CPP
字號:
//-----------------------------------------------------------------------------
//
//  $Logfile:: /Quake 2 Engine/Sin/code/game/mover.cpp                        $
// $Revision:: 18                                                             $
//   $Author:: Jimdose                                                        $
//     $Date:: 10/24/98 8:30p                                                 $
//
// 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/mover.cpp                             $
// 
// 18    10/24/98 8:30p Jimdose
// fixed door revolving bug
// 
// 17    9/03/98 9:08p Jimdose
// Added checks for negative speeds in MoveTo
// 
// 16    8/29/98 9:44p Jimdose
// Made SV_ commands begin with G_
// 
// 15    5/03/98 4:36p Jimdose
// Changed Vector class
// 
// 14    4/06/98 6:42p Jimdose
// the minimum movetime is now FRAMETIME so that we don't get into any infinite
// loops with scripts
// 
// 13    4/05/98 1:58a Jimdose
// Mover now only modifies avelocity  if there's angular movement and velocity
// if there's translational movement.  This allows us to move and have
// continual rotation
// 
// 12    3/24/98 5:00p Jimdose
// Made MoveDone post a new EV_MoveDone instead of postponing the old one
// (which had already been executed, oops!)
// 
// 11    3/23/98 1:31p Jimdose
// Revamped event and command system
// 
// 10    3/11/98 2:24p Jimdose
// Now quantize movetimes to nearest multiple of FRAMETIME
// 
// 9     3/02/98 8:49p Jimdose
// Changed the classid parameter of CLASS_DECLARATION to a quoted string so
// that you could have a NULL classid.
// 
// 8     2/21/98 1:12p Jimdose
// Fixed bug where EVENT_MOVEDONE was allowing the event to pass to the
// superclass
// 
// 7     2/18/98 8:01p Jimdose
// Pending EVENT_MOVEDONEs are cancelled when starting a new move.
// 
// 6     2/16/98 2:12p Jimdose
// Made MoveDone do a PushMove instead of a setOrigin so that blocking works
// correctly at the end of moves
// 
// 5     2/03/98 10:45a Jimdose
// Updated to work with Quake 2 engine
// Made changeover from hackthinker to events
// 
// 3     10/27/97 3:29p Jimdose
// Removed dependency on quakedef.h
// 
// 2     9/26/97 5:23p Jimdose
// Added standard Ritual headers
//
// DESCRIPTION:
// Base class for any object that needs to move to specific locations over a
// period of time.  This class is kept separate from most entities to keep
// class size down for objects that don't need such behavior.
// 

#include "g_local.h"
#include "entity.h"
#include "trigger.h"
#include "mover.h"

#define MOVE_ANGLES 1
#define MOVE_ORIGIN 2

CLASS_DECLARATION( Trigger, Mover, "mover" );

ResponseDef Mover::Responses[] =
	{
	   { &EV_MoveDone, ( Response )Mover::MoveDone },
		{ NULL, NULL }
	};

EXPORT_FROM_DLL void Mover::MoveDone
	(
	Event *ev
	)

	{
	Vector move;
	Vector amove;

	// zero out the movement
	if ( moveflags & MOVE_ANGLES )
		{
		avelocity = vec_zero;
		amove = angledest - angles;
		}
	else
		{
		amove = vec_zero;
		}

	if ( moveflags & MOVE_ORIGIN )
		{
		velocity	= vec_zero;
		move = finaldest - origin;
		}
	else
		{
		move = vec_zero;
		}

	if ( !G_PushMove( this, move, amove ) )
		{
		// Delay finish till we can move into the final position
		PostEvent( EV_MoveDone, FRAMETIME );
		return;
		}

	//
	// After moving, set origin to exact final destination
	//
	if ( moveflags & MOVE_ORIGIN )
		{
		setOrigin( finaldest );
		}

	if ( moveflags & MOVE_ANGLES )
		{
		angles = angledest;

		if ( ( angles.x >= 360 ) || ( angles.x < 0 ) )
			{
			angles.x -= ( (int)angles.x / 360 ) * 360;
			}
		if ( ( angles.y >= 360 ) || ( angles.y < 0 ) )
			{
			angles.y -= ( (int)angles.y / 360 ) * 360;
			}
		if ( ( angles.z >= 360 ) || ( angles.z < 0 ) )
			{
			angles.z -= ( (int)angles.z / 360 ) * 360;
			}
		}

	ProcessEvent( endevent );
	}

/*
=============
MoveTo

calculate self.velocity and self.nextthink to reach dest from
self.origin traveling at speed
===============
*/
EXPORT_FROM_DLL void Mover::MoveTo
	( 
	Vector	tdest,
	Vector	angdest,
	float		tspeed,
	Event		&event
	)

	{
	Vector vdestdelta;
	Vector angdestdelta;
	float  len;
	float  traveltime;
	
	assert( tspeed >= 0 );

	if ( !tspeed )
		{
		error( "MoveTo", "No speed is defined!" );
		}

	if ( tspeed < 0 )
		{
		error( "MoveTo", "Speed is negative!" );
		}

	// Cancel previous moves
	CancelEventsOfType( EV_MoveDone );

	moveflags = 0;

	endevent = event;
	finaldest = tdest;
	angledest = angdest;

	if ( finaldest != origin )
		{
		moveflags |= MOVE_ORIGIN;
		}
	if ( angledest != angles )
		{
		moveflags |= MOVE_ANGLES;
		}

   if ( !moveflags )
      {
      // stop the object from moving
      velocity = vec_zero;
      avelocity = vec_zero;

      // post the event so we don't wait forever
   	PostEvent( EV_MoveDone, FRAMETIME );
      return;
      }

	// set destdelta to the vector needed to move
	vdestdelta = tdest - origin;
	angdestdelta = angdest - angles;

	if ( tdest == origin )
		{
		// calculate length of vector based on angles
		len = angdestdelta.length();
		}
	else
		{
		// calculate length of vector based on distance
		len = vdestdelta.length();
		}

	// divide by speed to get time to reach dest
	traveltime = len / tspeed;

	// Quantize to FRAMETIME
	traveltime *= ( 1 / FRAMETIME );
	traveltime = ( float )( (int)traveltime ) * FRAMETIME;
	if ( traveltime < FRAMETIME )
		{
		traveltime = FRAMETIME;
		vdestdelta = vec_zero;
      angdestdelta = vec_zero;
		}

	// scale the destdelta vector by the time spent traveling to get velocity
	if ( moveflags & MOVE_ORIGIN )
		{
		velocity = vdestdelta * ( 1 / traveltime );
		}

	if ( moveflags & MOVE_ANGLES )
		{
		avelocity = angdestdelta * ( 1 / traveltime );
		}

	PostEvent( EV_MoveDone, traveltime );
	}

/*
=============
LinearInterpolate
===============
*/
EXPORT_FROM_DLL void Mover::LinearInterpolate
	( 
	Vector tdest,
	Vector angdest,
	float time,
	Event &event
	)

	{
	Vector vdestdelta;
	Vector angdestdelta;
	float t;

	endevent = event;
	finaldest = tdest;
	angledest = angdest;

	// Cancel previous moves
	CancelEventsOfType( EV_MoveDone );

	// Quantize to FRAMETIME
	time *= ( 1 / FRAMETIME );
	time = ( float )( (int)time ) * FRAMETIME;
	if ( time < FRAMETIME )
		{
		time = FRAMETIME;
		}
	
	moveflags = 0;
	t = 1 / time;
	// scale the destdelta vector by the time spent traveling to get velocity
	if ( finaldest != origin )
		{
		vdestdelta = tdest - origin;
		velocity = vdestdelta * t;
		moveflags |= MOVE_ORIGIN;
		}

	if ( angledest != angles )
		{
		angdestdelta = angdest - angles;
		avelocity = angdestdelta * t;
		moveflags |= MOVE_ANGLES;
		}

	PostEvent( EV_MoveDone, time );
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美色网一区二区| 在线视频一区二区三| 亚洲va韩国va欧美va| 亚洲欧美日韩中文字幕一区二区三区| 久久综合99re88久久爱| 久久奇米777| 久久久久久久网| 国产精品久久久久久亚洲毛片| 日本一区二区三区四区 | 日日夜夜一区二区| 日韩精品一级二级| 狂野欧美性猛交blacked| 美国三级日本三级久久99| 久久不见久久见免费视频7| 国产九九视频一区二区三区| 成人福利在线看| 欧洲另类一二三四区| 欧洲精品在线观看| 91精品国产综合久久久久久久久久| 欧美一区二区三区视频在线 | 精品国产免费视频| 中文字幕中文字幕一区| 亚洲激情一二三区| 日本不卡123| 成人黄色在线网站| 欧美精品色一区二区三区| 日韩精品一区二区三区中文精品 | 欧美在线短视频| 日韩欧美一二三区| 亚洲人成精品久久久久久| 日日噜噜夜夜狠狠视频欧美人| 国产一区在线观看视频| 91蜜桃传媒精品久久久一区二区 | 国产一区在线视频| 欧美亚洲国产一区在线观看网站| 欧美人妇做爰xxxⅹ性高电影| 精品欧美一区二区久久| 亚洲男女毛片无遮挡| 久久97超碰色| 欧美无乱码久久久免费午夜一区| 久久综合久久久久88| 亚洲国产一区二区三区青草影视| 经典三级视频一区| 欧美伊人久久久久久久久影院| 日韩免费一区二区三区在线播放| 亚洲精品美国一| 国产69精品久久久久毛片| 91精品国产免费| 亚洲一区免费在线观看| 国产精品91一区二区| 日韩一区二区在线播放| 一区二区高清免费观看影视大全 | av在线综合网| 久久蜜桃av一区精品变态类天堂| 亚洲成人av中文| 色av综合在线| 中文字幕乱码日本亚洲一区二区| 毛片不卡一区二区| 欧美日韩成人激情| 亚洲福中文字幕伊人影院| 99这里只有精品| 国产精品久久久久久久久久免费看 | 成人国产一区二区三区精品| 欧美不卡视频一区| 午夜成人在线视频| 欧美高清精品3d| 亚洲成人午夜电影| 欧美日韩黄色影视| 亚洲另类一区二区| 色琪琪一区二区三区亚洲区| 亚洲欧洲成人av每日更新| 国产999精品久久久久久 | 成人av电影观看| 国产区在线观看成人精品 | 久久91精品国产91久久小草| 5月丁香婷婷综合| 日韩精品免费视频人成| 91精品国产91久久久久久最新毛片| 亚洲第一福利视频在线| 欧美制服丝袜第一页| 亚洲国产日产av| 欧美日韩国产一级二级| 免费看日韩a级影片| 日韩欧美中文一区二区| 国产91露脸合集magnet| 中文字幕中文字幕中文字幕亚洲无线| heyzo一本久久综合| 亚洲精品中文在线影院| 欧美日韩视频专区在线播放| 日日嗨av一区二区三区四区| 日韩视频一区二区在线观看| 国内成人精品2018免费看| 国产清纯美女被跳蛋高潮一区二区久久w | 夜夜揉揉日日人人青青一国产精品| 91浏览器打开| 日本va欧美va精品| 国产女人aaa级久久久级| 色婷婷国产精品| 日韩精品久久理论片| 久久久99精品免费观看不卡| 99国产精品久| 青娱乐精品在线视频| 国产日韩欧美麻豆| 欧美三级资源在线| 国产丶欧美丶日本不卡视频| 亚洲激情网站免费观看| 欧美成人午夜电影| 色丁香久综合在线久综合在线观看| 日本aⅴ免费视频一区二区三区| 国产女主播视频一区二区| 欧美色窝79yyyycom| 国产激情视频一区二区三区欧美 | 亚洲国产精品精华液2区45| 欧美写真视频网站| 国产成人在线色| 亚洲va国产va欧美va观看| 国产欧美日韩在线视频| 欧美一区二区日韩一区二区| 91丨九色丨黑人外教| 久久疯狂做爰流白浆xx| 亚洲已满18点击进入久久| 国产欧美日韩综合精品一区二区| 欧美日本高清视频在线观看| 99re在线精品| 国产成人精品三级| 日本成人在线电影网| 亚洲图片激情小说| 国产视频不卡一区| 久久一区二区视频| 91精品国模一区二区三区| 91麻豆精品视频| 福利电影一区二区三区| 全部av―极品视觉盛宴亚洲| 亚洲伊人色欲综合网| 亚洲美女免费在线| 国产精品久久久久久久岛一牛影视| 欧美成人女星排行榜| 欧美剧在线免费观看网站| 色婷婷av一区二区三区gif| 成年人网站91| proumb性欧美在线观看| 成人国产精品免费网站| 懂色av中文字幕一区二区三区 | 日本成人中文字幕| 香蕉影视欧美成人| 亚洲国产成人av网| 午夜一区二区三区视频| 亚洲成人av资源| 三级久久三级久久久| 视频一区中文字幕| 欧美96一区二区免费视频| 免费精品99久久国产综合精品| 丝袜诱惑制服诱惑色一区在线观看| 亚洲综合一二三区| 性欧美疯狂xxxxbbbb| 亚洲午夜久久久久中文字幕久| 艳妇臀荡乳欲伦亚洲一区| 一区二区三区欧美日韩| 亚洲.国产.中文慕字在线| 天天综合网 天天综合色| 日韩国产高清在线| 久久se精品一区二区| 国产呦萝稀缺另类资源| 不卡欧美aaaaa| 欧美亚洲一区二区在线| 日韩亚洲欧美在线观看| 国产午夜精品一区二区三区嫩草| 国产精品无码永久免费888| 亚洲欧美日韩国产综合在线| 亚洲3atv精品一区二区三区| 激情亚洲综合在线| av在线不卡电影| 欧美图区在线视频| wwwwww.欧美系列| 亚洲色图欧美偷拍| 久久精品国产澳门| 成人h动漫精品一区二| 欧美日韩一区视频| 久久你懂得1024| 亚洲一级片在线观看| 狠狠色狠狠色合久久伊人| 成人app下载| 欧美一区二区三区日韩| 亚洲欧洲av在线| 老司机精品视频在线| 91在线视频网址| 欧美成人国产一区二区| 亚洲视频在线观看一区| 免费精品视频最新在线| 91免费国产在线| 日韩美女在线视频| 亚洲最新视频在线播放| 国产一区二区美女| 欧美日韩专区在线| 国产精品卡一卡二| 国产精品99久久久久久有的能看 | 亚洲一区二区三区四区在线免费观看| 蜜臀久久99精品久久久久久9| 91小视频免费看| 欧美成va人片在线观看|