mirror of
https://github.com/blendogames/quadrilateralcowboy.git
synced 2024-12-03 01:13:11 +00:00
108 lines
2 KiB
C++
108 lines
2 KiB
C++
|
|
#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();
|
|
}*/
|
|
|