//	VIETCONG 1
//	DESTRUCTION_disapear script v3.0 
//	made by Ando



//	OBJECT BEHAVIOUR IN GAME:
//  All you see is synchronised and visible to others.
//  When object is hit by bullet/knife/explosion it will dissapear with some effects
//  All is restored after restart.



//simple destruction. Object disapears 

//
//





#include <inc\sc_global.h>
#include <inc\sc_def.h>


//____________________________OBJECT PARAMETERS____________________________

//OBJECT STATES: 0-undestroyed, 1- destruction
       
#define EFFECT_ID_1				14						// particle id 
#define EFFECT_ID_2				14						// particle id 
#define EFFECT_ID_3				105						// particle id 
#define EFFECT_SOUND			117					// sound id
#define HITS_TO_FALL			1			//number of hits when destoyed

//_________________________________________________________________________

#define GVAR_SERVER				600 	// don't edit	//0 - not server . 1 - server
#define GVAR_COUNT				601 	// don't edit   //Channel for G-var count
#define GVAR_GPHASE				500		// don't edit
//_________________________________________________________________________

void		*orig_obj_id;

s_SC_NOD_transform trans;
s_SC_NOD_transform orig_trans;
s_SC_NOD_transform destr_trans;


int			hit_count = 0;
int			Global_state =	0;		//global object status
int			Local_state =	-1;		//local object status.  -1 = unknown ststus  (for start/restart)
int			Sub_state = 0;		//sub stste of object
int			i;
int			my_gvar_count;
int			my_gvar;
c_Vector3		obj_pos;
char	txt[32];


int ScriptMain(s_SC_OBJ_info *info){
	switch(info->event_type){
		case SC_OBJ_INFO_EVENT_INIT:
			
			//orig_obj_id = SC_NOD_GetNoMessage(info->master_nod, orig_obj_name);
			orig_obj_id = info->master_nod;

			SC_NOD_GetWorldPos(orig_obj_id,&obj_pos);  //sound location
			SC_NOD_GetTransform(orig_obj_id,&orig_trans);
			

			//creating global variable
			my_gvar_count = SC_ggi(GVAR_COUNT)+1;
			SC_sgi(GVAR_COUNT,my_gvar_count);
			my_gvar = my_gvar_count+ 601;
			return TRUE;
		case SC_OBJ_INFO_EVENT_JUSTLOADED:
			break;
		case SC_OBJ_INFO_EVENT_RELEASE:
			SC_NOD_SetTransform(orig_obj_id,&orig_trans);
			//SC_NOD_SetTransform(destr_obj_id,&destr_trans);
			break;
		case SC_OBJ_INFO_EVENT_HIT: 
			//if(info->nod == _sub_obj_id){//
				if(Global_state == 0){
					hit_count++;
					if ((hit_count >= HITS_TO_FALL) || (info->hit_by == SC_OBJ_HIT_BY_EXPLOSION)){
						SC_sgi(my_gvar,1); //
					}
				}
			//}
			break;
		case SC_OBJ_INFO_EVENT_DOTICK:
			if (SC_ggi(GVAR_GPHASE) == 1){//restarting
				Local_state = -1;	//restores unknown state 
				return TRUE;
				break;
			}
			if (Local_state == -1){//restores stsrt state 
				if (SC_ggi(GVAR_SERVER) == 1){	// its server
					SC_sgi(my_gvar,0); // status on start/restart
				}
			}
			Global_state = SC_ggi(my_gvar);
			//_____________CHANGE OBJECT STATUS________________
			if (Global_state != Local_state){	//global status != Local status 
				switch(Global_state){	//
				case 0:	//normal
					SC_NOD_SetTransform(orig_obj_id,&orig_trans);
					hit_count = 0;
					Local_state=0;
					Sub_state=0;
					break;
				case 1:	// destruction
					switch(Sub_state){	//
					case 0:	//destruction
						#ifdef EFFECT_ID_1
							SC_CreatePtc(EFFECT_ID_1, &obj_pos);
						#endif
						#ifdef EFFECT_ID_2
							SC_CreatePtc(EFFECT_ID_2, &obj_pos);
						#endif
						#ifdef EFFECT_ID_3
							SC_CreatePtc(EFFECT_ID_3, &obj_pos);
						#endif

						#ifdef EFFECT_SOUND
							SC_SND_PlaySound3D(EFFECT_SOUND,&obj_pos);
						#endif
						Sub_state=1;
						break;
					case 1:	//destroyed
						trans=orig_trans;
						trans.loc.z-=1000;
						SC_NOD_SetTransform(orig_obj_id,&trans);
						Local_state=1;
						break;
					}
					break;
				}
			}
            break;
		case SC_OBJ_INFO_EVENT_USED:
        break;
   }// switch(info->event_type)
   return FALSE;
}// int ScriptMain(s_OBJ_info *info)

