// create ourselves a particle emitter void CParticleEmitter::Spawn( void ) { pev->solid = SOLID_NOT; pev->movetype = MOVETYPE_NONE; SET_MODEL (ENT(pev), STRING(pev->model)); pev->effects |= EF_NODRAW; UTIL_SetOrigin( pev, pev->origin ); UTIL_SetSize( pev, pev->absmin, pev->absmax ); SetUse ( &CParticleEmitter::Use ); if (pev->spawnflags & SF_START_ON) { ALERT (at_console, "CParticleEmitter Spawn in <ON> Mode\nNextthink in 0.5 Seconds\n"); bIsOn = true; iID = ++iParticleIDCount; SetThink( &CParticleEmitter::TurnOn ); pev->nextthink = gpGlobals->time + 0.5; } else { bIsOn = false; } IsTriggered(NULL); iID = ++iParticleIDCount; flTimeTurnedOn = 0.0; }
void CMultiSource::Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ) { int i = 0; // Find the entity in our list while (i < m_iTotal) if ( m_rgEntities[i++] == pCaller ) break; // if we didn't find it, report error and leave if (i > m_iTotal) { ALERT(at_console, "MultiSrc:Used by non member %s.\n", STRING(pCaller->pev->classname)); return; } // CONSIDER: a Use input to the multisource always toggles. Could check useType for ON/OFF/TOGGLE m_rgTriggered[i-1] ^= 1; // if ( IsTriggered( pActivator ) ) { ALERT( at_aiconsole, "Multisource %s enabled (%d inputs)\n", STRING(pev->targetname), m_iTotal ); USE_TYPE useType = USE_TOGGLE; if ( m_globalstate ) useType = USE_ON; SUB_UseTargets( NULL, useType, 0 ); } }
int CLightManager::IsTriggered (short nSegment, short nSide, bool bOppSide) { if ((nSegment < 0) || (nSide < 0)) return 0; CTrigger* trigP; int i = 0; bool bForceField = (gameData.pig.tex.tMapInfoP [SEGMENTS [nSegment].m_sides [nSide].m_nBaseTex].flags & TMI_FORCE_FIELD) != 0; while ((i = FindTriggerTarget (nSegment, nSide, i))) { if (i < 0) trigP = &OBJTRIGGERS [-i - 1]; else trigP = &TRIGGERS [i - 1]; if ((trigP->nType == TT_OPEN_WALL) || (trigP->nType == TT_CLOSE_WALL)) return 1; if (!bForceField) { if ((trigP->nType == TT_LIGHT_OFF) || (trigP->nType == TT_LIGHT_ON)) return 1; } } if (bOppSide || !bForceField) return 0; short nConnSeg = SEGMENTS [nSegment].m_children [nSide]; return (nConnSeg >= 0) && IsTriggered (nConnSeg, SEGMENTS [nSegment].ConnectedSide (SEGMENTS + nConnSeg), true); }
unsigned long Measurement::GetLengthAfterTrigger() { FILE_LOG(logDEBUG3) << "Measurement::GetLengthAfterTrigger"; if(IsTriggered()) { return GetLength()-GetLengthBeforeTrigger(); } else { return GetLength(); } }
MojErr MojoExclusiveTrigger::ToJson(boost::shared_ptr<const Activity> activity, MojObject& rep, unsigned flags) const { if (flags & ACTIVITY_JSON_CURRENT) { if (IsTriggered(activity)) { rep = m_response; } else { rep = MojObject(false); } return MojErrNone; } else { return MojoTrigger::ToJson(activity, rep, flags); } }
unsigned long Measurement::GetLengthBeforeTrigger() { FILE_LOG(logDEBUG3) << "Measurement::GetLengthBeforeTrigger"; double x_fraction; if(IsTriggered()) { x_fraction = GetTrigger()->GetXFraction(); if(x_fraction>=0 && x_fraction<=1) { return (unsigned long)round((double)GetLength()*x_fraction); // we didn't allow that when creating new trigger, but we could // the idea is to use a number of samples instead of a fraction } else if(x_fraction>=0 && x_fraction<=GetLength()) { return (unsigned long)round(x_fraction); } else { throw("invalid value of x fraction of a simple trigger.\n"); } } else { return 0UL; } }
bool CpuTrigger::Condition(FrameworkInMachine* fim) { if (!IsTriggered()) { // calculate all the executor cpu usage in past m_period_threshold time if (fim->IsOverLoad(static_cast<int>(GetPeriod()*60), static_cast<double>(GetValue())/100, m_proportion)) { LOG(WARNING) << "cpu trigger triggered"; SetTriggerState(true); m_trigger_time = time(0); return true; } else { return false; } } else { // if triggered then hold on 30s if (time(0) - m_trigger_time > 30 && fim->Size() < Pool::Instance()->Size()) SetTriggerState(false); return false; } }
void CMultiSource::Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ) { int i; bool bFound = false; // Find the entity in our list for( i = 0; i < m_iTotal; ++i ) { if( m_rgEntities[ i ] == pCaller ) { bFound = true; break; } } // if we didn't find it, report error and leave if( !bFound ) { ALERT( at_console, "MultiSrc:Used by non member %s.\n", pCaller->GetClassname() ); return; } // CONSIDER: a Use input to the multisource always toggles. Could check useType for ON/OFF/TOGGLE m_rgTriggered[ i ] ^= 1; // if( IsTriggered( pActivator ) ) { ALERT( at_aiconsole, "Multisource %s enabled (%d inputs)\n", GetTargetname(), m_iTotal ); USE_TYPE targetUseType = USE_TOGGLE; if( m_globalstate ) targetUseType = USE_ON; SUB_UseTargets( NULL, targetUseType, 0 ); } }
void CMultiSource::Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value) { int i = 0; while (i < m_iTotal) { if (m_rgEntities[i++] == pCaller) break; } if (i > m_iTotal) { ALERT(at_console, "MultiSrc:Used by non member %s.\n", STRING(pCaller->pev->classname)); return; } m_rgTriggered[i - 1] ^= 1; if (IsTriggered(pActivator)) { ALERT(at_aiconsole, "Multisource %s enabled (%d inputs)\n", STRING(pev->targetname), m_iTotal); SUB_UseTargets(NULL, m_globalstate ? USE_ON : USE_TOGGLE, 0); } }
int CLightManager::Add (CSegFace* faceP, tRgbaColorf *colorP, fix xBrightness, short nSegment, short nSide, short nObject, short nTexture, CFixVector *vPos, ubyte bAmbient) { CDynLight* pl; short h, i; float fBrightness = X2F (xBrightness); #if USE_OGL_LIGHTS GLint nMaxLights; #endif #if 0 if (xBrightness > I2X (1)) xBrightness = I2X (1); #endif if (fBrightness <= 0) return -1; #if DBG if ((nDbgSeg >= 0) && (nSegment == nDbgSeg)) nSegment = nSegment; if ((nDbgObj >= 0) && (nObject == nDbgObj)) nDbgObj = nDbgObj; if (colorP && ((colorP->red > 1) || (colorP->green > 1) || (colorP->blue > 1))) colorP = colorP; #endif if (gameStates.render.nLightingMethod && (nSegment >= 0) && (nSide >= 0)) { #if 1 fBrightness /= Intensity (colorP->red, colorP->green, colorP->blue); #else if (fBrightness < 1) fBrightness = (float) sqrt (fBrightness); else fBrightness *= fBrightness; #endif } if (colorP) colorP->alpha = 1.0f; if (0 <= (h = Update (colorP, fBrightness, nSegment, nSide, nObject))) return h; if (!colorP) return -1; if ((colorP->red == 0.0f) && (colorP->green == 0.0f) && (colorP->blue == 0.0f)) { if (gameStates.app.bD2XLevel && gameStates.render.bColored) return -1; colorP->red = colorP->green = colorP->blue = 1.0f; } if (m_data.nLights [0] >= MAX_OGL_LIGHTS) { gameStates.render.bHaveDynLights = 0; return -1; //too many lights } i = m_data.nLights [0]; //LastEnabledDynLight () + 1; pl = m_data.lights + i; pl->info.faceP = faceP; pl->info.nSegment = nSegment; pl->info.nSide = nSide; pl->info.nObject = nObject; pl->info.nPlayer = -1; pl->info.bState = 1; pl->info.bSpot = 0; pl->info.fBoost = 0; pl->info.bPowerup = 0; pl->info.bAmbient = bAmbient; //0: static light //2: object/lightning //3: headlight if (nObject >= 0) { CObject *objP = OBJECTS + nObject; //HUDMessage (0, "Adding object light %d, type %d", m_data.nLights [0], objP->info.nType); pl->info.nType = 2; if (objP->info.nType == OBJ_POWERUP) { int id = objP->info.nId; if ((id == POW_EXTRA_LIFE) || (id == POW_ENERGY) || (id == POW_SHIELD_BOOST) || (id == POW_HOARD_ORB) || (id == POW_MONSTERBALL) || (id == POW_INVUL)) pl->info.bPowerup = 1; else pl->info.bPowerup = 2; } pl->info.vPos = objP->info.position.vPos; pl->info.fRad = 0; //X2F (OBJECTS [nObject].size) / 2; if (fBrightness > 1) { if ((objP->info.nType == OBJ_FIREBALL) || (objP->info.nType == OBJ_EXPLOSION)) { pl->info.fBoost = 1; pl->info.fRad = fBrightness; } else if ((objP->info.nType == OBJ_WEAPON) && (objP->info.nId == FLARE_ID)) { pl->info.fBoost = 1; pl->info.fRad = 2 * fBrightness; } } m_data.owners [nObject] = m_data.nLights [0]; } else if (nSegment >= 0) { #if 0 CFixVector vOffs; CSide *sideP = SEGMENTS [nSegment].m_sides + nSide; #endif if (nSide < 0) { pl->info.nType = 2; pl->info.bVariable = 0; pl->info.fRad = 0; if (vPos) pl->info.vPos = *vPos; else pl->info.vPos = SEGMENTS [nSegment].Center (); } else { #if DBG if ((nSegment == nDbgSeg) && ((nDbgSide < 0) || (nSide == nDbgSide))) nDbgSeg = nDbgSeg; #endif pl->info.nType = 0; pl->info.fRad = faceP ? faceP->fRads [1] / 2.0f : 0; //RegisterLight (NULL, nSegment, nSide); pl->info.bVariable = IsDestructible (nTexture) || IsFlickering (nSegment, nSide) || IsTriggered (nSegment, nSide) || SEGMENTS [nSegment].Side (nSide)->IsVolatile (); m_data.nVariable += pl->info.bVariable; CSide* sideP = SEGMENTS [nSegment].m_sides + nSide; pl->info.vPos = sideP->Center (); CFixVector vOffs = CFixVector::Avg (sideP->m_normals [0], sideP->m_normals [1]); pl->info.vDirf.Assign (vOffs); CFloatVector::Normalize (pl->info.vDirf); #if 0 if (gameStates.render.bPerPixelLighting) { vOffs *= I2X (1) / 64; pl->info.vPos += vOffs; } #endif } } else { pl->info.nType = 3; pl->info.bVariable = 0; } #if 0 PrintLog ("adding light %d,%d\n", m_data.nLights [0], pl - m_data.lights [0]); #endif pl->info.bOn = 1; pl->bTransform = 1; SetColor (m_data.nLights [0], colorP->red, colorP->green, colorP->blue, fBrightness); return m_data.nLights [0]++; }
void Measurement::RunBlock() { FILE_LOG(logDEBUG3) << "Measurement::RunBlock"; int i; Timing t; uint32_t max_length=0; // we will have to start reading our data from beginning again SetNextIndex(0); // test if channel settings have already been passed to picoscope // and only pass them again if that isn't the case FILE_LOG(logDEBUG4) << "Measurement::RunBlock - we have " << GetNumberOfChannels() << " channels"; for(i=0; i<GetNumberOfChannels(); i++) { FILE_LOG(logDEBUG4) << "Measurement::RunBlock - setting channel " << (char)('A'+i) << " (which holds index " << GetChannel(i)->GetIndex() << ")"; GetChannel(i)->SetChannelInPicoscope(); } // this fixes the timebase if more than a single channel is selected FixTimebase(); // timebase SetTimebaseInPicoscope(); // trigger if(IsTriggered()) { GetTrigger()->SetTriggerInPicoscope(); } // for rapid block mode if(GetNTraces() > 1) { // TODO - check that GetLength()*GetNumberOfEnabledChannels()*GetNTraces() doesn't exceed the limit if(GetSeries() == PICO_4000) { FILE_LOG(logDEBUG2) << "ps4000SetNoOfCaptures(handle=" << GetHandle() << ", nCaptures=" << GetNTraces() << ")"; GetPicoscope()->SetStatus(ps4000SetNoOfCaptures( GetHandle(), // handle GetNTraces())); // nCaptures } else { FILE_LOG(logDEBUG2) << "ps6000SetNoOfCaptures(handle=" << GetHandle() << ", nCaptures=" << GetNTraces() << ")"; GetPicoscope()->SetStatus(ps6000SetNoOfCaptures( GetHandle(), // handle GetNTraces())); // nCaptures } if(GetPicoscope()->GetStatus() != PICO_OK) { std::cerr << "Unable to set number of captures to " << GetNTraces() << std::endl; throw Picoscope::PicoscopeException(GetPicoscope()->GetStatus()); } if(GetSeries() == PICO_4000) { FILE_LOG(logDEBUG2) << "ps4000MemorySegments(handle=" << GetHandle() << ", nSegments=" << GetNTraces() << ", &max_length=" << max_length << ")"; GetPicoscope()->SetStatus(ps4000MemorySegments( GetHandle(), // handle GetNTraces(), // nSegments &max_length)); FILE_LOG(logDEBUG2) << "->ps4000MemorySegments(... max_length=" << max_length << ")"; } else { FILE_LOG(logDEBUG2) << "ps6000MemorySegments(handle=" << GetHandle() << ", nSegments=" << GetNTraces() << ", &max_length=" << max_length << ")"; GetPicoscope()->SetStatus(ps6000MemorySegments( GetHandle(), // handle GetNTraces(), // nSegments &max_length)); FILE_LOG(logDEBUG2) << "->ps6000MemorySegments(... max_length=" << max_length << ")"; } if(GetPicoscope()->GetStatus() != PICO_OK) { std::cerr << "Unable to set number of segments to " << GetNTraces() << std::endl; throw Picoscope::PicoscopeException(GetPicoscope()->GetStatus()); } if(max_length < GetLength()) { // TODO: times number of enabled channels std::cerr << "The maximum length of trace you can get with " << GetNTraces() << " traces is " << max_length << ", but you requested " << GetLength() << "\n"; throw; } if(GetSeries() == PICO_4000) { FILE_LOG(logDEBUG2) << "ps4000SetNoOfCaptures(handle=" << GetHandle() << ", nCaptures=" << GetNTraces() << ")"; GetPicoscope()->SetStatus(ps4000SetNoOfCaptures( GetHandle(), // handle GetNTraces())); // nCaptures } else { FILE_LOG(logDEBUG2) << "ps6000SetNoOfCaptures(handle=" << GetHandle() << ", nCaptures=" << GetNTraces() << ")"; GetPicoscope()->SetStatus(ps6000SetNoOfCaptures( GetHandle(), // handle GetNTraces())); // nCaptures } if(GetPicoscope()->GetStatus() != PICO_OK) { std::cerr << "Unable to set number of captures to " << GetNTraces() << std::endl; throw Picoscope::PicoscopeException(GetPicoscope()->GetStatus()); } } //std::cerr << "\nPress a key to start fetching the data ...\n"; //_getch(); t.Start(); GetPicoscope()->SetReady(false); if(GetSeries() == PICO_4000) { FILE_LOG(logDEBUG2) << "ps4000RunBlock(handle=" << GetHandle() << ", noOfPreTriggerSamples=" << GetLengthBeforeTrigger() << ", noOfPostTriggerSamples=" << GetLengthAfterTrigger() << ", timebase=" << timebase << ", oversample=1, *timeIndisposedMs=NULL, segmentIndex=0, lpReady=CallBackBlock, *pParameter=NULL)"; GetPicoscope()->SetStatus(ps4000RunBlock( GetHandle(), // handle GetLengthBeforeTrigger(), // noOfPreTriggerSamples GetLengthAfterTrigger(), // noOfPostTriggerSamples timebase, // timebase 1, // ovesample NULL, // *timeIndisposedMs 0, // segmentIndex CallBackBlock, // lpReady NULL)); // *pParameter } else { FILE_LOG(logDEBUG2) << "ps6000RunBlock(handle=" << GetHandle() << ", noOfPreTriggerSamples=" << GetLengthBeforeTrigger() << ", noOfPostTriggerSamples=" << GetLengthAfterTrigger() << ", timebase=" << timebase << ", oversample=1, *timeIndisposedMs=NULL, segmentIndex=0, lpReady=CallBackBlock, *pParameter=NULL)"; GetPicoscope()->SetStatus(ps6000RunBlock( GetHandle(), // handle GetLengthBeforeTrigger(), // noOfPreTriggerSamples GetLengthAfterTrigger(), // noOfPostTriggerSamples timebase, // timebase 1, // ovesample NULL, // *timeIndisposedMs 0, // segmentIndex CallBackBlock, // lpReady NULL)); // *pParameter } if(GetPicoscope()->GetStatus() != PICO_OK) { std::cerr << "Unable to start collecting samples" << std::endl; throw Picoscope::PicoscopeException(GetPicoscope()->GetStatus()); } else { std::cerr << "Start collecting samples in " << ((GetNTraces() > 1) ? "rapid " : "") << "block mode ... "; } // TODO: maybe we want it to be asynchronous // TODO: catch the _kbhit event!!! // while (!Picoscope::IsReady() && !_kbhit()) { while (!Picoscope::IsReady()) { Sleep(200); } t.Stop(); std::cerr << "OK (" << t.GetSecondsDouble() << "s)\n"; // sets the index from where we want to start reading data to zero SetNextIndex(0UL); }