本文整理汇总了C++中TThinkerIterator类的典型用法代码示例。如果您正苦于以下问题:C++ TThinkerIterator类的具体用法?C++ TThinkerIterator怎么用?C++ TThinkerIterator使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了TThinkerIterator类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: EV_CeilingCrushStop
bool EV_CeilingCrushStop (int tag, bool remove)
{
bool rtn = false;
DCeiling *scan;
TThinkerIterator<DCeiling> iterator;
scan = iterator.Next();
while (scan != nullptr)
{
DCeiling *next = iterator.Next();
if (scan->m_Tag == tag && scan->m_Direction != 0)
{
if (!remove)
{
SN_StopSequence(scan->m_Sector, CHAN_CEILING);
scan->m_OldDirection = scan->m_Direction;
scan->m_Direction = 0; // in-stasis;
}
else
{
scan->Destroy();
}
rtn = true;
}
scan = next;
}
return rtn;
}
开发者ID:nashmuhandes,项目名称:GZDoom-GPL,代码行数:29,代码来源:p_ceiling.cpp
示例2: DEFINE_ACTION_FUNCTION
DEFINE_ACTION_FUNCTION(AActor, A_BrainDie)
{
// [RH] If noexit, then don't end the level.
if ((deathmatch || alwaysapplydmflags) && (dmflags & DF_NO_EXIT))
return;
// New dmflag: Kill all boss spawned monsters before ending the level.
if (dmflags2 & DF2_KILLBOSSMONST)
{
int count; // Repeat until we have no more boss-spawned monsters.
do // (e.g. Pain Elementals can spawn more to kill upon death.)
{
TThinkerIterator<AActor> it;
AActor *mo;
count = 0;
while ((mo = it.Next()))
{
if (mo->health > 0 && mo->flags4 & MF4_BOSSSPAWNED)
{
P_DamageMobj(mo, self, self, mo->health, NAME_None,
DMG_NO_ARMOR|DMG_FORCED|DMG_THRUSTLESS|DMG_NO_FACTOR);
count++;
}
}
} while (count != 0);
}
G_ExitLevel (0, false);
}
开发者ID:1Akula1,项目名称:gzdoom,代码行数:29,代码来源:a_bossbrain.cpp
示例3: iterator
int DEarthquake::StaticGetQuakeIntensity (AActor *victim)
{
int intensity = 0;
TThinkerIterator<DEarthquake> iterator (STAT_EARTHQUAKE);
DEarthquake *quake;
if (victim->player != NULL && (victim->player->cheats & CF_NOCLIP))
{
return 0;
}
while ( (quake = iterator.Next()) != NULL)
{
if (quake->m_Spot != NULL)
{
fixed_t dist = P_AproxDistance (victim->x - quake->m_Spot->x,
victim->y - quake->m_Spot->y);
if (dist < quake->m_TremorRadius)
{
if (intensity < quake->m_Intensity)
intensity = quake->m_Intensity;
}
}
}
return intensity;
}
开发者ID:WChrisK,项目名称:Zandronum,代码行数:26,代码来源:a_quake.cpp
示例4: PrintFilteredActorList
static void PrintFilteredActorList(const ActorTypeChecker IsActorType, const char *FilterName)
{
AActor *mo;
const PClass *FilterClass = NULL;
if (FilterName != NULL)
{
FilterClass = PClass::FindClass(FilterName);
if (FilterClass == NULL || FilterClass->ActorInfo == NULL)
{
Printf("%s is not an actor class.\n", FilterName);
return;
}
}
TThinkerIterator<AActor> it;
while ( (mo = it.Next()) )
{
if ((FilterClass == NULL || mo->IsA(FilterClass)) && IsActorType(mo))
{
Printf ("%s at (%d,%d,%d)\n",
mo->GetClass()->TypeName.GetChars(),
mo->x >> FRACBITS, mo->y >> FRACBITS, mo->z >> FRACBITS);
}
}
开发者ID:eevee,项目名称:zdoom,代码行数:25,代码来源:c_cmds.cpp
示例5: SN_GetSequenceSlot
void ASoundSequence::PostBeginPlay ()
{
FName slot = SN_GetSequenceSlot (args[0], SEQ_ENVIRONMENT);
if (slot != NAME_None)
{ // This is a slotted sound, so add it to the master for that slot
ASoundSequenceSlot *master;
TThinkerIterator<ASoundSequenceSlot> locator;
while (NULL != (master = locator.Next ()))
{
if (master->Sequence->GetSequenceName() == slot)
{
break;
}
}
if (master == NULL)
{
master = Spawn<ASoundSequenceSlot> (0, 0, 0, NO_REPLACE);
master->Sequence = SN_StartSequence (master, slot, 0);
GC::WriteBarrier(master, master->Sequence);
}
master->Sequence->AddChoice (args[0], SEQ_ENVIRONMENT);
Destroy ();
}
}
开发者ID:AkumaKing,项目名称:Xeu,代码行数:26,代码来源:a_soundsequence.cpp
示例6: Die
void AMinotaurFriend::Die (AActor *source, AActor *inflictor, int dmgflags)
{
Super::Die (source, inflictor, dmgflags);
if (tracer && tracer->health > 0 && tracer->player)
{
// Search thinker list for minotaur
TThinkerIterator<AMinotaurFriend> iterator;
AMinotaurFriend *mo;
while ((mo = iterator.Next()) != NULL)
{
if (mo->health <= 0) continue;
// [RH] Minotaurs can't be morphed, so this isn't needed
//if (!(mo->flags&MF_COUNTKILL)) continue; // for morphed minotaurs
if (mo->flags&MF_CORPSE) continue;
if (mo->StartTime >= 0 && (level.maptime - StartTime) >= MAULATORTICS) continue;
if (mo->tracer != NULL && mo->tracer->player == tracer->player) break;
}
if (mo == NULL)
{
AInventory *power = tracer->FindInventory(PClass::FindActor("PowerMinotaur"));
if (power != NULL)
{
power->Destroy ();
}
}
}
}
开发者ID:nano-bot,项目名称:zdoom,代码行数:30,代码来源:a_minotaur.cpp
示例7: gl_RecreateAllAttachedLights
void gl_RecreateAllAttachedLights()
{
TThinkerIterator<AActor> it;
AActor * a;
while ((a=it.Next()))
{
gl_SetActorLights(a);
}
}
开发者ID:loismustdie555,项目名称:GZDoom-GPL,代码行数:10,代码来源:gl_dynlight.cpp
示例8: P_ActivateInStasis
void P_ActivateInStasis (int tag)
{
DPlat *scan;
TThinkerIterator<DPlat> iterator;
while ( (scan = iterator.Next ()) )
{
if (scan->m_Tag == tag && scan->m_Status == DPlat::in_stasis)
scan->Reactivate ();
}
}
开发者ID:JohnnyonFlame,项目名称:odamex,代码行数:11,代码来源:p_plats.cpp
示例9: EV_StopPlat
void EV_StopPlat (int tag)
{
DPlat *scan;
TThinkerIterator<DPlat> iterator;
while ( (scan = iterator.Next ()) )
{
if (scan->m_Status != DPlat::in_stasis && scan->m_Tag == tag)
scan->Stop ();
}
}
开发者ID:JohnnyonFlame,项目名称:odamex,代码行数:11,代码来源:p_plats.cpp
示例10: A_WakeOracleSpectre
void A_WakeOracleSpectre (AActor *self)
{
TThinkerIterator<AAlienSpectre3> it;
AActor *spectre = it.Next();
if (spectre != NULL)
{
spectre->Sector->SoundTarget = spectre->LastHeard = self->LastHeard;
spectre->target = self->target;
spectre->SetState (spectre->SeeState);
}
}
开发者ID:ddraigcymraeg,项目名称:gzscoredoom,代码行数:12,代码来源:a_oracle.cpp
示例11: EV_StopLightEffect
void EV_StopLightEffect (int tag)
{
TThinkerIterator<DLighting> iterator;
DLighting *effect;
while ((effect = iterator.Next()) != NULL)
{
if (effect->GetSector()->tag == tag)
{
effect->Destroy();
}
}
}
开发者ID:1Akula1,项目名称:gzdoom,代码行数:13,代码来源:p_lights.cpp
示例12: G_UnSnapshotLevel
void G_UnSnapshotLevel (bool hubLoad)
{
if (level.info->Snapshot.mBuffer == nullptr)
return;
if (level.info->isValid())
{
FSerializer arc;
if (!arc.OpenReader(&level.info->Snapshot))
{
I_Error("Failed to load savegame");
return;
}
G_SerializeLevel (arc, hubLoad);
level.FromSnapshot = true;
TThinkerIterator<APlayerPawn> it;
APlayerPawn *pawn, *next;
next = it.Next();
while ((pawn = next) != 0)
{
next = it.Next();
if (pawn->player == NULL || pawn->player->mo == NULL || !playeringame[pawn->player - players])
{
int i;
// If this isn't the unmorphed original copy of a player, destroy it, because it's extra.
for (i = 0; i < MAXPLAYERS; ++i)
{
if (playeringame[i] && players[i].morphTics && players[i].mo->tracer == pawn)
{
break;
}
}
if (i == MAXPLAYERS)
{
pawn->Destroy ();
}
}
}
}
// No reason to keep the snapshot around once the level's been entered.
level.info->Snapshot.Clean();
if (hubLoad)
{
// Unlock ACS global strings that were locked when the snapshot was made.
FBehavior::StaticUnlockLevelVarStrings();
}
}
开发者ID:floverdevel,项目名称:zdoom,代码行数:51,代码来源:g_level.cpp
示例13: P_ActivateInStasisCeiling
//
// Restart a ceiling that's in-stasis
// [RH] Passed a tag instead of a line and rewritten to use list
//
void P_ActivateInStasisCeiling (int tag)
{
DCeiling *scan;
TThinkerIterator<DCeiling> iterator;
while ( (scan = iterator.Next ()) )
{
if (scan->m_Tag == tag && scan->m_Direction == 0)
{
scan->m_Direction = scan->m_OldDirection;
scan->PlayCeilingSound ();
}
}
}
开发者ID:JohnnyonFlame,项目名称:odamex,代码行数:18,代码来源:p_ceiling.cpp
示例14: G_UnSnapshotLevel
void G_UnSnapshotLevel (bool hubLoad)
{
if (level.info->snapshot == NULL)
return;
if (level.info->isValid())
{
SaveVersion = level.info->snapshotVer;
level.info->snapshot->Reopen ();
FArchive arc (*level.info->snapshot);
if (hubLoad)
arc.SetHubTravel ();
G_SerializeLevel (arc, hubLoad);
arc.Close ();
level.FromSnapshot = true;
TThinkerIterator<APlayerPawn> it;
APlayerPawn *pawn, *next;
next = it.Next();
while ((pawn = next) != 0)
{
next = it.Next();
if (pawn->player == NULL || pawn->player->mo == NULL || !playeringame[pawn->player - players])
{
int i;
// If this isn't the unmorphed original copy of a player, destroy it, because it's extra.
for (i = 0; i < MAXPLAYERS; ++i)
{
if (playeringame[i] && players[i].morphTics && players[i].mo->tracer == pawn)
{
break;
}
}
if (i == MAXPLAYERS)
{
pawn->Destroy ();
}
}
}
}
// No reason to keep the snapshot around once the level's been entered.
level.info->ClearSnapshot();
if (hubLoad)
{
// Unlock ACS global strings that were locked when the snapshot was made.
FBehavior::StaticUnlockLevelVarStrings();
}
}
开发者ID:Quaker540,项目名称:gzdoom,代码行数:50,代码来源:g_level.cpp
示例15: gl_InitPortals
void gl_InitPortals()
{
TThinkerIterator<AStackPoint> it;
AStackPoint *pt;
while ((pt = it.Next()))
{
FPortal *portal = NULL;
int plane;
for(int i=0;i<numsectors;i++)
{
if (sectors[i].linecount == 0)
{
continue;
}
else if (sectors[i].FloorSkyBox == pt)
{
plane = 1;
}
else if (sectors[i].CeilingSkyBox == pt)
{
plane = 2;
}
else continue;
// we only process portals that actually are in use.
if (portal == NULL)
{
pt->special1 = portals.Size(); // Link portal thing to render data
portal = &portals[portals.Reserve(1)];
portal->origin = pt;
portal->plane = 0;
portal->xDisplacement = pt->x - pt->Mate->x;
portal->yDisplacement = pt->y - pt->Mate->y;
}
portal->AddSectorToPortal(§ors[i]);
portal->plane|=plane;
}
if (portal != NULL)
{
// if the first vertex is duplicated at the end it'll save time in a time critical function
// because that code does not need to check for wraparounds anymire.
portal->Shape.Resize(portal->Shape.Size()+1);
portal->Shape[portal->Shape.Size()-1] = portal->Shape[0];
portal->Shape.ShrinkToFit();
portal->ClipAngles.Resize(portal->Shape.Size());
}
}
}
开发者ID:Xeomuz,项目名称:Doom-Port-Source-Code,代码行数:49,代码来源:gl_portaldata.cpp
示例16:
void ASorcerer2::BeginPlay ()
{
TThinkerIterator<ABossSpot> iterator;
ABossSpot *spot;
Super::BeginPlay ();
NumBossSpots = 0;
spot = iterator.Next ();
FirstBossSpot = static_cast<ABossSpot *> (spot);
while (spot)
{
NumBossSpots++;
spot->NextSpot = iterator.Next ();
spot = spot->NextSpot;
}
}
开发者ID:ddraigcymraeg,项目名称:gzscoredoom,代码行数:16,代码来源:a_dsparil.cpp
示例17: EV_StopPlat
void EV_StopPlat (int tag, bool remove)
{
DPlat *scan;
TThinkerIterator<DPlat> iterator;
scan = iterator.Next();
while (scan != nullptr)
{
DPlat *next = iterator.Next();
if (scan->m_Status != DPlat::in_stasis && scan->m_Tag == tag)
{
if (!remove) scan->Stop();
else scan->Destroy();
}
scan = next;
}
}
开发者ID:gamegenten,项目名称:GZDoom-GPL,代码行数:17,代码来源:p_plats.cpp
示例18: COOP_PlayersVoodooDollsNeedToBeSpawned
//*****************************************************************************
//
bool COOP_PlayersVoodooDollsNeedToBeSpawned ( const ULONG ulPlayer )
{
// [BB] The current game mode doesn't need voodoo dolls.
if ( COOP_VoodooDollsSelectedByGameMode() == false )
return false;
// [BB] The map doesn't have any voodoo doll starts for this player.
if ( AllPlayerStarts[ulPlayer].Size() <= 1 )
return false;
// [BB] When we are using unassigned voodoo dolls, all dolls for all players
// (even those who are not in the game) are already spawned in P_SpawnThings.
// Therefore, we don't need to spawn any dolls afterwards.
if ( sv_coopunassignedvoodoodolls == true )
return false;
TThinkerIterator<AActor> Iterator;
AActor *pActor;
while (( pActor = Iterator.Next( )))
{
// [BB] This actor doesn't belong to a player, so it can't be a voodoo doll.
if ( pActor->player == NULL )
continue;
// [BB] Belongs to a different player.
if ( static_cast<ULONG>(pActor->player - players) != ulPlayer )
continue;
// [BB] If we come here, we found a body belonging to the player.
if (
// [BB] The current player doesn't have a body assigned, so we found a voodoo doll.
( players[ulPlayer].mo == NULL )
// [BB] A different body is assigned to the player, so we found a voodoo doll.
|| ( players[ulPlayer].mo != pActor )
)
{
// [BB] There already is a voodoo doll for the player, so we don't need to spawn it.
return false;
}
}
return true;
}
开发者ID:WChrisK,项目名称:Zandronum,代码行数:47,代码来源:cooperative.cpp
示例19: Destroy
void ACustomBridge::Destroy()
{
// Hexen originally just set a flag to make the bridge balls remove themselves in A_BridgeOrbit.
// But this is not safe with custom bridge balls that do not necessarily call that function.
// So the best course of action is to look for all bridge balls here and destroy them ourselves.
TThinkerIterator<AActor> it;
AActor *thing;
while ((thing = it.Next()))
{
if (thing->target == this)
{
thing->Destroy();
}
}
Super::Destroy();
}
开发者ID:Edward850,项目名称:zdoom,代码行数:18,代码来源:a_bridge.cpp
示例20: EV_CeilingCrushStop
//
// EV_CeilingCrushStop
// Stop a ceiling from crushing!
// [RH] Passed a tag instead of a line and rewritten to use list
//
BOOL EV_CeilingCrushStop (int tag)
{
BOOL rtn = false;
DCeiling *scan;
TThinkerIterator<DCeiling> iterator;
while ( (scan = iterator.Next ()) )
{
if (scan->m_Tag == tag && scan->m_Direction != 0)
{
S_StopSound (scan->m_Sector->soundorg);
scan->m_OldDirection = scan->m_Direction;
scan->m_Direction = 0; // in-stasis;
rtn = true;
}
}
return rtn;
}
开发者ID:JohnnyonFlame,项目名称:odamex,代码行数:24,代码来源:p_ceiling.cpp
注:本文中的TThinkerIterator类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论