113 lines
2 KiB
C++
113 lines
2 KiB
C++
/***
|
|
*
|
|
* Copyright (c) 2016-2019 Marco 'eukara' Hladik. All rights reserved.
|
|
*
|
|
* See the file LICENSE attached with the sources for usage details.
|
|
*
|
|
****/
|
|
|
|
enumflags
|
|
{
|
|
FR_STARTON,
|
|
FR_REVERSE,
|
|
FR_ZAXIS,
|
|
FR_XAXIS,
|
|
FR_ACCDCC,
|
|
FR_FANPAIN,
|
|
FR_NOTSOLID,
|
|
FR_SMALLRADIUS,
|
|
FR_MRADIUS,
|
|
FR_LRADIUS
|
|
};
|
|
|
|
class CFuncRotating : CBaseTrigger
|
|
{
|
|
vector m_vecMoveDir;
|
|
float m_flSpeed;
|
|
void() CFuncRotating;
|
|
virtual void() Respawn;
|
|
virtual void() Trigger;
|
|
virtual void() Rotate;
|
|
virtual void() SetMovementDirection;
|
|
};
|
|
|
|
void CFuncRotating :: Rotate( void )
|
|
{
|
|
nextthink = ltime + 10.0f;
|
|
}
|
|
void CFuncRotating :: Trigger ( void )
|
|
{
|
|
if ( vlen( avelocity ) ) {
|
|
avelocity = '0 0 0';
|
|
} else {
|
|
avelocity = m_vecMoveDir * m_flSpeed;
|
|
}
|
|
}
|
|
|
|
void CFuncRotating :: Blocked ( void )
|
|
{
|
|
if ( spawnflags & FR_FANPAIN ) {
|
|
// Damage_Apply( other, this, m_iDamage, other.origin, FALSE );
|
|
}
|
|
}
|
|
|
|
void CFuncRotating :: Respawn ( void )
|
|
{
|
|
movetype = MOVETYPE_PUSH;
|
|
setorigin( this, origin );
|
|
setmodel( this, model );
|
|
|
|
if ( spawnflags & FR_NOTSOLID ) {
|
|
solid = SOLID_NOT;
|
|
} else {
|
|
solid = SOLID_BSP;
|
|
}
|
|
|
|
if ( spawnflags & FR_STARTON ) {
|
|
avelocity = m_vecMoveDir * m_flSpeed;
|
|
think = Rotate;
|
|
nextthink = ltime + 1.5f;
|
|
}
|
|
}
|
|
|
|
void CFuncRotating :: SetMovementDirection ( void )
|
|
{
|
|
if ( spawnflags & FR_ZAXIS ) {
|
|
m_vecMoveDir = '0 0 1';
|
|
} else if ( spawnflags & FR_XAXIS ) {
|
|
m_vecMoveDir = '1 0 0';
|
|
} else {
|
|
m_vecMoveDir = '0 1 0';
|
|
}
|
|
|
|
if ( spawnflags & FR_REVERSE ) {
|
|
m_vecMoveDir *= -1;
|
|
}
|
|
}
|
|
|
|
void CFuncRotating :: CFuncRotating ( void )
|
|
{
|
|
precache_model( model );
|
|
for ( int i = 1; i < ( tokenize( __fullspawndata ) - 1 ); i += 2 ) {
|
|
switch ( argv( i ) ) {
|
|
/*case "spawnorigin":
|
|
setorigin( this, stov( argv( i + 1 ) ) );
|
|
break;*/
|
|
case "speed":
|
|
m_flSpeed = stof( argv( i + 1 ) );
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( !m_flSpeed ) {
|
|
m_flSpeed = 100;
|
|
}
|
|
|
|
CBaseTrigger::CBaseTrigger();
|
|
CFuncRotating::SetMovementDirection();
|
|
CFuncRotating::Respawn();
|
|
}
|
|
|
|
CLASSEXPORT( func_rotating, CFuncRotating )
|