Beispiel #1
0
void	Rail_Initialize()
{
	for (int lane=0; lane<mRailLanes.size(); lane++)
	{
		mRailLanes[lane].Initialize();
	}

	for (int mover=0; mover<mRailMovers.size(); mover++)
	{
		mRailMovers[mover].Initialize();
	}

	// Precache All The Woosh Sounds
	//-------------------------------
	if (!mRailMovers.empty())
	{
		mWooshMed.push_back(G_SoundIndex("sound/effects/woosh1"));
		mWooshSml.push_back(G_SoundIndex("sound/effects/woosh2"));
		mWooshMed.push_back(G_SoundIndex("sound/effects/woosh3"));
		mWooshSml.push_back(G_SoundIndex("sound/effects/woosh4"));
		mWooshLar.push_back(G_SoundIndex("sound/effects/woosh5"));
		mWooshSml.push_back(G_SoundIndex("sound/effects/woosh6"));
		mWooshSup.push_back(G_SoundIndex("sound/effects/woosh7"));
		mWooshSup.push_back(G_SoundIndex("sound/effects/woosh8"));
		mWooshSup.push_back(G_SoundIndex("sound/effects/woosh9"));
		mWooshLar.push_back(G_SoundIndex("sound/effects/woosh10"));
		mWooshLar.push_back(G_SoundIndex("sound/effects/woosh11"));
		mWooshLar.push_back(G_SoundIndex("sound/effects/woosh12"));
		mWooshSml.push_back(G_SoundIndex("sound/effects/woosh13"));
		mWooshMed.push_back(G_SoundIndex("sound/effects/woosh14"));
		mWooshMed.push_back(G_SoundIndex("sound/effects/woosh15"));
		mWooshMed.push_back(G_SoundIndex("sound/effects/woosh16"));
		mWooshSml.push_back(G_SoundIndex("sound/effects/woosh17"));
		mWooshMed.push_back(G_SoundIndex("sound/effects/woosh18"));
		mWooshMed.push_back(G_SoundIndex("sound/effects/woosh19"));
		mWooshMed.push_back(G_SoundIndex("sound/effects/woosh20"));
		mWooshMed.push_back(G_SoundIndex("sound/effects/woosh21"));
		mWooshLar.push_back(G_SoundIndex("sound/effects/woosh22"));
		mWooshLar.push_back(G_SoundIndex("sound/effects/woosh23"));
		mWooshSup.push_back(G_SoundIndex("sound/effects/woosh24"));
		mWooshSup.push_back(G_SoundIndex("sound/effects/woosh25"));
		mWooshMed.push_back(G_SoundIndex("sound/effects/woosh26"));
		mWooshMed.push_back(G_SoundIndex("sound/effects/woosh27"));
		mWooshMed.push_back(G_SoundIndex("sound/effects/woosh28"));
		mWooshLar.push_back(G_SoundIndex("sound/effects/woosh29"));
		mWooshTun.push_back(G_SoundIndex("sound/effects/whoosh_tunnel"));
	}
}
Beispiel #2
0
bool	Pilot_AnyVehiclesRegistered()
{
	return (!mRegistered.empty());
}
Beispiel #3
0
void	CRailTrack::Update()
{
	mNextUpdateTime = level.time + mNextUpdateDelay;


	// Now, Attempt To Add A Number Of Movers To The Track
	//-----------------------------------------------------
	int		attempt;
	int		startCol;
	int		stopCol;
	int		atCol;
	int		testColIndex;

	for (attempt=0; attempt<mNumMoversPerRow; attempt++)
	{
		// Randomly Select A Mover And Test To See If It Is Active
		//---------------------------------------------------------
		CRailMover*	mover = mMovers[Q_irand(0, mMovers.size()-1)];
		if (mover->Active())
		{
			continue;
		}

		// Don't Spawn Until Start Time Has Expired
		//------------------------------------------
		if (level.time < ((mover->mLane)?(mover->mLane->mStartTime):(mStartTime)))
		{
			continue;
		}

		// If Center Locked, Stop Spawning Center Track Movers
		//-----------------------------------------------------
		if (mover->mCenter && mCenterLocked)
		{
			continue;
		}
	

		// Restrict It To A Lane
		//-----------------------
		if (mover->mLane)
		{
			startCol	= mover->mLane->mMinCol;
			stopCol		= mover->mLane->mMaxCol+1;
		}

		// Or Let It Go Anywhere On The Track
		//------------------------------------
		else
		{
			startCol	= 0;
			stopCol		= mCols;
		}
		stopCol -= (mover->mCols-1);


		// If The Mover Is Too Big To Fit In The Lane, Go On To Next Attempt
		//-------------------------------------------------------------------
		if (stopCol<=startCol)
		{
			assert(0);	// Should Not Happen
			continue;
		}

		// Force It To Center
		//--------------------
		if (mover->mCenter && stopCol!=(startCol+1))
		{
			startCol	= ((mCols/2) - (mover->mCols/2));
			stopCol		= startCol+1;
		}


		// Construct A List Of Columns To Test For Insertion
		//---------------------------------------------------
		mTestCols.clear();
		for (int i=startCol; i<stopCol; i++)
		{
			mTestCols.push_back(i);
		}

		// Now Try All The Cols To See If The Building Can Fit
		//-----------------------------------------------------
		while (!mTestCols.empty())
		{
			// Randomly Pick A Column, Then Remove It From The Vector
			//--------------------------------------------------------
			testColIndex = Q_irand(0, mTestCols.size()-1);
			atCol = mTestCols[testColIndex];
			mTestCols.erase_swap(testColIndex);

			if (TestMoverInCells(mover, atCol))
			{
				// Ok, We've Found A Safe Column To Insert This Mover
				//----------------------------------------------------
				InsertMoverInCells(mover, atCol);

				// Now Transport The Actual Mover Entity Into Position, Link It & Send It Off
				//----------------------------------------------------------------------------
				CVec3	StartPos(mGridBottomLeftCorner);
				StartPos[mWAxis] += ((atCol * mGridCellSize) + ((mover->mCols/2.0f) * mGridCellSize));
				StartPos[mHAxis] += (((mover->mRows/2.0f) * mGridCellSize) * ((mNegative)?(1):(-1)));
				StartPos[2] = 0;

				// If Centered, Actually Put It At EXACTLY The Right Position On The Width Axis
				//------------------------------------------------------------------------------
				if (mover->mCenter)
				{
					StartPos[mWAxis] = mGridCenter[mWAxis];
					float	deltaOffset = mGridCenter[mWAxis] - mover->mOriginOffset[mWAxis];
					if (deltaOffset<(mGridCellSize*0.5f) )
					{
						StartPos[mWAxis] -= deltaOffset;
					}
				}

				StartPos -= mover->mOriginOffset;
				G_SetOrigin(mover->mEnt, StartPos.v);

				// Start It Moving
				//-----------------
				VectorCopy(StartPos.v, mover->mEnt->s.pos.trBase);
				VectorCopy(mVelocity.v, mover->mEnt->s.pos.trDelta);
				mover->mEnt->s.pos.trTime		= level.time;
				mover->mEnt->s.pos.trDuration	= mTravelTimeMilliseconds + (mNextUpdateDelay*mover->mRows);
				mover->mEnt->s.pos.trType		= TR_LINEAR_STOP;
				mover->mEnt->s.eFlags			&= ~EF_NODRAW;

				mover->mSoundPlayed				= false;


				// Successfully Inserted This Mover.  Now Move On To The Next Mover
				//------------------------------------------------------------------
				break;
			}
		}
	}

	// Incriment The Current Row
	//---------------------------
	mRow++;
	if (mRow>=mRows)
	{
		mRow = 0;
	}

	// Erase The Erase Row
	//---------------------
	int	EraseRow = mRow - MAX_ROW_HISTORY;
	if (EraseRow<0)
	{
		EraseRow += mRows;
	}
	for (int col=0; col<mCols; col++)
	{
		mCells.get(col, EraseRow) = 0;
	}
}