void CNPC_BigMomma::NodeReach( void ) { CInfoBM *pTarget = (CInfoBM*)GetTarget(); Forget( bits_MEMORY_ADVANCE_NODE ); if ( !pTarget ) return; if ( pTarget->m_iHealth >= 1 ) m_iMaxHealth = m_iHealth = pTarget->m_iHealth * sk_bigmomma_health_factor.GetFloat(); if ( !HasMemory( bits_MEMORY_FIRED_NODE ) ) { if ( pTarget ) { pTarget->m_OnAnimationEvent.FireOutput( this, this ); } } Forget( bits_MEMORY_FIRED_NODE ); m_iszTarget = pTarget->m_target; if ( pTarget->m_iHealth == 0 ) Remember( bits_MEMORY_ADVANCE_NODE ); // Move on if no health at this node else { GetNavigator()->ClearGoal(); } }
void CNPC_BigMomma::LayHeadcrab( void ) { CBaseEntity *pChild = CBaseEntity::Create( BIG_CHILDCLASS, GetAbsOrigin(), GetAbsAngles(), this ); pChild->AddSpawnFlags( SF_NPC_FALL_TO_GROUND ); pChild->SetOwnerEntity( this ); // Is this the second crab in a pair? if ( HasMemory( bits_MEMORY_CHILDPAIR ) ) { m_crabTime = gpGlobals->curtime + RandomFloat( 5, 10 ); Forget( bits_MEMORY_CHILDPAIR ); } else { m_crabTime = gpGlobals->curtime + RandomFloat( 0.5, 2.5 ); Remember( bits_MEMORY_CHILDPAIR ); } trace_t tr; UTIL_TraceLine( GetAbsOrigin(), GetAbsOrigin() - Vector(0,0,100), MASK_SOLID, this, COLLISION_GROUP_NONE, &tr ); UTIL_DecalTrace( &tr, "Splash" ); CPASAttenuationFilter filter( this ); EmitSound( filter, entindex(), "BigMomma.LayHeadcrab" ); m_crabCount++; }
//----------------------------------------------------------------------------- //----------------------------------------------------------------------------- bool CRebelZombie::IsHeavyDamage( const CTakeDamageInfo &info ) { #ifdef HL2_EPISODIC if ( info.GetDamageType() & DMG_BUCKSHOT ) { if ( info.GetDamage() > (m_iMaxHealth/3) ) return true; } // Randomly treat all damage as heavy if ( info.GetDamageType() & (DMG_BULLET | DMG_BUCKSHOT) ) { // Don't randomly flinch if I'm melee attacking if ( !HasCondition(COND_CAN_MELEE_ATTACK1) && (RandomFloat() > 0.5) ) { // Randomly forget I've flinched, so that I'll be forced to play a big flinch // If this doesn't happen, it means I may not fully flinch if I recently flinched if ( RandomFloat() > 0.75 ) { Forget(bits_MEMORY_FLINCHED); } return true; } } #endif // HL2_EPISODIC return BaseClass::IsHeavyDamage(info); }
void CBigMomma :: LayHeadcrab( void ) { CBaseEntity *pChild = CBaseEntity::Create( BIG_CHILDCLASS, pev->origin, pev->angles, edict() ); pChild->pev->spawnflags |= SF_MONSTER_FALL_TO_GROUND; // Is this the second crab in a pair? if ( HasMemory( bits_MEMORY_CHILDPAIR ) ) { m_crabTime = gpGlobals->time + RANDOM_FLOAT( 5, 10 ); Forget( bits_MEMORY_CHILDPAIR ); } else { m_crabTime = gpGlobals->time + RANDOM_FLOAT( 0.5, 2.5 ); Remember( bits_MEMORY_CHILDPAIR ); } TraceResult tr; UTIL_TraceLine( pev->origin, pev->origin - Vector(0,0,100), ignore_monsters, edict(), &tr); UTIL_DecalTrace( &tr, DECAL_MOMMABIRTH ); EMIT_SOUND_DYN( edict(), CHAN_WEAPON, RANDOM_SOUND_ARRAY(pBirthSounds), 1.0, ATTN_NORM, 0, 100 + RANDOM_LONG(-5,5) ); m_crabCount++; }
jclass GetClassRef(JNIEnv* aEnv, const char* aClassName) { // First try the default class loader. auto classRef = Class::LocalRef::Adopt(aEnv, aEnv->FindClass(aClassName)); if ((!classRef || aEnv->ExceptionCheck()) && sClassLoader) { // If the default class loader failed but we have an app class loader, try that. // Clear the pending exception from failed FindClass call above. aEnv->ExceptionClear(); classRef = Class::LocalRef::Adopt(aEnv, jclass( aEnv->CallObjectMethod(sClassLoader, sClassLoaderLoadClass, StringParam(aClassName, aEnv).Get()))); } if (classRef && !aEnv->ExceptionCheck()) { return classRef.Forget(); } __android_log_print( ANDROID_LOG_ERROR, "Gecko", ">>> FATAL JNI ERROR! FindClass(\"%s\") failed. " "Does the class require a newer API version? " "Or did ProGuard optimize away something it shouldn't have?", aClassName); aEnv->ExceptionDescribe(); MOZ_CRASH("Cannot find JNI class"); return nullptr; }
int OnlineSVR::Forget (int* Indexes, int ElementsNumber) { Vector<int>* NewIndexes = new Vector<int>(Indexes,ElementsNumber); int Flops = Forget(NewIndexes); delete NewIndexes; return Flops; }
void TNearestNeighbor::PartialFit(const TIntFltKdV& Vec, const int& RecId) { if (InitVecs < WindowSize) { // not yet full, extend matrix and distance vectors Mat.Add(Vec); IDVec.Add(RecId); // make sure we are very far from everything for update distance to kick in DistV.Add(TFlt::Mx); DistColV.Add(InitVecs); // update distance for new vector UpdateDistance(InitVecs); // move onwards InitVecs++; // check if we are initialized if (InitVecs == WindowSize) { UpdateThreshold(); } } else { // we are full, make space first Forget(NextCol); // overwrite Mat[NextCol] = Vec; IDVec[NextCol] = RecId; DistV[NextCol] = TFlt::Mx; DistColV[NextCol] = NextCol; // update distance for overwriten vector UpdateDistance(NextCol); // establish new threshold UpdateThreshold(); // move onwards NextCol++; if (NextCol >= WindowSize) { NextCol = 0; } } }
void ReadStream::Inner::Serialize(CacheReadStream* aReadStreamOut, ErrorResult& aRv) { MOZ_ASSERT(NS_GetCurrentThread() == mOwningThread); MOZ_ASSERT(aReadStreamOut); if (mState != Open) { aRv.ThrowTypeError<MSG_CACHE_STREAM_CLOSED>(); return; } MOZ_ASSERT(mControl); // If we are sending a ReadStream, then we never want to set the // pushStream actors at the same time. aReadStreamOut->pushStreamChild() = nullptr; aReadStreamOut->pushStreamParent() = nullptr; aReadStreamOut->id() = mId; mControl->SerializeControl(aReadStreamOut); AutoTArray<FileDescriptor, 4> fds; SerializeInputStream(mStream, aReadStreamOut->params(), fds); mControl->SerializeFds(aReadStreamOut, fds); // We're passing ownership across the IPC barrier with the control, so // do not signal that the stream is closed here. Forget(); }
int OnlineSVR::Forget (Vector<double>* Sample) { int Index = this->X->IndexOf(Sample); if (Index < 0) { this->ShowMessage("Warning! Element to remove not exists!", VERBOSITY_NORMAL); return -1; } return Forget(Index); }
TError TNlAddr::Parse(int family, const std::string &string) { Forget(); int ret = nl_addr_parse(string.c_str(), family, &Addr); if (ret) return TNl::Error(ret, "Cannot parse address " + string); return TError::Success(); }
void DeviceView::contextMenuEvent(QContextMenuEvent* e) { if (!device_menu_) { device_menu_ = new QMenu(this); library_menu_ = new QMenu(this); // Device menu eject_action_ = device_menu_->addAction( IconLoader::Load("media-eject"), tr("Safely remove device"), this, SLOT(Unmount())); forget_action_ = device_menu_->addAction( IconLoader::Load("list-remove"), tr("Forget device"), this, SLOT(Forget())); device_menu_->addSeparator(); properties_action_ = device_menu_->addAction( IconLoader::Load("configure"), tr("Device properties..."), this, SLOT(Properties())); // Library menu add_to_playlist_action_ = library_menu_->addAction(IconLoader::Load("media-playback-start"), tr("Append to current playlist"), this, SLOT(AddToPlaylist())); load_action_ = library_menu_->addAction(IconLoader::Load("media-playback-start"), tr("Replace current playlist"), this, SLOT(Load())); open_in_new_playlist_ = library_menu_->addAction(IconLoader::Load("document-new"), tr("Open in new playlist"), this, SLOT(OpenInNewPlaylist())); library_menu_->addSeparator(); organise_action_ = library_menu_->addAction(IconLoader::Load("edit-copy"), tr("Copy to library..."), this, SLOT(Organise())); delete_action_ = library_menu_->addAction(IconLoader::Load("edit-delete"), tr("Delete from device..."), this, SLOT(Delete())); } menu_index_ = currentIndex(); const QModelIndex device_index = MapToDevice(menu_index_); const QModelIndex library_index = MapToLibrary(menu_index_); if (device_index.isValid()) { const bool is_plugged_in = app_->device_manager()->GetLister(device_index.row()); const bool is_remembered = app_->device_manager()->GetDatabaseId(device_index.row()) != -1; forget_action_->setEnabled(is_remembered); eject_action_->setEnabled(is_plugged_in); device_menu_->popup(e->globalPos()); } else if (library_index.isValid()) { const QModelIndex parent_device_index = FindParentDevice(menu_index_); bool is_filesystem_device = false; if (parent_device_index.isValid()) { boost::shared_ptr<ConnectedDevice> device = app_->device_manager()->GetConnectedDevice(parent_device_index.row()); if (device && !device->LocalPath().isEmpty()) is_filesystem_device = true; } organise_action_->setEnabled(is_filesystem_device); library_menu_->popup(e->globalPos()); } }
void View::SetObject(Scrollable* object) { assert(object!=NULL); if (this->object!=NULL) { Forget(object->GetHAdjustment()->GetTotalModel()); Forget(object->GetVAdjustment()->GetTotalModel()); delete this->object; } this->object=object; object->SetParent(this); object->SetFlex(true,true); Observe(object->GetHAdjustment()->GetTotalModel()); Observe(object->GetVAdjustment()->GetTotalModel()); kineticScroller->SetScrollable(object); }
void CBigMomma::NodeReach( void ) { CBaseEntity *pTarget = m_hTargetEnt; Forget( bits_MEMORY_ADVANCE_NODE ); if ( !pTarget ) return; if ( pTarget->pev->health ) pev->max_health = pev->health = pTarget->pev->health * gSkillData.bigmommaHealthFactor; if ( !HasMemory( bits_MEMORY_FIRED_NODE ) ) { if ( pTarget->pev->message ) FireTargets( STRING(pTarget->pev->message), this, this, USE_TOGGLE, 0 ); } Forget( bits_MEMORY_FIRED_NODE ); pev->netname = pTarget->pev->target; if ( pTarget->pev->health == 0 ) Remember( bits_MEMORY_ADVANCE_NODE ); // Move on if no health at this node }
int CE_Cycler_Fix::OnTakeDamage_Alive(const CTakeDamageInfo& info) { #if 0 return BaseClass::OnTakeDamage_Alive(info); #endif Forget( bits_MEMORY_INCOVER ); if ( !CCombatCharacter::FAKE_OnTakeDamage_Alive( info ) ) return 0; if ( GetSleepState() == AISS_WAITING_FOR_THREAT ) Wake(); CEntity *attacker = CEntity::Instance(info.GetAttacker()); // NOTE: This must happen after the base class is called; we need to reduce // health before the pain sound, since some NPCs use the final health // level as a modifier to determine which pain sound to use. // REVISIT: Combine soldiers shoot each other a lot and then talk about it // this improves that case a bunch, but it seems kind of harsh. if ( !GetSquad() || !GetSquad()->SquadIsMember( attacker ) ) { PainSound( info );// "Ouch!" } // See if we're running a dynamic interaction that should break when I am damaged. if ( IsActiveDynamicInteraction() ) { ScriptedNPCInteraction_t *pInteraction = GetRunningDynamicInteraction(); if ( pInteraction->iLoopBreakTriggerMethod & SNPCINT_LOOPBREAK_ON_DAMAGE ) { CEAI_ScriptedSequence *_m_hCine = Get_m_hCine(); // Can only break when we're in the action anim if ( _m_hCine->IsPlayingAction() ) { _m_hCine->StopActionLoop( true ); } } } // If we're not allowed to die, refuse to die // Allow my interaction partner to kill me though if ( m_iHealth <= 0 && HasInteractionCantDie() && attacker != m_hInteractionPartner ) { m_iHealth = 1; } // ----------------------------------- // Fire outputs // ----------------------------------- if ( m_flLastDamageTime != gpGlobals->curtime ) { // only fire once per frame m_OnDamaged->FireOutput( attacker, this); if( attacker && attacker->IsPlayer() ) { m_OnDamagedByPlayer->FireOutput( attacker, this ); // This also counts as being harmed by player's squad. m_OnDamagedByPlayerSquad->FireOutput( attacker, this ); } else { // See if the person that injured me is an NPC. CAI_NPC *pAttacker = dynamic_cast<CAI_NPC *>( attacker ); if( pAttacker && pAttacker->IsAlive() ) { if( pAttacker->GetSquad() != NULL && pAttacker->IsInPlayerSquad() ) { m_OnDamagedByPlayerSquad->FireOutput( attacker, this ); } } } } if( (info.GetDamageType() & DMG_CRUSH) && !(info.GetDamageType() & DMG_PHYSGUN) && info.GetDamage() >= MIN_PHYSICS_FLINCH_DAMAGE ) { SetCondition( COND_PHYSICS_DAMAGE ); } if ( m_iHealth <= ( m_iMaxHealth / 2 ) ) { m_OnHalfHealth->FireOutput( attacker, this ); } // react to the damage (get mad) if ( ( (GetFlags() & FL_NPC) == 0 ) || !attacker ) return 1; // If the attacker was an NPC or client update my position memory if ( attacker->GetFlags() & (FL_NPC | FL_CLIENT) ) { // ------------------------------------------------------------------ // DO NOT CHANGE THIS CODE W/O CONSULTING // Only update information about my attacker I don't see my attacker // ------------------------------------------------------------------ if ( !FInViewCone_Entity( info.GetAttacker() ) || !FVisible_Entity( info.GetAttacker() ) ) { // ------------------------------------------------------------- // If I have an inflictor (enemy / grenade) update memory with // position of inflictor, otherwise update with an position // estimate for where the attack came from // ------------------------------------------------------ Vector vAttackPos; CEntity *inflictor = CEntity::Instance(info.GetInflictor()); if (inflictor) { vAttackPos = inflictor->GetAbsOrigin(); } else { vAttackPos = (GetAbsOrigin() + ( *g_vecAttackDir * 64 )); } // ---------------------------------------------------------------- // If I already have an enemy, assume that the attack // came from the enemy and update my enemy's position // unless I already know about the attacker or I can see my enemy // ---------------------------------------------------------------- if ( GetEnemy() != NULL && !GetEnemies()->HasMemory( info.GetAttacker() ) && !HasCondition(COND_SEE_ENEMY) ) { UpdateEnemyMemory(GetEnemy_CBase(), vAttackPos, GetEnemy_CBase()); } // ---------------------------------------------------------------- // If I already know about this enemy, update his position // ---------------------------------------------------------------- else if (GetEnemies()->HasMemory( info.GetAttacker() )) { UpdateEnemyMemory(info.GetAttacker(), vAttackPos); } // ----------------------------------------------------------------- // Otherwise just note the position, but don't add enemy to my list // ----------------------------------------------------------------- else { UpdateEnemyMemory(NULL, vAttackPos); } } // add pain to the conditions if ( IsLightDamage( info ) ) { SetCondition( COND_LIGHT_DAMAGE ); } if ( IsHeavyDamage( info ) ) { SetCondition( COND_HEAVY_DAMAGE ); } ForceGatherConditions(); // Keep track of how much consecutive damage I have recieved if ((gpGlobals->curtime - m_flLastDamageTime) < 1.0) { m_flSumDamage += info.GetDamage(); } else { m_flSumDamage = info.GetDamage(); } m_flLastDamageTime = gpGlobals->curtime; if ( attacker && attacker->IsPlayer() ) m_flLastPlayerDamageTime = gpGlobals->curtime; GetEnemies()->OnTookDamageFrom( info.GetAttacker() ); if (m_flSumDamage > m_iMaxHealth*0.3) { SetCondition(COND_REPEATED_DAMAGE); } NotifyFriendsOfDamage( info.GetAttacker() ); } // --------------------------------------------------------------- // Insert a combat sound so that nearby NPCs know I've been hit // --------------------------------------------------------------- g_helpfunc.CSoundEnt_InsertSound(SOUND_COMBAT, GetAbsOrigin(), 1024, 0.5, BaseEntity(), SOUNDENT_CHANNEL_INJURY ); return 1; }
//========================================================= // Start task - selects the correct activity and performs // any necessary calculations to start the next task on the // schedule. //========================================================= void CBaseMonster :: StartTask ( Task_t *pTask ) { switch ( pTask->iTask ) { case TASK_TURN_RIGHT: { float flCurrentYaw; flCurrentYaw = UTIL_AngleMod( pev->angles.y ); pev->ideal_yaw = UTIL_AngleMod( flCurrentYaw - pTask->flData ); SetTurnActivity(); break; } case TASK_TURN_LEFT: { float flCurrentYaw; flCurrentYaw = UTIL_AngleMod( pev->angles.y ); pev->ideal_yaw = UTIL_AngleMod( flCurrentYaw + pTask->flData ); SetTurnActivity(); break; } case TASK_REMEMBER: { Remember ( (int)pTask->flData ); TaskComplete(); break; } case TASK_FORGET: { Forget ( (int)pTask->flData ); TaskComplete(); break; } case TASK_FIND_HINTNODE: { m_iHintNode = FindHintNode(); if ( m_iHintNode != NO_NODE ) { TaskComplete(); } else { TaskFail(); } break; } case TASK_STORE_LASTPOSITION: { m_vecLastPosition = pev->origin; TaskComplete(); break; } case TASK_CLEAR_LASTPOSITION: { m_vecLastPosition = g_vecZero; TaskComplete(); break; } case TASK_CLEAR_HINTNODE: { m_iHintNode = NO_NODE; TaskComplete(); break; } case TASK_STOP_MOVING: { if ( m_IdealActivity == m_movementActivity ) { m_IdealActivity = GetStoppedActivity(); } RouteClear(); TaskComplete(); break; } case TASK_PLAY_SEQUENCE_FACE_ENEMY: case TASK_PLAY_SEQUENCE_FACE_TARGET: case TASK_PLAY_SEQUENCE: { m_IdealActivity = ( Activity )( int )pTask->flData; break; } case TASK_PLAY_ACTIVE_IDLE: { // monsters verify that they have a sequence for the node's activity BEFORE // moving towards the node, so it's ok to just set the activity without checking here. m_IdealActivity = ( Activity )WorldGraph.m_pNodes[ m_iHintNode ].m_sHintActivity; break; } case TASK_SET_SCHEDULE: { Schedule_t *pNewSchedule; pNewSchedule = GetScheduleOfType( (int)pTask->flData ); if ( pNewSchedule ) { ChangeSchedule( pNewSchedule ); } else { TaskFail(); } break; } case TASK_FIND_NEAR_NODE_COVER_FROM_ENEMY: { if ( m_hEnemy == NULL ) { TaskFail(); return; } if ( FindCover( m_hEnemy->pev->origin, m_hEnemy->pev->view_ofs, 0, pTask->flData ) ) { // try for cover farther than the FLData from the schedule. TaskComplete(); } else { // no coverwhatsoever. TaskFail(); } break; } case TASK_FIND_FAR_NODE_COVER_FROM_ENEMY: { if ( m_hEnemy == NULL ) { TaskFail(); return; } if ( FindCover( m_hEnemy->pev->origin, m_hEnemy->pev->view_ofs, pTask->flData, CoverRadius() ) ) { // try for cover farther than the FLData from the schedule. TaskComplete(); } else { // no coverwhatsoever. TaskFail(); } break; } case TASK_FIND_NODE_COVER_FROM_ENEMY: { if ( m_hEnemy == NULL ) { TaskFail(); return; } if ( FindCover( m_hEnemy->pev->origin, m_hEnemy->pev->view_ofs, 0, CoverRadius() ) ) { // try for cover farther than the FLData from the schedule. TaskComplete(); } else { // no coverwhatsoever. TaskFail(); } break; } case TASK_FIND_COVER_FROM_ENEMY: { entvars_t *pevCover; if ( m_hEnemy == NULL ) { // Find cover from self if no enemy available pevCover = pev; // TaskFail(); // return; } else pevCover = m_hEnemy->pev; if ( FindLateralCover( pevCover->origin, pevCover->view_ofs ) ) { // try lateral first m_flMoveWaitFinished = gpGlobals->time + pTask->flData; TaskComplete(); } else if ( FindCover( pevCover->origin, pevCover->view_ofs, 0, CoverRadius() ) ) { // then try for plain ole cover m_flMoveWaitFinished = gpGlobals->time + pTask->flData; TaskComplete(); } else { // no coverwhatsoever. TaskFail(); } break; } case TASK_FIND_COVER_FROM_ORIGIN: { if ( FindCover( pev->origin, pev->view_ofs, 0, CoverRadius() ) ) { // then try for plain ole cover m_flMoveWaitFinished = gpGlobals->time + pTask->flData; TaskComplete(); } else { // no cover! TaskFail(); } } break; case TASK_FIND_COVER_FROM_BEST_SOUND: { CSound *pBestSound; pBestSound = PBestSound(); ASSERT( pBestSound != NULL ); /* if ( pBestSound && FindLateralCover( pBestSound->m_vecOrigin, g_vecZero ) ) { // try lateral first m_flMoveWaitFinished = gpGlobals->time + pTask->flData; TaskComplete(); } */ if ( pBestSound && FindCover( pBestSound->m_vecOrigin, g_vecZero, pBestSound->m_iVolume, CoverRadius() ) ) { // then try for plain ole cover m_flMoveWaitFinished = gpGlobals->time + pTask->flData; TaskComplete(); } else { // no coverwhatsoever. or no sound in list TaskFail(); } break; } case TASK_FACE_HINTNODE: { pev->ideal_yaw = WorldGraph.m_pNodes[ m_iHintNode ].m_flHintYaw; SetTurnActivity(); break; } case TASK_FACE_LASTPOSITION: MakeIdealYaw ( m_vecLastPosition ); SetTurnActivity(); break; case TASK_FACE_TARGET: if ( m_hTargetEnt != NULL ) { MakeIdealYaw ( m_hTargetEnt->pev->origin ); SetTurnActivity(); } else TaskFail(); break; case TASK_FACE_ENEMY: { MakeIdealYaw ( m_vecEnemyLKP ); SetTurnActivity(); break; } case TASK_FACE_IDEAL: { SetTurnActivity(); break; } case TASK_FACE_ROUTE: { if (FRouteClear()) { ALERT(at_aiconsole, "No route to face!\n"); TaskFail(); } else { MakeIdealYaw(m_Route[m_iRouteIndex].vecLocation); SetTurnActivity(); } break; } case TASK_WAIT_PVS: case TASK_WAIT_INDEFINITE: { // don't do anything. break; } case TASK_WAIT: case TASK_WAIT_FACE_ENEMY: {// set a future time that tells us when the wait is over. m_flWaitFinished = gpGlobals->time + pTask->flData; break; } case TASK_WAIT_RANDOM: {// set a future time that tells us when the wait is over. m_flWaitFinished = gpGlobals->time + RANDOM_FLOAT( 0.1, pTask->flData ); break; } case TASK_MOVE_TO_TARGET_RANGE: { if ( (m_hTargetEnt->pev->origin - pev->origin).Length() < 1 ) TaskComplete(); else { m_vecMoveGoal = m_hTargetEnt->pev->origin; if ( !MoveToTarget( ACT_WALK, 2 ) ) TaskFail(); } break; } case TASK_RUN_TO_SCRIPT: case TASK_WALK_TO_SCRIPT: { Activity newActivity; if ( !m_pGoalEnt || (m_pGoalEnt->pev->origin - pev->origin).Length() < 1 ) TaskComplete(); else { if ( pTask->iTask == TASK_WALK_TO_SCRIPT ) newActivity = ACT_WALK; else newActivity = ACT_RUN; // This monster can't do this! if ( LookupActivity( newActivity ) == ACTIVITY_NOT_AVAILABLE ) TaskComplete(); else { if ( m_pGoalEnt != NULL ) { Vector vecDest; vecDest = m_pGoalEnt->pev->origin; if ( !MoveToLocation( newActivity, 2, vecDest ) ) { TaskFail(); ALERT( at_aiconsole, "%s Failed to reach script!!!\n", STRING(pev->classname) ); RouteClear(); } } else { TaskFail(); ALERT( at_aiconsole, "%s: MoveTarget is missing!?!\n", STRING(pev->classname) ); RouteClear(); } } } TaskComplete(); break; } case TASK_CLEAR_MOVE_WAIT: { m_flMoveWaitFinished = gpGlobals->time; TaskComplete(); break; } case TASK_MELEE_ATTACK1_NOTURN: case TASK_MELEE_ATTACK1: { m_IdealActivity = ACT_MELEE_ATTACK1; break; } case TASK_MELEE_ATTACK2_NOTURN: case TASK_MELEE_ATTACK2: { m_IdealActivity = ACT_MELEE_ATTACK2; break; } case TASK_RANGE_ATTACK1_NOTURN: case TASK_RANGE_ATTACK1: { m_IdealActivity = ACT_RANGE_ATTACK1; break; } case TASK_RANGE_ATTACK2_NOTURN: case TASK_RANGE_ATTACK2: { m_IdealActivity = ACT_RANGE_ATTACK2; break; } case TASK_RELOAD_NOTURN: case TASK_RELOAD: { m_IdealActivity = ACT_RELOAD; break; } case TASK_SPECIAL_ATTACK1: { m_IdealActivity = ACT_SPECIAL_ATTACK1; break; } case TASK_SPECIAL_ATTACK2: { m_IdealActivity = ACT_SPECIAL_ATTACK2; break; } case TASK_SET_ACTIVITY: { m_IdealActivity = (Activity)(int)pTask->flData; TaskComplete(); break; } case TASK_GET_PATH_TO_ENEMY_LKP: { if ( BuildRoute ( m_vecEnemyLKP, bits_MF_TO_LOCATION, NULL ) ) { TaskComplete(); } else if (BuildNearestRoute( m_vecEnemyLKP, pev->view_ofs, 0, (m_vecEnemyLKP - pev->origin).Length() )) { TaskComplete(); } else { // no way to get there =( ALERT ( at_aiconsole, "GetPathToEnemyLKP failed!!\n" ); TaskFail(); } break; } case TASK_GET_PATH_TO_ENEMY: { CBaseEntity *pEnemy = m_hEnemy; if ( pEnemy == NULL ) { TaskFail(); return; } if ( BuildRoute ( pEnemy->pev->origin, bits_MF_TO_ENEMY, pEnemy ) ) { TaskComplete(); } else if (BuildNearestRoute( pEnemy->pev->origin, pEnemy->pev->view_ofs, 0, (pEnemy->pev->origin - pev->origin).Length() )) { TaskComplete(); } else { // no way to get there =( ALERT ( at_aiconsole, "GetPathToEnemy failed!!\n" ); TaskFail(); } break; } case TASK_GET_PATH_TO_ENEMY_CORPSE: { UTIL_MakeVectors( pev->angles ); if ( BuildRoute ( m_vecEnemyLKP - gpGlobals->v_forward * 64, bits_MF_TO_LOCATION, NULL ) ) { TaskComplete(); } else { ALERT ( at_aiconsole, "GetPathToEnemyCorpse failed!!\n" ); TaskFail(); } } break; case TASK_GET_PATH_TO_SPOT: { CBaseEntity *pPlayer = UTIL_FindEntityByClassname( NULL, "player" ); if ( BuildRoute ( m_vecMoveGoal, bits_MF_TO_LOCATION, pPlayer ) ) { TaskComplete(); } else { // no way to get there =( ALERT ( at_aiconsole, "GetPathToSpot failed!!\n" ); TaskFail(); } break; } case TASK_GET_PATH_TO_TARGET: { RouteClear(); if ( m_hTargetEnt != NULL && MoveToTarget( m_movementActivity, 1 ) ) { TaskComplete(); } else { // no way to get there =( ALERT ( at_aiconsole, "GetPathToSpot failed!!\n" ); TaskFail(); } break; } case TASK_GET_PATH_TO_SCRIPT: { RouteClear(); if ( m_pCine != NULL && MoveToLocation( m_movementActivity, 1, m_pCine->pev->origin ) ) { TaskComplete(); } else { // no way to get there =( ALERT ( at_aiconsole, "GetPathToSpot failed!!\n" ); TaskFail(); } break; } case TASK_GET_PATH_TO_HINTNODE:// for active idles! { if ( MoveToLocation( m_movementActivity, 2, WorldGraph.m_pNodes[ m_iHintNode ].m_vecOrigin ) ) { TaskComplete(); } else { // no way to get there =( ALERT ( at_aiconsole, "GetPathToHintNode failed!!\n" ); TaskFail(); } break; } case TASK_GET_PATH_TO_LASTPOSITION: { m_vecMoveGoal = m_vecLastPosition; if ( MoveToLocation( m_movementActivity, 2, m_vecMoveGoal ) ) { TaskComplete(); } else { // no way to get there =( ALERT ( at_aiconsole, "GetPathToLastPosition failed!!\n" ); TaskFail(); } break; } case TASK_GET_PATH_TO_BESTSOUND: { CSound *pSound; pSound = PBestSound(); if ( pSound && MoveToLocation( m_movementActivity, 2, pSound->m_vecOrigin ) ) { TaskComplete(); } else { // no way to get there =( ALERT ( at_aiconsole, "GetPathToBestSound failed!!\n" ); TaskFail(); } break; } case TASK_GET_PATH_TO_BESTSCENT: { CSound *pScent; pScent = PBestScent(); if ( pScent && MoveToLocation( m_movementActivity, 2, pScent->m_vecOrigin ) ) { TaskComplete(); } else { // no way to get there =( ALERT ( at_aiconsole, "GetPathToBestScent failed!!\n" ); TaskFail(); } break; } case TASK_RUN_PATH: { // UNDONE: This is in some default AI and some monsters can't run? -- walk instead? if ( LookupActivity( ACT_RUN ) != ACTIVITY_NOT_AVAILABLE ) { m_movementActivity = ACT_RUN; } else { m_movementActivity = ACT_WALK; } TaskComplete(); break; } case TASK_WALK_PATH: { if ( pev->movetype == MOVETYPE_FLY ) { m_movementActivity = ACT_FLY; } if ( LookupActivity( ACT_WALK ) != ACTIVITY_NOT_AVAILABLE ) { m_movementActivity = ACT_WALK; } else { m_movementActivity = ACT_RUN; } TaskComplete(); break; } case TASK_STRAFE_PATH: { Vector2D vec2DirToPoint; Vector2D vec2RightSide; // to start strafing, we have to first figure out if the target is on the left side or right side UTIL_MakeVectors ( pev->angles ); vec2DirToPoint = ( m_Route[ 0 ].vecLocation - pev->origin ).Make2D().Normalize(); vec2RightSide = gpGlobals->v_right.Make2D().Normalize(); if ( DotProduct ( vec2DirToPoint, vec2RightSide ) > 0 ) { // strafe right m_movementActivity = ACT_STRAFE_RIGHT; } else { // strafe left m_movementActivity = ACT_STRAFE_LEFT; } TaskComplete(); break; } case TASK_WAIT_FOR_MOVEMENT: { if (FRouteClear()) { TaskComplete(); } break; } case TASK_EAT: { Eat( pTask->flData ); TaskComplete(); break; } case TASK_SMALL_FLINCH: { m_IdealActivity = GetSmallFlinchActivity(); break; } case TASK_DIE: { RouteClear(); m_IdealActivity = GetDeathActivity(); pev->deadflag = DEAD_DYING; break; } case TASK_SOUND_WAKE: { AlertSound(); TaskComplete(); break; } case TASK_SOUND_DIE: { DeathSound(); TaskComplete(); break; } case TASK_SOUND_IDLE: { IdleSound(); TaskComplete(); break; } case TASK_SOUND_PAIN: { PainSound(); TaskComplete(); break; } case TASK_SOUND_DEATH: { DeathSound(); TaskComplete(); break; } case TASK_SOUND_ANGRY: { // sounds are complete as soon as we get here, cause we've already played them. ALERT ( at_aiconsole, "SOUND\n" ); TaskComplete(); break; } case TASK_WAIT_FOR_SCRIPT: { if ( m_pCine->m_iDelay <= 0 && gpGlobals->time >= m_pCine->m_startTime ) { TaskComplete(); //LRC - start playing immediately } else if (!m_pCine->IsAction() && m_pCine->m_iszIdle) { m_pCine->StartSequence( (CBaseMonster *)this, m_pCine->m_iszIdle, FALSE ); if (FStrEq( STRING(m_pCine->m_iszIdle), STRING(m_pCine->m_iszPlay))) { pev->framerate = 0; } } else m_IdealActivity = ACT_IDLE; break; } case TASK_PLAY_SCRIPT: { if (m_pCine->IsAction()) { //ALERT(at_console,"PlayScript: setting idealactivity %d\n",m_pCine->m_fAction); switch(m_pCine->m_fAction) { case 0: m_IdealActivity = ACT_RANGE_ATTACK1; break; case 1: m_IdealActivity = ACT_RANGE_ATTACK2; break; case 2: m_IdealActivity = ACT_MELEE_ATTACK1; break; case 3: m_IdealActivity = ACT_MELEE_ATTACK2; break; case 4: m_IdealActivity = ACT_SPECIAL_ATTACK1; break; case 5: m_IdealActivity = ACT_SPECIAL_ATTACK2; break; case 6: m_IdealActivity = ACT_RELOAD; break; case 7: m_IdealActivity = ACT_HOP; break; } pev->framerate = 1.0; // shouldn't be needed, but just in case pev->movetype = MOVETYPE_FLY; ClearBits(pev->flags, FL_ONGROUND); } else { m_pCine->StartSequence( (CBaseMonster *)this, m_pCine->m_iszPlay, TRUE ); if ( m_fSequenceFinished ) ClearSchedule(); pev->framerate = 1.0; //ALERT( at_aiconsole, "Script %s has begun for %s\n", STRING( m_pCine->m_iszPlay ), STRING(pev->classname) ); } m_scriptState = SCRIPT_PLAYING; break; } case TASK_ENABLE_SCRIPT: { m_pCine->DelayStart( 0 ); TaskComplete(); break; } //LRC case TASK_END_SCRIPT: { m_pCine->SequenceDone( this ); TaskComplete(); break; } case TASK_PLANT_ON_SCRIPT: { if ( m_pCine != NULL ) { // Plant on script // LRC - if it's a teleport script, do the turn too if (m_pCine->m_fMoveTo == 4 || m_pCine->m_fMoveTo == 6) { if (m_pCine->m_fTurnType == 0) //LRC pev->angles.y = m_hTargetEnt->pev->angles.y; else if (m_pCine->m_fTurnType == 1) pev->angles.y = UTIL_VecToYaw(m_hTargetEnt->pev->origin - pev->origin); pev->ideal_yaw = pev->angles.y; pev->avelocity = Vector( 0, 0, 0 ); pev->velocity = Vector( 0, 0, 0 ); pev->effects |= EF_NOINTERP; } if (m_pCine->m_fMoveTo != 6) pev->origin = m_pGoalEnt->pev->origin; } TaskComplete(); break; } case TASK_FACE_SCRIPT: { if ( m_pCine != NULL && m_pCine->m_fMoveTo != 0) // movetype "no move" makes us ignore turntype { switch (m_pCine->m_fTurnType) { case 0: pev->ideal_yaw = UTIL_AngleMod( m_pCine->pev->angles.y ); break; case 1: // yes, this is inconsistent- turn to face uses the "target" and turn to angle uses the "cine". if (m_hTargetEnt) MakeIdealYaw ( m_hTargetEnt->pev->origin ); else MakeIdealYaw ( m_pCine->pev->origin ); break; // default: don't turn } } TaskComplete(); m_IdealActivity = ACT_IDLE; RouteClear(); break; } case TASK_SUGGEST_STATE: { m_IdealMonsterState = (MONSTERSTATE)(int)pTask->flData; TaskComplete(); break; } case TASK_SET_FAIL_SCHEDULE: m_failSchedule = (int)pTask->flData; TaskComplete(); break; case TASK_CLEAR_FAIL_SCHEDULE: m_failSchedule = SCHED_NONE; TaskComplete(); break; default: { ALERT ( at_aiconsole, "No StartTask entry for %d\n", (SHARED_TASKS)pTask->iTask ); break; } } }
TNlAddr::~TNlAddr() { Forget(); }
void ReadStream::Inner::CloseStreamWithoutReporting() { MOZ_ASSERT(NS_GetCurrentThread() == mOwningThread); Forget(); }
//----------------------------------------------------------------------------- // Purpose: // Input : flInterval - // &m_LastMoveTarget - // eMoveType - //----------------------------------------------------------------------------- void CNPC_Ichthyosaur::DoMovement( float flInterval, const Vector &MoveTarget, int eMoveType ) { // dvs: something is setting this bit, causing us to stop moving and get stuck that way Forget( bits_MEMORY_TURNING ); Vector Steer, SteerAvoid, SteerRel; Vector forward, right, up; //Get our orientation vectors. GetVectors( &forward, &right, &up); if ( ( GetActivity() == ACT_MELEE_ATTACK1 ) && ( GetEnemy() != NULL ) ) { SteerSeek( Steer, GetEnemy()->GetAbsOrigin() ); } else { //If we are approaching our goal, use an arrival steering mechanism. if ( eMoveType == ICH_MOVETYPE_ARRIVE ) { SteerArrive( Steer, MoveTarget ); } else { //Otherwise use a seek steering mechanism. SteerSeek( Steer, MoveTarget ); } } #if FEELER_COLLISION Vector f, u, l, r, d; float probeLength = GetAbsVelocity().Length(); if ( probeLength < 150 ) probeLength = 150; if ( probeLength > 500 ) probeLength = 500; f = DoProbe( GetLocalOrigin() + (probeLength * forward) ); r = DoProbe( GetLocalOrigin() + (probeLength/3 * (forward+right)) ); l = DoProbe( GetLocalOrigin() + (probeLength/3 * (forward-right)) ); u = DoProbe( GetLocalOrigin() + (probeLength/3 * (forward+up)) ); d = DoProbe( GetLocalOrigin() + (probeLength/3 * (forward-up)) ); SteerAvoid = f+r+l+u+d; //NDebugOverlay::Line( GetLocalOrigin(), GetLocalOrigin()+SteerAvoid, 255, 255, 0, false, 0.1f ); if ( SteerAvoid.LengthSqr() ) { Steer = (SteerAvoid*0.5f); } m_vecVelocity = m_vecVelocity + (Steer*0.5f); VectorNormalize( m_vecVelocity ); SteerRel.x = forward.Dot( m_vecVelocity ); SteerRel.y = right.Dot( m_vecVelocity ); SteerRel.z = up.Dot( m_vecVelocity ); m_vecVelocity *= m_flGroundSpeed; #else //See if we need to avoid any obstacles. if ( SteerAvoidObstacles( SteerAvoid, GetAbsVelocity(), forward, right, up ) ) { //Take the avoidance vector Steer = SteerAvoid; } //Clamp our ideal steering vector to within our physical limitations. ClampSteer( Steer, SteerRel, forward, right, up ); ApplyAbsVelocityImpulse( Steer * flInterval ); #endif Vector vecNewVelocity = GetAbsVelocity(); float flLength = vecNewVelocity.Length(); //Clamp our final speed if ( flLength > m_flGroundSpeed ) { vecNewVelocity *= ( m_flGroundSpeed / flLength ); flLength = m_flGroundSpeed; } Vector workVelocity = vecNewVelocity; AddSwimNoise( &workVelocity ); // Pose the fish properly SetPoses( SteerRel, flLength ); //Drag our victim before moving if ( m_pVictim != NULL ) { DragVictim( (workVelocity*flInterval).Length() ); } //Move along the current velocity vector if ( WalkMove( workVelocity * flInterval, MASK_NPCSOLID ) == false ) { //Attempt a half-step if ( WalkMove( (workVelocity*0.5f) * flInterval, MASK_NPCSOLID) == false ) { //Restart the velocity //VectorNormalize( m_vecVelocity ); vecNewVelocity *= 0.5f; } else { //Cut our velocity in half vecNewVelocity *= 0.5f; } } SetAbsVelocity( vecNewVelocity ); }
boolean FrameCatalog::Retrieve (const char* pathname, Component*& comp) { FILE* fptr = nil; boolean compressed = false; char* name = strdup(pathname); if (Valid(name, comp)) { _valid = true; } else { filebuf* pfbuf = nil; if (strcmp(name, "-") == 0) { FILEBUFP(pfbuf, stdin, input); _valid = 1; name = nil; } else { fptr = fopen(name, "r"); fptr = OvImportCmd::CheckCompression(fptr, name, compressed); if (fptr) { FILEBUFP(pfbuf, fptr, input); } _valid = fptr ? 1 : 0; if (compressed) { int namelen = strlen(name); if (strcmp(name+namelen-3,".gz")==0) name[namelen-3] = '\0'; else if (strcmp(name+namelen-2,".Z")==0) name[namelen-2] = '\0'; } } if (_valid) { istream in(pfbuf); char ch; while (isspace(ch = in.get())) {}; in.putback(ch); ParamList::parse_token(in, sbuf, SBUFSIZE); if (strcmp(sbuf, "flipbook") == 0 || strcmp(sbuf, "frame-idraw") == 0) { comp = new FrameIdrawComp(in, name, _parent); _valid = in.good() && ((OverlayComp*)comp)->valid(); } else if (strcmp(sbuf, "drawtool") == 0 || strcmp(sbuf, "ov-idraw") == 0) { comp = new OverlayIdrawComp(in, name, _parent); _valid = in.good() && ((OverlayComp*)comp)->valid(); } else _valid = false; if (_valid && name) { Forget(comp, name); Register(comp, name); } else if (!_valid) { delete comp; comp = nil; } } delete pfbuf; } if (fptr) { if (compressed) fclose(fptr); else pclose(fptr); } delete name; return _valid; }