示例#1
0
void CChunkTrees::CreateTreeVBO()
{
	if (s_iTreeVBO != ~0)
		return;

	Vector vecRight(0, 0, 2.5f);
	Vector vecUp(0, 10, 0);

	Vector v1 = -vecRight + vecUp;
	Vector v2 = -vecRight;
	Vector v3 = vecRight;
	Vector v4 = vecRight + vecUp;

	CRenderingContext r(GameServer()->GetRenderer());

	r.BeginRenderTris();
		r.TexCoord(0.0f, 1.0f);
		r.Vertex(v1);
		r.TexCoord(0.0f, 0.0f);
		r.Vertex(v2);
		r.TexCoord(1.0f, 0.0f);
		r.Vertex(v3);
		r.TexCoord(0.0f, 1.0f);
		r.Vertex(v1);
		r.TexCoord(1.0f, 0.0f);
		r.Vertex(v3);
		r.TexCoord(1.0f, 1.0f);
		r.Vertex(v4);
	r.CreateVBO(s_iTreeVBO, s_iTreeVBOSize);
}
示例#2
0
//---------------------------------------------------------
//---------------------------------------------------------
bool CAI_FreePass::ShouldAllowFVisible(bool bBaseResult )
{
	CBaseEntity *	pTarget 	= GetPassTarget();
	AI_EnemyInfo_t *pTargetInfo = GetOuter()->GetEnemies()->Find( pTarget );
	
	if ( !bBaseResult || HasPass() )
		return false;
		
	bool bIsVisible = true;
		
	// Peek logic
	if ( m_Params.peekTime > 0.1 )
	{
		float lastTimeSeen = (pTargetInfo) ? pTargetInfo->timeLastSeen : AI_INVALID_TIME;
		float lastTimeDamagedBy = (pTargetInfo) ? pTargetInfo->timeLastReceivedDamageFrom : AI_INVALID_TIME;
		
		if ( ( lastTimeSeen == AI_INVALID_TIME || gpGlobals->curtime - lastTimeSeen > m_Params.peekTime ) &&
			 ( lastTimeDamagedBy == AI_INVALID_TIME || gpGlobals->curtime - lastTimeDamagedBy > m_Params.peekTimeAfterDamage ) )
		{
			Vector vToTarget;

			VectorSubtract( pTarget->EyePosition(), GetOuter()->EyePosition(), vToTarget );
			vToTarget.z = 0.0f;
			VectorNormalize( vToTarget );

			Vector vecRight( -vToTarget.y, vToTarget.x, 0.0f );
			trace_t	tr;

			UTIL_TraceLine( GetOuter()->EyePosition(), pTarget->EyePosition() + (vecRight * m_Params.peekEyeDist - Vector( 0, 0, m_Params.peekEyeDistZ )), MASK_OPAQUE, GetOuter(), COLLISION_GROUP_NONE, &tr );
			if ( tr.fraction != 1.0 && tr.m_pEnt != pTarget )
			{
				if ( free_pass_peek_debug.GetBool() )
					NDebugOverlay::Line( tr.startpos, tr.endpos - Vector( 0, 0, 2), 0, 255, 0, false, 0.1 );
				bIsVisible = false;
			}
			
			if ( bIsVisible )
			{
				UTIL_TraceLine( GetOuter()->EyePosition(), pTarget->EyePosition() + (-vecRight * m_Params.peekEyeDist - Vector( 0, 0, m_Params.peekEyeDistZ )), MASK_OPAQUE, GetOuter(), COLLISION_GROUP_NONE, &tr );
				if ( tr.fraction != 1.0 && tr.m_pEnt != pTarget )
				{
					if ( free_pass_peek_debug.GetBool() )
						NDebugOverlay::Line( tr.startpos, tr.endpos - Vector( 0, 0, 2), 0, 255, 0, false, 0.1 );
					bIsVisible = false;
				}
			}
		}
		
		if ( bIsVisible && free_pass_peek_debug.GetBool() )
			NDebugOverlay::Line( GetOuter()->EyePosition(), pTarget->EyePosition() - Vector( 0, 0, 2), 255, 0, 0, false, 0.1 );
	}

	return bIsVisible;
}
	vector<TreeNode*> generateTrees(int start, int end) {
		vector<TreeNode*> ret;
		if(start > end) {
			ret.push_back(NULL);
			return ret;
		}
		for(int i = start; i <= end; ++i) {
			vector<TreeNode*> vecLeft(generateTrees(start, i - 1));
			vector<TreeNode*> vecRight(generateTrees(i + 1, end));
			for(int l = 0; l < vecLeft.size(); ++l)
				for(int r = 0; r < vecRight.size(); ++r) {
					TreeNode *root = new TreeNode(i);
					root->left = vecLeft[l];
					root->right = vecRight[r];
					ret.push_back(root);
				}
		}
		return ret;
	}