.include "cpctelera.h.s"


;;; LLAMADOR DE COMPORTAMIENTO
sys_ai_type::   

    ld b, #_e_type_ia
    ld a, e_tipo(ix) 
    and b      
    cp a,b      
    ret nz


    ld b, #_e_type_ia_patroll
    ld a, e_comportamiento_ia(ix) 
    and b      
    cp a,b      
    jr z, tipopatroll
    
    ld b, #_e_type_ia_follow
    ld a, e_comportamiento_ia(ix) 
    and b      
    cp a,b      
    jr z, tipofollow

    ld b, #_e_type_ia_archer
    ld a, e_comportamiento_ia(ix) 
    and b      
    cp a,b      
    jr z, tipoarcher

    ld b, #_e_type_ia_salto
    ld a, e_comportamiento_ia(ix) 
    and b      
    cp a,b      
    jr z, tiposalto

    jp finalai

    tipopatroll:
    call patrol
    jp finalai
    tipofollow:
    call follow
    jp finalai
    tipoarcher:
    call archer
    jp finalai
    tiposalto:
    call salto
    

    finalai:
ret


;;;; COMPORTAMIENTOS


salto:
    ld e_vx(ix), #0
    ld e_vy(ix), #0

ret

follow:

    ld      iy, #_entity_array

    ld a, e_x(iy)
    ld e_xdest(ix), a

    ld a, e_xdest(ix)
    sub e_x(ix) 
    jr z, quieto_x
    jr c, vamos_izqb
    jp vamos_derb

    vamos_izqb:
        ld e_vx(ix), #-1
        ld e_dir(ix), #3
        jp ejevertical

    vamos_derb:
        ld e_vx(ix), #1
        ld e_dir(ix), #1
        jp ejevertical
    
    quieto_x:
        ld e_vx(ix), #0



    ejevertical:



 
  ld a, e_y(iy)
    ld e_ydest(ix), a

    ld a, e_ydest(ix)
    sub e_y(ix) 
    jr z, quieto_y
   jr c, vamos_abajob
    jp vamos_arriba

    vamos_abajob:
        ld e_vy(ix), #-1
        ld e_dir(ix), #2
        jp finalfollow

    vamos_arriba:
        ld e_vy(ix), #1
        ld e_dir(ix), #4
        jp finalfollow
    
    quieto_y:
        ld e_vy(ix), #0
        ;; atacar 
        
        

   finalfollow:
    
    






ret

patrol:

    ld a, e_eje_follow(ix)
    dec a
    jr nz, eje_y


    eje_x:
    call cambiamos

    ld a, e_xdest(ix)
    sub e_x(ix) 
    jr c, vamos_izq
    jp vamos_der

    vamos_izq:
        ld e_vx(ix), #-1
        ld e_dir(ix), #3
        jp finalpatrol

    vamos_der:
        ld e_vx(ix), #1
        ld e_dir(ix), #1
        jp finalpatrol



    eje_y:

    call cambiamos_y

    ld a, e_ydest(ix)
    sub e_y(ix) 
    jr c, go_up
    jp go_down

    go_up:
        ld e_vy(ix), #-1
        ld e_dir(ix), #4
        jp finalpatrol

    go_down:
        ld e_vy(ix), #1
        ld e_dir(ix), #2





    finalpatrol:
ret




cambiamos:

    ld a, e_x(ix)
    ld b,a
    ld a, e_xdest(ix)
    cp a,b
    ret nz

    ld a, e_dir(ix)
    dec a
    jr z, destI
    jp destD

    destI:
    ld a , (limite_izq)
    inc a
    ld e_xdest(ix), a
    ld e_vx(ix), #1
    ret 

    destD:
    ld a , (limite_der)
    dec a
    ld e_xdest(ix), a
    ld e_vx(ix), #-1

    



ret







cambiamos_y:


    ld a, e_dir(ix)
    dec a
    dec a
    jr z, destDown
    jp destUp


    destUp:
    
    ld a, e_y(ix)
    ld b,a
    ld a, e_ydest(ix)
    cp a,b
    jr z, up_continue
    ret c

    up_continue:
    ld a , (limite_down)
    dec a
    dec a 
    dec a
    dec a 

    ld e_ydest(ix), a
    ld e_vy(ix), #1
    ret



    destDown:
    ld a, e_y(ix)
    ld b,a
    ld a, e_ydest(ix)
    cp a,b
    jr z, down_continue
    ret nc

    down_continue:
    ld a , (limite_up)
    inc a
    inc a
    inc a
    inc a

    ld e_ydest(ix), a
    ld e_vy(ix), #-1
    
    ret
    



ret






archer:

    ld  iy, #_entity_array

    ld a, e_x(iy)
    ld e_xdest(ix), a

    ld a, e_xdest(ix)
    sub e_x(ix) 
    jr z, quieto_xc
    jr c, vamos_izqc
    jp vamos_derc

    vamos_izqc:
        ld e_vx(ix), #-1
        ld e_dir(ix), #3
        jp ejeverticalc

    vamos_derc:
        ld e_vx(ix), #1
        ld e_dir(ix), #1
        jp ejeverticalc
    
    quieto_xc:
        ld e_vx(ix), #0
        ld a, e_t_disparo(ix)
        or a 
        ret nz 

        call entity_arrow_free_space
        or a
        ret z
        call entity_free_space
        or a
        ret z
        ld a, (temp_disparando)
        or a 
        ret nz
        ld e_t_disparo(ix), #50
        call dispara_arrow
        

        ;; A MODIFICAR DESPUES CASOS DESDE DONDE SE DISPARA ETC
        


    ejeverticalc:







ret

dispara_arrow:
    
 
    ld a, e_x(ix)
    ld (temp), a

    ld a, e_y(ix)
    add a, #16
    ld (temp2), a

    ld a,#1
    ld (temp_disparando),a

    
    ;call entity_man_lastelement_IX
    ;call busca_vacio
    ;call generator_arrow
    
    
    ;ld e_x(iy),a
    
ret


gen_elem::

    ld a, (temp_disparando)
    or a 
    ret z
    call generator_arrow
    ld a, #0
    ld (temp_disparando), a



ret





sys_ai_update::

    ld hl, #sys_ai_type
    ld d, #_e_type_ia
    call man_entity_forall


ret

