#include "../point_checkpoint"
#include "spawn_ammo"
#include "spawn_enemy"
#include "BuyMenu"



CScheduledFunction@ INTERVAL_TEST;
CScheduledFunction@ INTERVAL_WAVE;

CScheduledFunction@ INTERVAL_KILL_REMAIN;

CScheduledFunction@ INTERVAL_BEGIN;

int TIME_BEGIN_COUNTDOWN = 40;
bool ENABLE_BEGIN_COUNTDOWN = true;
HUDTextParams FORMAT_TEXT_INTERVAL_BEGIN;

void MapInit()
{	

	// Map support is enabled here by default.
	// So you don't have to add "mp_survival_supported 1" to the map config
        RegisterPointCheckPointEntity();
	g_SurvivalMode.EnableMapSupport();



        ////@INTERVAL_TEST = g_Scheduler.SetInterval("test_calculate", 1, -1);

        @INTERVAL_WAVE = g_Scheduler.SetInterval("tick_display_wave", 1, -1);

        @INTERVAL_BEGIN = g_Scheduler.SetInterval("tick_enable_button_begin", 1, -1);

        @INTERVAL_KILL_REMAIN = g_Scheduler.SetInterval("tick_kill_remain", 1, -1);

        g_Hooks.RegisterHook( Hooks::Player::PlayerKilled, AutoOnPlayerKilled );


        ENABLE_AMMO_SPAWN = true;
        ENABLE_BUYING_ROOM = true;


        g_SoundSystem.PrecacheSound( "killing_combine/player_killed.wav" );
        g_SoundSystem.PrecacheSound( "killing_combine/hgrunt/die1.wav" );
        g_SoundSystem.PrecacheSound(  "killing_combine/hgrunt/die2.wav" );
        g_SoundSystem.PrecacheSound(  "killing_combine/hgrunt/die3.wav" );
        g_Game.PrecacheGeneric("sprites/white.spr");




        g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "Wrench", "weapon_pipewrench", 500, "primary", "smg" ) );
        g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "Crossbow", "weapon_crossbow", 1500, "primary", "smg" ) );
        g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "Python", "weapon_357", 2500, "primary", "smg" ) );


	g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "9MM Pistol Ammo", "ammo_9mmclip", 20, "ammo", "smg" ) );
	g_Ins2Menu.AddItem( BuyMenu::BuyableItem( ".357 Ammo", "ammo_357", 60, "ammo", "smg" ) );
	g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "Crossbow Bolt", "ammo_crossbow", 200, "ammo", "smg" ) );


        g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "Barnacle", "weapon_grapple", 1500, "primary", "assault" ) );
        g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "Acid Bomb Gun", "weapon_sporelauncher", 2500, "primary", "assault" ) );
        g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "Bees Gun", "weapon_hornetgun", 3500, "primary", "assault" ) );

        g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "Acid Clip", "ammo_sporeclip", 25, "ammo", "assault" ) );


       g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "MP5", "weapon_9mmAR", 1500, "primary", "carbine" ) );
       g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "Spas-12", "weapon_shotgun", 2500, "primary", "carbine" ) );
        g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "M16", "weapon_m16", 2500, "primary", "carbine" ) );
	g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "RPG", "weapon_rpg", 3500, "primary", "carbine" ) );
       g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "Desert Eagle", "weapon_eagle", 3500, "primary", "carbine" ) );
        g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "Dual UZI", "weapon_uziakimbo", 4000, "primary", "carbine" ) );
         g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "M40 Sniper", "weapon_sniperrifle", 5500, "primary", "carbine" ) );
        g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "M249 LMG", "weapon_m249", 6000, "primary", "carbine" ) );






        g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "Teleport Gun", "weapon_displacer", 3000, "primary", "shotgun" ) );
        g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "Charger Gun", "weapon_gauss", 4000, "primary", "shotgun" ) );
	g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "Beam Gun", "weapon_egon", 5500, "primary", "shotgun" ) );

	g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "Nuclear Ammo", "ammo_gaussclip", 200, "ammo", "shotgun" ) );








	g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "9MM SMG", "ammo_9mmAR", 40, "ammo", "carbine" ) );
	g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "Shotgun Ammo", "ammo_buckshot", 70, "ammo", "carbine" ) );
	g_Ins2Menu.AddItem( BuyMenu::BuyableItem( ".357 Ammo", "ammo_357", 60, "ammo", "carbine" ) );
	g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "5.56 Clip", "ammo_556clip", 90, "ammo", "carbine" ) );
	g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "RPG Ammo", "ammo_rpgclip", 600, "ammo", "carbine" ) );
        g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "7.62 Clip", "ammo_762", 300, "ammo", "carbine" ) );
	g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "9MM Box", "ammo_9mmbox", 320, "ammo", "carbine" ) );	
        g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "5.56 Box", "ammo_556", 300, "ammo", "carbine" ) );
         
         



       





       g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "Hand Grenades", "weapon_handgrenade", 300, "equipment", "timed" ) );
        g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "Eater Bugs", "weapon_snark", 150, "equipment", "timed" ) );
	g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "Laser Mine", "weapon_tripmine", 150, "equipment", "timed" ) );	
	g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "Remote C4", "weapon_satchel", 300, "equipment", "timed" ) );


        g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "Health Kit", "item_healthkit", 25, "equipment", "misc" ) );
        g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "Armor Plate", "item_battery", 150, "equipment", "misc" ) );
        g_Ins2Menu.AddItem( BuyMenu::BuyableItem( "Long Jumper", "item_longjump", 3500, "equipment", "misc" ) );



       BuyMenu::MoneyInit();




}






void ActivateSurvival( CBaseEntity@ pActivator, CBaseEntity@ pCaller,
	USE_TYPE useType, float flValue )
{
	g_SurvivalMode.Activate();
}

void DisableSurvival( CBaseEntity@ pActivator, CBaseEntity@ pCaller, 
	USE_TYPE useType, float flValue )
{
    g_SurvivalMode.Disable();
}




/////Test Code


void abc(CBaseEntity@ activator, CBaseEntity@ pcaller, USE_TYPE usetype, float flValue)
{
     
     CBaseEntity@ mapcommand = null;
     @mapcommand = g_EntityFuncs.FindEntityByTargetname(mapcommand, "targ_command");

     g_EntityFuncs.FireTargets("light_gen", mapcommand, mapcommand, USE_SET);
     

}



//Set this entity as commander to the map
void assigncommander(CBaseEntity@ activator, CBaseEntity@ pcaller, USE_TYPE usetype, float flValue)
{
     CBaseEntity@ mapcommand = null;
     @mapcommand = g_EntityFuncs.FindEntityByTargetname(mapcommand, "targ_command");

}




HookReturnCode AutoOnPlayerKilled( CBasePlayer@ pPlayer, CBaseEntity@ pAttacker, int iGib )
{

          bool GET_SUR_MODE = g_SurvivalMode.IsActive();                


           if(GET_SUR_MODE)
           {
           g_SoundSystem.PlaySound(pPlayer.edict(), CHAN_STREAM, "killing_combine/player_killed.wav", 1, ATTN_NONE, 0, PITCH_NORM);
           }
   

   return HOOK_CONTINUE;
}




void button_buy(CBaseEntity@ activator, CBaseEntity@ pcaller, USE_TYPE usetype, float flValue)
{

   
   BuyMenu::buy_from_action(activator, pcaller, usetype, flValue);


}


void tick_enable_button_begin()
{

   if(ENABLE_BEGIN_COUNTDOWN)
     {





              if(TIME_BEGIN_COUNTDOWN > 0)
                  {

                  FORMAT_TEXT_INTERVAL_BEGIN.x = -1;
	          FORMAT_TEXT_INTERVAL_BEGIN.y = 0.25;
	          FORMAT_TEXT_INTERVAL_BEGIN.channel = 3;
	          FORMAT_TEXT_INTERVAL_BEGIN.fadeinTime = 0;
                  FORMAT_TEXT_INTERVAL_BEGIN.fadeoutTime = 1;
	         FORMAT_TEXT_INTERVAL_BEGIN.r1 = 255;
	          FORMAT_TEXT_INTERVAL_BEGIN.g1 = 255;
	          FORMAT_TEXT_INTERVAL_BEGIN.b1 = 255;
	          FORMAT_TEXT_INTERVAL_BEGIN.a1 = 200;
	          FORMAT_TEXT_INTERVAL_BEGIN.holdTime = 2;



                     TIME_BEGIN_COUNTDOWN -= 1;

                     g_PlayerFuncs.HudMessageAll(FORMAT_TEXT_INTERVAL_BEGIN, "Button Will Unlock In:" + "\n" + TIME_BEGIN_COUNTDOWN + "s");

                 }



                 else
                 {
                     CBaseEntity@ mapcommand = null;
                     @mapcommand = g_EntityFuncs.FindEntityByTargetname(mapcommand, "targ_map_command");

                     g_EntityFuncs.FireTargets("trig_set_targ_button", mapcommand, mapcommand, USE_SET);

                     ENABLE_BEGIN_COUNTDOWN = false;

                 }


           ////g_PlayerFuncs.ShowMessageAll(1111);


       }


}