// make the entity enter a scripted sequence void CCineMonster::PossessEntity(void) { CBaseEntity * pEntity = m_hTargetEnt; CBaseMonster *pTarget = NULL; if(pEntity) pTarget = pEntity->MyMonsterPointer(); if(pTarget) { // FindEntity() just checked this! #if 0 if ( !pTarget->CanPlaySequence( FCanOverrideState() ) ) { ALERT( at_aiconsole, "Can't possess entity %s\n", STRING(pTarget->pev->classname) ); return; } #endif pTarget->m_pGoalEnt = this; pTarget->m_pCine = this; pTarget->m_hTargetEnt = this; m_saved_movetype = pTarget->pev->movetype; m_saved_solid = pTarget->pev->solid; m_saved_effects = pTarget->pev->effects; pTarget->pev->effects |= pev->effects; switch(m_fMoveTo) { case 0: pTarget->m_scriptState = SCRIPT_WAIT; break; case 1: pTarget->m_scriptState = SCRIPT_WALK_TO_MARK; DelayStart(1); break; case 2: pTarget->m_scriptState = SCRIPT_RUN_TO_MARK; DelayStart(1); break; case 4: UTIL_SetOrigin(pTarget->pev, pev->origin); pTarget->pev->ideal_yaw = pev->angles.y; pTarget->pev->avelocity = Vector(0, 0, 0); pTarget->pev->velocity = Vector(0, 0, 0); pTarget->pev->effects |= EF_NOINTERP; pTarget->pev->angles.y = pev->angles.y; pTarget->m_scriptState = SCRIPT_WAIT; m_startTime = gpGlobals->time + 1E6; // UNDONE: Add a flag to do this so people can fixup physics after teleporting monsters // pTarget->pev->flags &= ~FL_ONGROUND; break; } // ALERT( at_aiconsole, "\"%s\" found and used (INT: %s)\n", STRING( pTarget->pev->targetname ), FBitSet(pev->spawnflags, SF_SCRIPT_NOINTERRUPT)?"No":"Yes" ); pTarget->m_IdealMonsterState = MONSTERSTATE_SCRIPT; if(m_iszIdle) { StartSequence(pTarget, m_iszIdle, FALSE); if(FStrEq(STRING(m_iszIdle), STRING(m_iszPlay))) { pTarget->pev->framerate = 0; } } } }
// make the entity enter a scripted sequence void CCineMonster::PossessEntity( void ) { CBaseEntity *pEntity = m_hTargetEnt; CBaseMonster *pTarget = NULL; if( pEntity ) pTarget = pEntity->MyMonsterPointer(); if( pTarget ) { // FindEntity() just checked this! #if 0 if( !pTarget->CanPlaySequence( FCanOverrideState() ) ) { ALERT( at_aiconsole, "Can't possess entity %s\n", pTarget->GetClassname() ); return; } #endif pTarget->m_hGoalEnt = this; pTarget->m_pCine = this; pTarget->m_hTargetEnt = this; m_saved_movetype = pTarget->GetMoveType(); m_saved_solid = pTarget->GetSolidType(); m_saved_effects = pTarget->GetEffects(); pTarget->GetEffects() |= GetEffects(); switch( m_fMoveTo ) { case 0: pTarget->m_scriptState = SCRIPT_WAIT; break; case 1: pTarget->m_scriptState = SCRIPT_WALK_TO_MARK; DelayStart( true ); break; case 2: pTarget->m_scriptState = SCRIPT_RUN_TO_MARK; DelayStart( true ); break; case 4: pTarget->SetAbsOrigin( GetAbsOrigin() ); pTarget->SetIdealYaw( GetAbsAngles().y ); pTarget->SetAngularVelocity( g_vecZero ); pTarget->SetAbsVelocity( Vector( 0, 0, 0 ) ); pTarget->GetEffects() |= EF_NOINTERP; Vector vecAngles = pTarget->GetAbsAngles(); vecAngles.y = GetAbsAngles().y; pTarget->SetAbsAngles( vecAngles ); pTarget->m_scriptState = SCRIPT_WAIT; m_startTime = gpGlobals->time + 1E6; // UNDONE: Add a flag to do this so people can fixup physics after teleporting monsters // pTarget->GetFlags().ClearFlags( FL_ONGROUND ); break; } // ALERT( at_aiconsole, "\"%s\" found and used (INT: %s)\n", pTarget->GetTargetname(), GetSpawnFlags().Any( SF_SCRIPT_NOINTERRUPT ) ?"No":"Yes" ); pTarget->m_IdealMonsterState = MONSTERSTATE_SCRIPT; if( m_iszIdle ) { StartSequence( pTarget, m_iszIdle, false ); if( FStrEq( STRING( m_iszIdle ), STRING( m_iszPlay ) ) ) { pTarget->SetFrameRate( 0 ); } } } }