quadrilateralcowboy/d3xp/button_switcher.cpp

109 lines
2.0 KiB
C++
Raw Normal View History

2020-06-12 21:06:25 +00:00
#include "../idlib/precompiled.h"
#pragma hdrstop
#include "Game_local.h"
const idEventDef EV_ButtonSwitcher_activate( "buttonswitcheractivate", "f" );
CLASS_DECLARATION( idAnimated, idButtonSwitcher )
EVENT( EV_ButtonSwitcher_activate, idButtonSwitcher::Event_buttonswitcheractivate)
END_CLASS
void idButtonSwitcher::Save( idSaveGame *savefile ) const
{
savefile->WriteInt(state);
savefile->WriteBool(active);
}
void idButtonSwitcher::Restore( idRestoreGame *savefile )
{
savefile->ReadInt(state);
savefile->ReadBool(active);
}
void idButtonSwitcher::Spawn( void )
{
GetPhysics()->SetContents( 0 );
this->noGrab = true;
this->isFrobbable = false;
state = 0;
active = false;
}
void idButtonSwitcher::Event_buttonswitcheractivate( int value )
{
Event_PlayAnim( "turn", 4);
GetPhysics()->SetContents( CONTENTS_RENDERMODEL );
GetPhysics()->SetClipMask( MASK_SOLID | CONTENTS_MOVEABLECLIP );
this->isFrobbable = true;
active = true;
}
void idButtonSwitcher::OnFrob( idEntity* activator )
{
if (!active)
return;
StartSound( "snd_press", SND_CHANNEL_BODY, 0, false, NULL );
if (state == 0)
{
state = 1;
Event_PlayAnim( "_0_to_1", 4);
CallScript("script1");
SetSkin(declManager->FindSkin( "skins/button_switcher/skin_1" ));
}
else if (state == 1)
{
state = 2;
Event_PlayAnim( "_1_to_2", 4);
CallScript("script2");
SetSkin(declManager->FindSkin( "skins/button_switcher/skin_2" ));
}
else
{
state = 0;
Event_PlayAnim( "_2_to_0", 4);
CallScript("script0");
SetSkin(declManager->FindSkin( "skins/button_switcher/skin" ));
}
}
void idButtonSwitcher::CallScript(const char* name)
{
idStr scriptName = spawnArgs.GetString( name );
if (scriptName.Length() <= 0)
return;
const function_t *scriptFunction;
scriptFunction = gameLocal.program.FindFunction( scriptName );
if ( !scriptFunction )
return;
idThread *thread;
thread = new idThread( scriptFunction );
thread->DelayedStart( 0 );
}
/*
void idLever::Think( void )
{
UpdateStates();
idAnimatedEntity::Think();
idAnimatedEntity::Present();
}*/