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); }
//--------------------------------------------------------- //--------------------------------------------------------- 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; }