from __future__ import division
import pygame, math, random
import ui

def check_player_commands(world, event = None):
    """ act on events from input and als non-events..."""
    # place stuff
    map_building(world, event)
    player_controls(world, event)
    misc(world, event)
    
def map_building(world, event):
    if world.TEST:
        location = int(ui.world_loc(world, pygame.mouse.get_pos())[0])+0.5, int(ui.world_loc(world, pygame.mouse.get_pos())[1])+0.5
        if location[0] < 0 or location[0] > world.dimensions[0] or location[1] < 0 or location[1] > world.dimensions[1]:
            pass
        else:
            """ delete sprite """
            if pygame.key.get_pressed()[pygame.K_DELETE]:
                world.delete_sprite(location)
                
            """ place concrete """
            if pygame.key.get_pressed()[pygame.K_KP1]:
                world.add_sim("concrete_block", location, sim_cat = "block")

            """ place shrub """
            if pygame.key.get_pressed()[pygame.K_KP2]:
                world.add_sim("shrub", location, sim_cat = "block")
                
            """ place pickup """
            if pygame.key.get_pressed()[pygame.K_KP3]:
                world.add_pickup(location)
                
            """ place player """
            if pygame.key.get_pressed()[pygame.K_KP4]:
                world.add_player(location)
            
            """ place player """
            if pygame.key.get_pressed()[pygame.K_UP]:
                world.add_player(location)
                
            """ place survivor """
            if pygame.key.get_pressed()[pygame.K_KP5]:
                world.add_sim("survivor", location, random.uniform(0,2*math.pi), sim_cat = "biped")
            
            """ place random weapon """
            if pygame.key.get_pressed()[pygame.K_KP6]:
                world.add_weapon(location)
            if pygame.key.get_pressed()[pygame.K_DOWN]:
                world.add_weapon(location)
                
            """ place zombies """
            if pygame.key.get_pressed()[pygame.K_KP7]:
                world.add_sim("zombie_massive", location, random.uniform(0,2*math.pi), sim_cat = "biped")
            if pygame.key.get_pressed()[pygame.K_KP8]:
                world.add_sim("zombie_normal", location, random.uniform(0,2*math.pi), sim_cat = "biped")
            if pygame.key.get_pressed()[pygame.K_KP9]:
                world.add_sim("zombie_fast", location, random.uniform(0,2*math.pi), sim_cat = "biped")  
            



    # drop grenades
    if world.TEST:
        if not world.player or world.player.health < 0:
            if pygame.mouse.get_pressed()[0]:
                sim = world.add_sim("grenade_concussion", world.cursor.location, health = 0)
                if sim:
                    sim.initialise_physics(world.cursor.location)
            #if pygame.mouse.get_pressed()[1]:
                #sim = world.add_sim("grenade_molotov", world.cursor.location, health = 0)
            if pygame.mouse.get_pressed()[2]:
                sim = world.add_sim("grenade_molotov", world.cursor.location, health = 0)
                if sim:
                    sim.initialise_physics(world.cursor.location)

def player_controls(world, event):
    if world.player:
        if world.player.weapon:    
            world.player.target_location = ui.world_loc(world, pygame.mouse.get_pos())
            
            if (pygame.mouse.get_pressed()[0] or pygame.key.get_pressed()[pygame.K_LCTRL]):
                if not world.player.sprinting:
                    world.player.weapon.fire_gun()
                
            if pygame.key.get_pressed()[pygame.K_1]:
                world.player.switch_weapon_to("Pistol")
    
            if pygame.key.get_pressed()[pygame.K_2]:
                world.player.switch_weapon_to("SMG")
                
            if pygame.key.get_pressed()[pygame.K_3]:
                world.player.switch_weapon_to("AssaultR")
                
            if pygame.key.get_pressed()[pygame.K_4]:
                world.player.switch_weapon_to("SniperR")
                
            if pygame.key.get_pressed()[pygame.K_5]:
                world.player.switch_weapon_to("LaserR")
                
            if pygame.key.get_pressed()[pygame.K_6]:
                world.player.switch_weapon_to("GaussR")
                
            if pygame.key.get_pressed()[pygame.K_7]:
                world.player.switch_weapon_to("MiniGun")  
                  
            if pygame.key.get_pressed()[pygame.K_r]:
                world.player.weapon.reload_weapon()
            
            if event:
                if event.type == pygame.MOUSEBUTTONDOWN:
                    if event.button == 5:
                        world.player.switch_weapon_up()
                    if event.button == 4:
                        world.player.switch_weapon_down()
                    
            toggle_key_input(world, pygame.key.get_pressed, pygame.K_o, world.player.switch_weapon_up) 
            toggle_key_input(world, pygame.key.get_pressed, pygame.K_l, world.player.switch_weapon_down) 
            
        if pygame.key.get_pressed()[pygame.K_8]:
            world.player.grenade = "grenade_concussion"                 
        
        if pygame.key.get_pressed()[pygame.K_9]:
            world.player.grenade = "grenade_incendiary"    

        if pygame.key.get_pressed()[pygame.K_0]:
            world.player.grenade = "grenade_molotov"    

        if pygame.key.get_pressed()[pygame.K_LSHIFT]:
            world.player.sprinting = True
        else:
            world.player.sprinting = False

        #toggle_key_input(world, pygame.mouse.get_pressed, 4, world.player.switch_weapon_up)
        #toggle_key_input(world, pygame.mouse.get_pressed, 5, world.player.switch_weapon_down) 

def misc(world, event):
    toggle_key_input(world, pygame.key.get_pressed, pygame.K_e, ui.zoom_in, world)
    toggle_key_input(world, pygame.key.get_pressed, pygame.K_q, ui.zoom_out, world) 

    """ save/load game """
    toggle_key_input(world, pygame.key.get_pressed, pygame.K_n, world.save_maplet) 
    toggle_key_input(world, pygame.key.get_pressed, pygame.K_m, world.load_maplet) 
   
    """ turn on/off sprite path drawing """
    toggle_key_input(world, pygame.key.get_pressed, pygame.K_t, toggle_shadowing, world)
    toggle_key_input(world, pygame.key.get_pressed, pygame.K_y, toggle_sprite_paths, world) 
    toggle_key_input(world, pygame.key.get_pressed, pygame.K_i, toggle_show_partitions, world)
    toggle_key_input(world, pygame.key.get_pressed, pygame.K_u, toggle_draw_overlay, world)
    toggle_key_input(world, pygame.key.get_pressed, pygame.K_o, toggle_test, world) 

    """ toggle pausing"""
    toggle_key_input(world, pygame.key.get_pressed, pygame.K_SPACE, toggle_pause, world) 
    """ turn on/off mouse look """
    toggle_key_input(world, pygame.mouse.get_pressed, 1, toggle_screen_scroll, world) 


#    """ pauses game if game loses window focus, sometimes doesnt work right, so disabling """    
#    if not pygame.mouse.get_focused():
#        world.paused = True
def toggle_screen_scroll(world):
     world.mouse_scroll = not world.mouse_scroll
     if not world.mouse_scroll:
         if world.player:
             if world.player.health >=0:
                 ui.center_screen(world.player)


def toggle_sprite_paths(world):
    world.draw_sprite_paths = not world.draw_sprite_paths

def toggle_shadowing(world):
    world.slow_precise_shadowing = not world.slow_precise_shadowing 
    
def toggle_show_partitions(world):
    world.show_partitions = not world.show_partitions 
    
def toggle_draw_overlay(world):
    world.draw_overlay_bool = not world.draw_overlay_bool

def toggle_pause(world):
    world.paused = not world.paused
    if world.paused:
        world.set_caption("Plague  --  Paused")
    else:
        world.set_caption("Plague")

def toggle_test(world):
    world.TEST = not world.TEST

##def toggle_input(world, input, func, *args):
##    if input not in world.temp_inputs.keys():
##        world.temp_inputs[input] = True
##    if eval(input):
##        if world.temp_inputs[input]:
##            apply(func, args)
##            world.temp_inputs[input] = False
##    else:
##        if not world.temp_inputs[input]:
##            world.temp_inputs[input] = True

def toggle_key_input(world, input_func, input, func, *args):
    string = ''.join([str(input_func),"_", str(input)])
    if string not in world.temp_inputs.keys():
        world.temp_inputs[string] = True
    if input_func()[input]:
        if world.temp_inputs[string]:
            apply(func, args)
            world.temp_inputs[string] = False
    else:
        if not world.temp_inputs[string]:
            world.temp_inputs[string] = True