这篇教程C++ GetRandom函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中GetRandom函数的典型用法代码示例。如果您正苦于以下问题:C++ GetRandom函数的具体用法?C++ GetRandom怎么用?C++ GetRandom使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了GetRandom函数的30个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: defined// ----------------------------------------------------------------------- ////// ROUTINE: CSoundSet::GetRandomFile()//// PURPOSE: Get a random sound from the set//// ----------------------------------------------------------------------- //const char* CSoundSet::GetRandomFile(){ //if we're not set up or we have no files, bail if (!m_hRecord || !m_nTotalWeight || !m_vecWeights.size()) return "";#if defined(PLATFORM_WIN32) || defined(PLATFORM_LINUX) HATTRIBUTE hFiles = g_pLTDatabase->GetAttribute(m_hRecord,SndDB_sSoundFile); //only got one, return it if (m_vecWeights.size() == 1) return g_pLTDatabase->GetString(hFiles,0,""); uint32 nRand = GetRandom(0,m_nTotalWeight-1); for (uint32 n = 0; n < m_vecWeights.size(); ++n) { if (nRand < m_vecWeights[n]) return g_pLTDatabase->GetString(hFiles,n,""); } //if we got this far, just return the first value return g_pLTDatabase->GetString(hFiles,0,"");#endif // PLATFORM_WIN32 || PLATFORM_LINUX#ifdef PLATFORM_XENON HATTRIBUTE hCue = g_pLTDatabase->GetAttribute(m_hRecord,SndDB_sXActCue); if (hCue) { return g_pLTDatabase->GetString(hCue,0,""); } else { return ""; }#endif // PLATFORM_XENON}
开发者ID:jordandavidson,项目名称:lithtech,代码行数:45,
示例2: GetRandombool CMusicMgr::SetMood( Mood eMood ){ char szMusic[128]; uint32 iLevel = GetRandom(0, m_acMoods[eMood]-1); sprintf(szMusic, "MUSIC I %d measure", m_aanMoods[eMood][iLevel]);#ifndef _FINAL if ( g_ShowMusicTrack.GetFloat() > 0 ) { g_pLTServer->CPrint("Server sending client Music Message: (%s)", szMusic); }#endif HSTRING hMusic = g_pLTServer->CreateString(szMusic); CAutoMessage cMsg; cMsg.Writeuint8(MID_MUSIC); cMsg.WriteHString(hMusic); g_pLTServer->SendToClient(cMsg.Read(), LTNULL, MESSAGE_GUARANTEED); FREE_HSTRING(hMusic); m_eLastMood = eMood; return true;}
开发者ID:rickyharis39,项目名称:nolf2,代码行数:23,
示例3: GetRandom// ----------------------------------------------------------------------- ////// ROUTINE: CSoundSet::GetRandomAltFile()//// PURPOSE: Get a random alternate sound from the set//// ----------------------------------------------------------------------- //const char* CSoundSet::GetRandomAltFile(){ //if we're not set up or we have no files, bail if (!m_hRecord || !m_nAltTotalWeight || !m_vecAltWeights.size()) return ""; HATTRIBUTE hFiles = g_pLTDatabase->GetAttribute(m_hRecord,SndDB_sAltSoundFile); //only got one, return it if (m_vecAltWeights.size() == 1) return g_pLTDatabase->GetString(hFiles,0,""); uint32 nRand = GetRandom(0,m_nAltTotalWeight-1); for (uint32 n = 0; n < m_vecAltWeights.size(); ++n) { if (nRand < m_vecAltWeights[n]) return g_pLTDatabase->GetString(hFiles,n,""); } //if we got this far, just return the first value return g_pLTDatabase->GetString(hFiles,0,"");}
开发者ID:jordandavidson,项目名称:lithtech,代码行数:30,
示例4: GetCurrentExposureTime//// Translate Exposure settings into a "current value".//LONGLONGCHardwareSimulation::GetCurrentExposureTime(){ PAGED_CODE(); ISP_FRAME_SETTINGS *pSettings = GetIspSettings(); LONGLONG Value = 0; LPCSTR Mode = "[UNKNOWN]"; if( pSettings->ExposureMode & KSCAMERA_EXTENDEDPROP_VIDEOPROCFLAG_AUTO ) { // Get random value in global setting's bound (LONG) // I'm abandoning the reported min/max and using something more reasonable. Value = GetRandom( MIN_EXPOSURE_TIME*5, DEF_EXPOSURE_TIME*5 ); Mode = "KSCAMERA_EXTENDEDPROP_VIDEOPROCFLAG_AUTO"; } if( pSettings->ExposureMode & KSCAMERA_EXTENDEDPROP_VIDEOPROCFLAG_MANUAL ) { Value = pSettings->ExposureSetting.VideoProc.Value.ll; Mode = "KSCAMERA_EXTENDEDPROP_VIDEOPROCFLAG_MANUAL"; } // Locked just reports the last value set... if( pSettings->ExposureMode & KSCAMERA_EXTENDEDPROP_VIDEOPROCFLAG_LOCK ) { Value = m_LastReportedExposureTime; Mode = "KSCAMERA_EXTENDEDPROP_VIDEOPROCFLAG_LOCK"; } DBG_TRACE("ExposureMode=0x%016llX (%s), Time=%llu00ns, LastReported=%llu00ns", pSettings->ExposureMode, Mode, Value, m_LastReportedExposureTime ); m_LastReportedExposureTime = Value; return Value;}
开发者ID:0xhack,项目名称:Windows-driver-samples,代码行数:40,
示例5: ASSERTSEARCH_SET::SearchObjectType SEARCH_SET::GetRandomSearchObjectType(float fJunkModifier){ if (fJunkModifier < 0.0f || fJunkModifier > 1.0f) { ASSERT(!"SEARCH_SET::GetRandomSearchObjectType(): bad skill modifier"); fJunkModifier = 1.0f; } //reduce the chance of random junk uint8 nJunkChance = (uint8)( (float)nItemPercent * fJunkModifier ); //figure out a new total uint8 nTotal = 100 - (nItemPercent - nJunkChance); //roll the die... uint8 nRandVal = GetRandom(1, nTotal); SearchObjectType eType = eUnknownObjectType; if (nRandVal <= nJunkChance) { eType = eItemObjectType; } else if (nRandVal <= nJunkChance + nAmmoPercent) { eType = eAmmoObjectType; } else if (nRandVal <= nJunkChance + nAmmoPercent + nWeaponPercent) { eType = eWeaponObjectType; } else { eType = eGearObjectType; } return eType;}
开发者ID:rickyharis39,项目名称:nolf2,代码行数:37,
示例6: InitializeShell bool __CALLOUT InitializeShell() { Clear(BLUE); const char* str = "PRICE of HONOR!"; DrawTextString(40,60,str,Length(str),RED,BLUE); GetBatteryLevel(); SetScreenBrightness(100); char buff[200]; int res = snprintf(buff,sizeof(buff),"test %d",0); DrawPixel(1,1,WHITE); DoVibroAndBeep(500); ubyte_t l = GetLustraId(); SendRadioPacket(NULL,0); uword_t a = GetArmletId(); FILE log; OpenFile(&log, "log.txt", true); char* s = "log test"; WriteFile(&log, s, Length(s)); /* //int i = 0; //Color area[100]; //for (i=0; i<100; i++) area[i] = 0xF0F; //DrawArea(5,5,area,100,10,10); //WriteFile(&log, (char*)area, 100); //for (i=0; i<100; i++) area[i] = 0x0; //ReadFile(&log, (char*)area, 100); //AppendFile(&log, (char*)area, 100); //DrawArea(5,5,area,100,10,10); */ RequestTimer(TimerProc,100); int up = GetUpTime(); int rnd = GetRandom(50); //SetCureName is checked in AppMainThread //WritePill is checked in AppMainThread //StartThread(AppMainThread,NULL); return true; //TODO }
开发者ID:Kreyl,项目名称:nute,代码行数:37,
示例7: GetCurrentISOSpeed//// Translate ISO settings into a "current value".//ULONGCHardwareSimulation::GetCurrentISOSpeed(){ PAGED_CODE(); ISP_FRAME_SETTINGS *pSettings = GetIspSettings(); ULONG Value = 0; if( pSettings->ISOMode & KSCAMERA_EXTENDEDPROP_ISO_AUTO ) { Value = GetRandom( (ULONG) 50, (ULONG) 3200 ); } else if( pSettings->ISOMode & KSCAMERA_EXTENDEDPROP_ISO_MANUAL ) { Value = pSettings->ISOValue; } else { Value = // Try converting any legacy presets to a manual value. IsoPreset2Value( pSettings->ISOMode ); } return Value;}
开发者ID:0xhack,项目名称:Windows-driver-samples,代码行数:27,
示例8: psGetRandomvoid Reaction::DeepCopy(Reaction& other,BehaviorSet& behaviors){ desireValue = other.desireValue; desireType = other.desireType; for (size_t i = 0; i < other.affected.GetSize(); i++) { Behavior * behavior = behaviors.Find(other.affected[i]->GetName()); affected.Push(behavior); } eventType = other.eventType; range = other.range; factionDiff = other.factionDiff; oper = other.oper; weight = other.weight; values = other.values; valuesValid = other.valuesValid; randoms = other.randoms; randomsValid = other.randomsValid; type = other.type; activeOnly = other.activeOnly; inactiveOnly = other.inactiveOnly; reactWhenDead = other.reactWhenDead; reactWhenInvisible = other.reactWhenInvisible; reactWhenInvincible = other.reactWhenInvincible; onlyInterrupt = other.onlyInterrupt; doNotInterrupt = other.doNotInterrupt; // For now depend on that each npc do a deep copy to create its instance of the reaction for (uint ii=0; ii < values.GetSize(); ii++) { if (GetRandomValid((int)ii)) { values[ii] += psGetRandom(GetRandom((int)ii)); } }}
开发者ID:randomcoding,项目名称:PlaneShift-PSAI,代码行数:36,
示例9: mainint main(int argc, char *argv[]){ FILE* fp; unsigned int i; struct data_t data; if (argc != 3) { printf("## Data Generator for 310_sort Ver.2013-10-13/n"); printf("## Usage: ./data_gen i random_seed/n"); printf("## : n = i * 1024n"); exit(1); } int random_seed = atoi(argv[2]); srand(random_seed); fp = fopen("310sort.txt", "wb"); if (fp==NULL) { fputs("fail to open/n", stderr); exit(1); } for (i=0; i<SIZE-1; i++){ data.buf[i] = GetRandom(); // printf("%d/n", data.buf[i]); } data.n = atoi(argv[1]) * 1024; //fwrite(&data, sizeof(unsigned int), SIZE, fp); for (i=0;i<SIZE-1; i++){ fprintf(fp, "%d,",data.buf[i]); } fprintf(fp, "%d,/n",data.n); fclose(fp); return 0;}
开发者ID:HashimotoAkihiro,项目名称:310_sort,代码行数:36,
示例10: GetRandomvoid CBaseParticleSystemFX::GetRandomColorInRange(DVector & vColor){ DFLOAT fColorR = GetRandom(m_vColor1.x, m_vColor2.x); // Kludge the color for software... if (m_bSetSoftwareColor) { m_pClientDE->SetSoftwarePSColor(m_hObject, m_vColor1.x/255.0f, m_vColor1.y/255.0f, m_vColor1.z/255.0f); } if (m_vColorRange.x <= 0.0f) { VEC_COPY(vColor, m_vColor1); } else { vColor.x = fColorR; vColor.y = (m_vColorRange.y * fColorR) / m_vColorRange.x; vColor.z = (m_vColorRange.z * fColorR) / m_vColorRange.x; } return;}
开发者ID:bsmr-games,项目名称:Blood2,代码行数:24,
示例11: SampleSobolstatic void SampleSobol(cSamples *samples, cBounds *b, creal vol){ creal norm = vol*samples->weight; real *x = samples->x, *f = samples->f, *avg = samples->avg; ccount n = samples->n; count i, dim, comp; for( i = 0; i < n; ++i ) { GetRandom(x); for( dim = 0; dim < ndim_; ++x, ++dim ) *x = b[dim].lower + *x*(b[dim].upper - b[dim].lower); } DoSample(n, ndim_, samples->x, f); ResCopy(avg, f); f += ncomp_; for( i = 1; i < n; ++i ) for( comp = 0; comp < ncomp_; ++comp ) avg[comp] += *f++; for( comp = 0; comp < ncomp_; ++comp ) avg[comp] *= norm;}
开发者ID:Omer80,项目名称:wimps,代码行数:24,
示例12: Bleedvoid Bleed (edict_t *curse){ int take; edict_t *caster=curse->owner; if (curse->atype != BLEEDING) return; if (level.time < curse->wait) return; if (!G_ValidTarget(caster, curse->enemy, false)) { // remove the curse if the target dies que_removeent(curse->enemy->curses, curse, true); return; } // 33-99% health taken over duration of curse take = (curse->enemy->max_health * (0.033 * curse->monsterinfo.level)) / curse->monsterinfo.selected_time; //gi.dprintf("target %s take %d health %d/%d level %d time %.1f/n", // curse->enemy->classname, take, curse->enemy->health, curse->enemy->max_health, // curse->monsterinfo.level, curse->monsterinfo.selected_time); // damage limits if (take < 1) take = 1; if (take > 100) take = 100; T_Damage(curse->enemy, caster, caster, vec3_origin, vec3_origin, vec3_origin, take, 0, DAMAGE_NO_ABILITIES, MOD_LIFE_DRAIN); curse->wait = level.time + (GetRandom(3, 10) * FRAMETIME);}
开发者ID:Ciclop,项目名称:quake-2-vortex,代码行数:36,
示例13: mainint main(int argc, const char** argv){ const uint NUM_SHIPS = 50; const uint NUM_PLANETS = 500; const uint FIELD_DIMS = 500; GraphManager GraphManager; GraphManager.CreateGraph(NUM_PLANETS, { FIELD_DIMS, FIELD_DIMS }); GraphManager.FormEdges(); std::vector<Planet*> PlanetList; for (uint i = 0; i < GraphManager.NumNodes(); ++i) { Planet* p = new Planet(i, GraphManager.TakeNode()); PlanetList.push_back(p); } std::vector<Ship> ShipList; for (uint i = 0; i < NUM_SHIPS; ++i) { ShipList.emplace_back(i, PlanetList[GetRandom(0, NUM_PLANETS)], [&] (GraphNode* Start, GraphNode* End) { auto GraphList = GraphManager.FindPath(Start, End); std::vector<Planet*> Result; for(auto Node : GraphList) for (Planet* Planet : PlanetList) if (Planet->GetGraphNode() == Node) Result.push_back(Planet); return Result; }); } for (auto& Ship : ShipList) Ship.Tick(PlanetList); return 0;}
开发者ID:NLincoln,项目名称:Planets2,代码行数:36,
示例14: SelectFlamePotPosition// Returns true if the AI has a valid flame pot position for this link, false// if it does not.//// Helper function for setting a flame pot position. If the AI already has // a valid position, it will use it. If the AI does not have a valid // position, a new position will be selected.static bool SelectFlamePotPosition( CAI* pAI, AINavMeshLinkAbstract* pLink ){ // Sanity checks. if ( !pAI || !pLink ) { return false; } // // Check to see if the AI already has a position. If he does, use it. // CAIWMFact queryExistingFact; queryExistingFact.SetFactType( kFact_Knowledge ); queryExistingFact.SetKnowledgeType( kKnowledge_FlamePotPosition ); queryExistingFact.SetSourceObject( pAI->GetAIBlackBoard()->GetBBTargetObject() ); queryExistingFact.SetTargetObject( pLink->GetHOBJECT() ); CAIWMFact* pCurrentPosition = pAI->GetAIWorkingMemory()->FindWMFact( queryExistingFact ); if ( NULL != pCurrentPosition ) { // Ignore the point if the AI is already very close to it; this is // likely an old position that was 'achieved'. LTVector vPosDelta2D = ( pAI->GetPosition() - pCurrentPosition->GetPos() ); vPosDelta2D.y = 0.0f; float flDistanceSqr2D = vPosDelta2D.MagSqr(); if ( flDistanceSqr2D >= g_flCirclingPositionAchievedDistSqr ) { return true; } } CAINavMeshPoly* pPoly = g_pAINavMesh->GetNMPoly( pLink->GetNMPolyID() ); if ( NULL == pPoly ) { return false; } // Get the total length of the edge, so we can pick a number within the // range [0, EdgeLength] int nEdges = pPoly->GetNumNMPolyEdges(); float flEdgeLengthSum = 0.0f; for ( int i = 0; i < nEdges; ++i ) { // Skip any edges which: // 1) Don't exist. // 2) Don't have polies on both sides. CAINavMeshEdge* pEdge = pPoly->GetNMPolyEdge( i ); if ( !pEdge || kNMPoly_Invalid == pEdge->GetNMPolyIDA() || kNMPoly_Invalid == pEdge->GetNMPolyIDB() ) { continue; } flEdgeLengthSum += ( pEdge->GetNMEdge0() - pEdge->GetNMEdge1() ).Mag(); // TODO: Don't need to get the mag here. } // Fail if there are no valid positions. float flRandomDistanceAlongEdge = GetRandom( 0.0f, flEdgeLengthSum ); if ( 0.0f == flRandomDistanceAlongEdge ) { return false; } // // Select a position on the edge. // bool bFoundPosition = false; LTVector vSelectedPosition; float flRemainingDistance = flRandomDistanceAlongEdge; for ( int i = 0; i < nEdges; ++i ) { // Skip any edges which: // 1) Don't exist. // 2) Don't have polies on both sides. CAINavMeshEdge* pEdge = pPoly->GetNMPolyEdge( i ); if ( !pEdge || kNMPoly_Invalid == pEdge->GetNMPolyIDA() || kNMPoly_Invalid == pEdge->GetNMPolyIDB() ) { continue; } float flEdgeLength = ( pEdge->GetNMEdge0() - pEdge->GetNMEdge1() ).Mag(); // TODO: Don't need to get the mag here. if ( flRemainingDistance < flEdgeLength ) { // Find the distance along the edge for the position. LTVector vEdgeDir = ( pEdge->GetNMEdge1() - pEdge->GetNMEdge0() ).GetUnit();//.........这里部分代码省略.........
开发者ID:Arc0re,项目名称:lithtech,代码行数:101,
示例15: IsPlayervoid CAIGoalCircleFlamePot::DeactivateGoal(){ super::DeactivateGoal(); // If: // 1) The player is an enemy. // 2) There is another AI very close by // 3) That AI does not have a blitz task // ...this AI should blitz the player. This is an anti-clumping measure. HOBJECT hTarget = m_pAI->GetAIBlackBoard()->GetBBTargetObject(); bool bShouldBlitz = false; if ( m_pAI->HasTarget( kTarget_Character ) && IsPlayer( hTarget ) ) { CAI::AIList::const_iterator itEachAI = CAI::GetAIList().begin(); CAI::AIList::const_iterator itLastAI = CAI::GetAIList().end(); for ( ; itEachAI != itLastAI; ++itEachAI ) { CAI* pCurrentAI = *itEachAI; // Ignore NULL, self and dead AI. if ( NULL == pCurrentAI || pCurrentAI == m_pAI || IsDeadAI( pCurrentAI->GetHOBJECT() ) ) { continue; } // Ignore AIs who are far away in 2D (false positives are okay). LTVector vDelta2D = ( pCurrentAI->GetPosition() - m_pAI->GetPosition() ); vDelta2D.y = 0.0f; if ( vDelta2D.MagSqr() > g_flTooCloseToEnemySqr ) { continue; } // Ignore AI who are already blitzing. CAIWMFact factQuery; factQuery.SetFactType( kFact_Task ); factQuery.SetTaskType( kTask_BlitzCharacter ); if ( pCurrentAI->GetAIWorkingMemory()->FindWMFact( factQuery ) ) { continue; } // AI should blitz. bShouldBlitz = true; break; } } if ( bShouldBlitz || ( 0 == GetRandom( 0, 2 ) ) ) { CAIWMFact factQuery; factQuery.SetFactType( kFact_Task ); factQuery.SetTaskType( kTask_BlitzCharacter ); CAIWMFact* pFact = m_pAI->GetAIWorkingMemory()->CreateWMFact( kFact_Task ); if ( pFact ) { pFact->SetTaskType( kTask_BlitzCharacter ); pFact->SetTargetObject( hTarget ); pFact->SetIndex( kContext_None ); pFact->SetFactFlags( kFactFlag_Scripted, 1.f ); } }}
开发者ID:Arc0re,项目名称:lithtech,代码行数:74,
示例16: switchDBOOL CShellCasingFX::Update(){ if (!m_hObject || !m_pClientDE) return DFALSE; if (m_pClientDE->GetTime() > m_fExpireTime) return DFALSE; if (m_bInVisible) { m_bInVisible = DFALSE; m_pClientDE->SetObjectFlags(m_hObject, FLAG_VISIBLE); } if (m_bResting) return DTRUE; DRotation rRot; // If velocity slows enough, and we're on the ground, just stop bouncing and just wait to expire. if (m_movingObj.m_PhysicsFlags & MO_RESTING) { m_bResting = DTRUE; // Stop the spinning... m_pClientDE->SetupEuler(&rRot, 0, m_fYaw, 0); m_pClientDE->SetObjectRotation(m_hObject, &rRot); /* // Shell is at rest, we can add a check here to see if we really want // to keep it around depending on detail settings... HLOCALOBJ hObjs[1]; DDWORD nNumFound, nBogus; m_pClientDE->FindObjectsInSphere(&m_movingObj.m_Pos, 64.0f, hObjs, 1, &nBogus, &nNumFound); // Remove thyself... if (nNumFound > 15) return DFALSE;*/ } else { if (m_fPitchVel != 0 || m_fYawVel != 0) { DFLOAT fDeltaTime = m_pClientDE->GetFrameTime(); m_fPitch += m_fPitchVel * fDeltaTime; m_fYaw += m_fYawVel * fDeltaTime; m_pClientDE->SetupEuler(&rRot, m_fPitch, m_fYaw, 0.0f); m_pClientDE->SetObjectRotation(m_hObject, &rRot); } } DVector vNewPos; if (UpdateMovingObject(DNULL, &m_movingObj, &vNewPos)) { ClientIntersectInfo info; SurfaceType eType = SURFTYPE_UNKNOWN; if (BounceMovingObject(DNULL, &m_movingObj, &vNewPos, &info, &eType)) { if (m_nBounceCount > 0) { char sType[10]; char sFile[MAX_CS_FILENAME_LEN]; switch(eType) {// case SURFTYPE_FLESH: _mbscpy((unsigned char*)sType, (const unsigned char*)"Flesh"); break; case SURFTYPE_GLASS: _mbscpy((unsigned char*)sType, (const unsigned char*)"Glass"); break; case SURFTYPE_METAL: _mbscpy((unsigned char*)sType, (const unsigned char*)"Metal"); break; case SURFTYPE_PLASTIC: _mbscpy((unsigned char*)sType, (const unsigned char*)"Plastic"); break; case SURFTYPE_TERRAIN: _mbscpy((unsigned char*)sType, (const unsigned char*)"Terrain"); break; case SURFTYPE_LIQUID: _mbscpy((unsigned char*)sType, (const unsigned char*)"Water"); break; case SURFTYPE_WOOD: _mbscpy((unsigned char*)sType, (const unsigned char*)"Wood"); break; case SURFTYPE_STONE: default: _mbscpy((unsigned char*)sType, (const unsigned char*)"Stone"); break; } sprintf(sFile, "Sounds//Weapons//ShellDrops//%s//Shell%d.wav", sType, GetRandom(1, 2)); PlaySoundFromPos(&vNewPos, sFile, 150.0f, SOUNDPRIORITY_MISC_LOW); } // Adjust the bouncing.. m_fPitchVel = GetRandom(-MATH_CIRCLE * 2, MATH_CIRCLE * 2); m_fYawVel = GetRandom(-MATH_CIRCLE * 2, MATH_CIRCLE * 2); m_nBounceCount--; if (m_nBounceCount <= 0) { m_movingObj.m_PhysicsFlags |= MO_RESTING; } } VEC_COPY(m_movingObj.m_Pos, vNewPos);//.........这里部分代码省略.........
开发者ID:Arc0re,项目名称:lithtech,代码行数:101,
示例17: SPADES_MARK_FUNCTION void Player::FireWeapon() { SPADES_MARK_FUNCTION(); Vector3 muzzle = GetEye(); muzzle += GetFront() * 0.01f; // for hit-test debugging std::map<int, HitTestDebugger::PlayerHit> playerHits; std::vector<Vector3> bulletVectors; //Vector3 right = GetRight(); //Vector3 up = GetUp(); int pellets = weapon->GetPelletSize(); float spread = weapon->GetSpread(); GameMap *map = world->GetMap(); // pyspades takes destroying more than one block as a // speed hack (shotgun does this) bool blockDestroyed = false; Vector3 dir2 = GetFront(); for(int i =0 ; i < pellets; i++){ // AoS 0.75's way (dir2 shouldn't be normalized!) dir2.x += (GetRandom() - GetRandom()) * spread; dir2.y += (GetRandom() - GetRandom()) * spread; dir2.z += (GetRandom() - GetRandom()) * spread; Vector3 dir = dir2.Normalize(); bulletVectors.push_back(dir); // first do map raycast GameMap::RayCastResult mapResult; mapResult = map->CastRay2(muzzle, dir, 500); Player *hitPlayer = NULL; float hitPlayerDistance = 0.f; HitBodyPart hitPart = HitBodyPart::None; for(int i = 0; i < world->GetNumPlayerSlots(); i++){ Player *other = world->GetPlayer(i); if(other == this || other == NULL) continue; if(other == this || !other->IsAlive() || other->GetTeamId() >= 2) continue; // quickly reject players unlikely to be hit if(!other->RayCastApprox(muzzle, dir)) continue; HitBoxes hb = other->GetHitBoxes(); Vector3 hitPos; if(hb.head.RayCast(muzzle, dir, &hitPos)) { float dist = (hitPos - muzzle).GetLength(); if(hitPlayer == NULL || dist < hitPlayerDistance){ hitPlayer = other; hitPlayerDistance = dist; hitPart = HitBodyPart::Head; } } if(hb.torso.RayCast(muzzle, dir, &hitPos)) { float dist = (hitPos - muzzle).GetLength(); if(hitPlayer == NULL || dist < hitPlayerDistance){ hitPlayer = other; hitPlayerDistance = dist; hitPart = HitBodyPart::Torso; } } for(int j = 0; j < 3 ;j++){ if(hb.limbs[j].RayCast(muzzle, dir, &hitPos)) { float dist = (hitPos - muzzle).GetLength(); if(hitPlayer == NULL || dist < hitPlayerDistance){ hitPlayer = other; hitPlayerDistance = dist; switch(j) { case 0: hitPart = HitBodyPart::Limb1; break; case 1: hitPart = HitBodyPart::Limb2; break; case 2: hitPart = HitBodyPart::Arms; break; } } } } } Vector3 finalHitPos; finalHitPos = muzzle + dir * 128.f; if(hitPlayer == nullptr && !mapResult.hit) { // might hit water surface. } if(mapResult.hit && (mapResult.hitPos - muzzle).GetLength() < 128.f &&//.........这里部分代码省略.........
开发者ID:2mac,项目名称:openspades,代码行数:101,
示例18: SetValorvoid Color::SetRandom(){ SetValor(GetRandom(0,6));}
开发者ID:msempere,项目名称:aisoyTutor,代码行数:3,
示例19: p_medic_reanimatevoid p_medic_reanimate (edict_t *ent, edict_t *target){ int skill_level; vec3_t bmin, bmax; edict_t *e; skill_level = floattoint((1.0+MEDIC_RESURRECT_BONUS)*ent->myskills.abilities[MEDIC].current_level); if (!strcmp(target->classname, "drone") && (ent->num_monsters + target->monsterinfo.control_cost <= MAX_MONSTERS)) { target->monsterinfo.level = skill_level; M_SetBoundingBox(target->mtype, bmin, bmax); if (G_IsValidLocation(target, target->s.origin, bmin, bmax) && M_Initialize(ent, target)) { // restore this drone target->monsterinfo.slots_freed = false; // reset freed flag target->health = 0.33*target->max_health; target->monsterinfo.power_armor_power = 0.33*target->monsterinfo.max_armor; target->monsterinfo.resurrected_time = level.time + 2.0; target->activator = ent; // transfer ownership! target->nextthink = level.time + MEDIC_RESURRECT_DELAY; gi.linkentity(target); target->monsterinfo.stand(target); ent->num_monsters += target->monsterinfo.control_cost; safe_cprintf(ent, PRINT_HIGH, "Resurrected a %s. (%d/%d)/n", target->classname, ent->num_monsters, MAX_MONSTERS); } } else if ((!strcmp(target->classname, "bodyque") || !strcmp(target->classname, "player")) && (ent->num_monsters + 1 <= MAX_MONSTERS)) { int random=GetRandom(1, 3); vec3_t start; e = G_Spawn(); VectorCopy(target->s.origin, start); // kill the corpse T_Damage(target, target, target, vec3_origin, target->s.origin, vec3_origin, 10000, 0, DAMAGE_NO_PROTECTION, 0); //4.2 random soldier type with different weapons if (random == 1) { // blaster e->mtype = M_SOLDIER; e->s.skinnum = 0; } else if (random == 2) { // rocket e->mtype = M_SOLDIERLT; e->s.skinnum = 4; } else { // shotgun e->mtype = M_SOLDIERSS; e->s.skinnum = 2; } e->activator = ent; e->monsterinfo.level = skill_level; M_Initialize(ent, e); e->health = 0.2*e->max_health; e->monsterinfo.power_armor_power = 0.2*e->monsterinfo.max_armor; e->s.skinnum |= 1; // injured skin e->monsterinfo.stand(e); if (!G_IsValidLocation(target, start, e->mins, e->maxs)) { start[2] += 24; if (!G_IsValidLocation(target, start, e->mins, e->maxs)) { G_FreeEdict(e); return; } } VectorCopy(start, e->s.origin); gi.linkentity(e); e->nextthink = level.time + MEDIC_RESURRECT_DELAY; ent->num_monsters += e->monsterinfo.control_cost; safe_cprintf(ent, PRINT_HIGH, "Resurrected a soldier. (%d/%d)/n", ent->num_monsters, MAX_MONSTERS); } else if (!strcmp(target->classname, "spiker") && ent->num_spikers + 1 <= SPIKER_MAX_COUNT) { e = CreateSpiker(ent, skill_level); // make sure the new entity fits if (!G_IsValidLocation(target, target->s.origin, e->mins, e->maxs)) {//.........这里部分代码省略.........
开发者ID:emmamai,项目名称:vortex-indy,代码行数:101,
示例20: ProcDropItemAfterBattlevoid ProcDropItemAfterBattle(CNPC* df, CPC* opc, CPC* tpc, int level){ if(df->m_pZone->IsComboZone()) { DropComboGiftMob(df, opc, tpc, level); return ; }#ifdef SYSTEM_TREASURE_MAP if( df->m_idNum == TREASURE_BOX_NPC_INDEX ) // npc C++ GetRank函数代码示例 C++ GetRand函数代码示例
|