//-----------------------------------------------------------------------------
//
//  $Logfile:: /Quake 2 Engine/Sin/code/game/earthquake.cpp                   $
// $Revision:: 13                                                             $
//   $Author:: Jimdose                                                        $
//     $Date:: 11/08/98 10:47p                                                $
//
// Copyright (C) 1997 by Ritual Entertainment, Inc.
// All rights reserved.
//
// This source is may not be distributed and/or modified without
// expressly written permission by Ritual Entertainment, Inc.
//
// $Log:: /Quake 2 Engine/Sin/code/game/earthquake.cpp                        $
// 
// 13    11/08/98 10:47p Jimdose
// moved earthquake to level struct
// 
// 12    10/22/98 5:56p Markd
// Made a bunch of global sounds local to that entity
// 
// 11    8/18/98 11:08p Markd
// Added new Alias System
// 
// 10    7/30/98 4:34p Aldie
// Don't respond to touch
// 
// 9     5/24/98 8:46p Jimdose
// Made a lot of functions more str-friendly.
// Got rid of a lot of char * based strings
// Cleaned up get spawn arg functions and sound functions
// sound functions now use consistant syntax
// 
// 8     5/22/98 12:35p Aldie
// Removed some unused functions
// 
// 7     5/22/98 12:19p Aldie
// Updated color of earthquake in SinEd
// 
// 6     5/21/98 10:58a Aldie
// Removed a printf
// 
// 5     5/20/98 10:21p Aldie
// Updated earthquake to new event system, may want to add radius later.
// 
// 3     12/06/97 4:50p Markd
// Added interpretCommands. 
// Added GetArgs as commands for future processing
// 
// 2     10/27/97 7:32p Jimdose
// Created file
//
// DESCRIPTION:
// Earthquake trigger causes a localized earthquake when triggered.
// The earthquake effect is visible to the user as the shaking of his screen.
// 
#include "earthquake.h"

/*****************************************************************************/
/*SINED func_earthquake (.5 .5 .8) (-8 -8 -8) (8 8 8)
 Causes an earthquake
"duration" is the duration of the earthquake.  Default is 0.8 seconds.
/*****************************************************************************/

CLASS_DECLARATION( Trigger, Earthquake, "func_earthquake" )

Event EV_Earthquake_Deactivate( "earthquake_deactivate" );

ResponseDef Earthquake::Responses[] =
	{
      { &EV_Touch,                     NULL },
      { &EV_Trigger_Effect,				( Response )&Earthquake::Activate },
      { &EV_Earthquake_Deactivate,     ( Response )&Earthquake::Deactivate },
      { NULL, NULL }
   };

Earthquake::Earthquake
   (
   void
   )

	{
   const char * name;

	duration = G_GetFloatArg( "duration", 0.8f );
   quakeactive = false;

   // cache in the quake sound
   name = gi.GlobalAlias_FindRandom( "earthquake" );
   gi.soundindex( name );
	}

void Earthquake::Activate
   (
   Event *ev
   )

	{
	float newtime;
	Event *event;

	newtime = duration + level.time;
	if ( newtime > level.earthquake )
		{
		level.earthquake = newtime;
		}
   quakeactive = true;
   RandomGlobalSound( "earthquake", 1, CHAN_VOICE|CHAN_NO_PHS_ADD, ATTN_NONE );
   event = new Event(EV_Earthquake_Deactivate);
	PostEvent(event,duration);
   };

void Earthquake::Deactivate
   (
   Event *ev
   )

   {
   quakeactive = false;
   level.earthquake = 0;
   RandomGlobalSound( "null_sound", 1, CHAN_VOICE|CHAN_NO_PHS_ADD, ATTN_NORM );
   }
