quadrilateralcowboy/d3xp/tablefold.cpp
2020-06-12 14:06:25 -07:00

99 lines
2.7 KiB
C++

#include "../idlib/precompiled.h"
#pragma hdrstop
#include "Game_local.h"
const idEventDef EV_tablefoldreset( "tablefoldreset" );
CLASS_DECLARATION( idAnimatedEntity, idTableFold )
EVENT( EV_tablefoldreset, idTableFold::Event_reset)
END_CLASS
void idTableFold::Spawn( void )
{
idDict args;
args.Clear();
args.SetVector( "origin", this->GetPhysics()->GetOrigin() );
args.Set( "model", "models/tablefold/tris_cm.ase" );
args.SetInt( "frobbable", 1 );
args.SetInt( "corpse", 1 );
args.SetInt( "noGrab", 1 );
args.Set( "owner", this->GetName() );
args.Set( "recordable", this->spawnArgs.GetString("recordable", "0") );
this->frobcube = gameLocal.SpawnEntityType( idStaticEntity::Type, &args );
this->frobcube->SetAngles( this->GetPhysics()->GetAxis().ToAngles() );
args.Clear();
args.SetVector( "origin", this->GetPhysics()->GetOrigin() );
args.Set( "model", "models/tablefold/tris_handle_cm.ase" );
args.SetInt( "frobbable", 1 );
args.SetInt( "corpse", 1 );
args.SetInt( "noGrab", 1 );
args.Set( "owner", this->GetName() );
args.Set( "recordable", this->spawnArgs.GetString("recordable", "0") );
this->frobcube_handle = gameLocal.SpawnEntityType( idStaticEntity::Type, &args );
this->frobcube_handle->SetAngles( this->GetPhysics()->GetAxis().ToAngles() );
args.Clear();
args.SetVector( "origin", this->GetPhysics()->GetOrigin() );
args.Set( "model", "models/tablefold/tris_table_cm.ase" );
mover = ( idMover * )gameLocal.SpawnEntityType( idMover::Type, &args );
mover->SetAngles( this->GetPhysics()->GetAxis().ToAngles() );
mover->Event_SetMoveTime( 0.5 );
Event_open(0);
state = CLOSED;
}
void idTableFold::Event_open( bool value )
{
if (value)
{
//open.
Event_PlayAnim("open", 4);
this->frobcube->GetPhysics()->SetContents(0);
this->frobcube_handle->GetPhysics()->SetContents( CONTENTS_RENDERMODEL );
this->frobcube_handle->GetPhysics()->SetClipMask( MASK_SOLID | CONTENTS_MOVEABLECLIP );
state = OPENED;
idVec3 origPos = this->GetPhysics()->GetOrigin();
mover->Event_MoveToPos( origPos );
}
else
{
//close.
Event_PlayAnim("close", 4);
this->frobcube_handle->GetPhysics()->SetContents(0);
this->frobcube->GetPhysics()->SetContents( CONTENTS_RENDERMODEL );
this->frobcube->GetPhysics()->SetClipMask( MASK_SOLID | CONTENTS_MOVEABLECLIP );
state = CLOSED;
idVec3 forward;
idVec3 movePos;
GetPhysics()->GetAxis().ToAngles().ToVectors( &forward );
movePos = this->GetPhysics()->GetOrigin() + (forward * -20);
mover->Event_MoveToPos( movePos );
}
}
void idTableFold::Event_reset( void )
{
Event_open(0);
}
void idTableFold::OnFrob( idEntity* activator )
{
if (state == CLOSED)
{
Event_open(true);
}
else
{
Event_open(false);
}
}