.include "entity.h.s"
.include "game.h.s"
.include "hud.h.s"

.globl bool_multijugador

string_vidas_player:   .ascii '3'
                       .ascii '\0'

string_bajas_enemigos_decenas:      .ascii '0'
                                    .ascii '\0'
string_bajas_enemigos_unidades:     .ascii '0'
                                    .ascii '/\0'

string_max_enemigo_ronda_decenas:   .ascii '0'
                                    .ascii '\0'
string_max_enemigo_ronda_unidades:  .ascii '8'
                                    .ascii '\0'                    

string_vidas_player2:  .ascii '3'
                       .ascii '\0'

.globl _spr_vida2
hud_init:
    ld l, #15  ;; color letra
    ld h, #2  ;; color fondo
    call cpct_setDrawCharM0_asm

    ld a, #0x33 ;; 3 vidas + (30ascii)
    ld (string_vidas_player), a
    ld iy, #string_vidas_player
    ld hl, #0xC00D	
    call  cpct_drawStringM0_asm

    ld a, (bool_multijugador)
    cp #0
    jr z, no_player2
        ;; VIDAS PLAYER 2
        ;;pinto corazon
        ld de, #0xC012
        ld hl, #_spr_vida2
        ld bc, #0x0804
        call cpct_drawSprite_asm

        ld a, #0x33 ;; 3 vidas + (30ascii)
        ld (string_vidas_player2), a
        ld iy, #string_vidas_player
        ld hl, #0xC016
        call  cpct_drawStringM0_asm
    no_player2:

    ; Ejemplo 08/23
    ;; Decenas (0) --> 4 BYTES
    ld a, #0x30
    ld (string_bajas_enemigos_decenas), a
    call dibuja_string_bajas_enemigos_decenas

    ;; Unidades (8/) --> 4 BYTES + 4 BYTES
    ld a, #0x30
    ld (string_bajas_enemigos_unidades), a
    call dibuja_string_bajas_enemigos_unidades

    ;; Decenas (2) --> 4 BYTES
    ;ld a, #0x30
    ;ld (string_max_enemigo_ronda_decenas), a
    ld iy, #string_max_enemigo_ronda_decenas
    ld hl, #0xC03E	
    call  cpct_drawStringM0_asm
    
    ;; Unidades (3) --> 4 BYTES
    ;ld a, #0x34
    ;ld (string_max_enemigo_ronda_unidades), a
    ld iy, #string_max_enemigo_ronda_unidades
    ld hl, #0xC042	
    call  cpct_drawStringM0_asm
ret

hud_reinicia_enemigos_maximo:
    ld a, #0x30
    ld (string_max_enemigo_ronda_decenas), a
    ld a, #0x38
    ld (string_max_enemigo_ronda_unidades), a
ret


hud_update:
    ; Actualizamos variable string VIDAS
    ld ix, #entity_vector
    ld a, e_hp(ix)  ;; A = Vidas_player
    add #0x30       ;; A = A + 30  (30 es donde empieza el 0 en ASCII)
    ld (string_vidas_player), a

    ; Dibujamos en el HUD el texto VIDAS
    ld iy, #string_vidas_player
    ld hl, #0xC00D	
    call  cpct_drawStringM0_asm



    ld a, (bool_multijugador)
    cp #0
    jr z, no_second_player
        ;; Si hay player2
        ; Actualizamos variable string VIDAS
        call getEntity2
        ld a, e_hp(ix)  ;; A = Vidas_player
        add #0x30       ;; A = A + 30  (30 es donde empieza el 0 en ASCII)
        ld (string_vidas_player2), a

        ; Dibujamos en el HUD el texto VIDAS
        ld iy, #string_vidas_player2
        ld hl, #0xC016	
        call  cpct_drawStringM0_asm
        
    no_second_player:

ret




hud_actualiza_bajas:
    ld a, (string_bajas_enemigos_unidades) ;; A = num_enemigos(ascii)
    sub #0x30                              ;; A = num_enemigos(hex)
    add #01                                ;; A = A + 1 
    cp #0x0A
    jr nz, no_acarreo
        ;; Si hemos llegado a (10)dec = (0A)hex
        ld a, #0
        add #0x30                              ;; A = num_enemigos(ascii)
        ld (string_bajas_enemigos_unidades), a

        ;; Sumamos uno a las decenas
        ld a, (string_bajas_enemigos_decenas)
        sub #0x30
        add #0x01
        add #0x30
        ld (string_bajas_enemigos_decenas), a

        jr ya_hemos_sumado_bajas

    no_acarreo:
    add #0x30                              ;; A = num_enemigos(ascii)
    ld (string_bajas_enemigos_unidades), a
    

    ya_hemos_sumado_bajas:

    ;; Actualizamos numero de enemigos derrotados en el HUD (UNIDADES)
    ld iy, #string_bajas_enemigos_unidades
    ld hl, #0xC036	
    call  cpct_drawStringM0_asm

    ;; Actualizamos numero de enemigos derrotados en el HUD (DECENAS)
    ld iy, #string_bajas_enemigos_decenas
    ld hl, #0xC032	
    call  cpct_drawStringM0_asm

ret


;; ===========================================
;;  Input: HL => ptr_num_enemigos_por_ronda
;; ===========================================
hud_actualiza_num_max_enemigos_ronda:
    ;; Dibujar en el HUD el número de enemigos de la ronda siguiente
    ld a, (hl)  ;; a = num_enemigos(hex)  => 5A por ejemplo =  26 
    ld b, #0x00

    bucle_resta:
        inc b
        sub #0x0A
    jp p, bucle_resta
    add a, #0x0A
    dec b

    push af  ;; 

    ld a, b
    add #0x30
    ld (string_max_enemigo_ronda_decenas), a

    ;; Decenas (2) --> 4 BYTES
    ld iy, #string_max_enemigo_ronda_decenas
    ld hl, #0xC03E	
    call  cpct_drawStringM0_asm

    ;; Recupero el numero para las unidades
    pop af

    add #0x30
    ld (string_max_enemigo_ronda_unidades), a

    ;; Unidades (2) --> 4 BYTES
    ld iy, #string_max_enemigo_ronda_unidades
    ld hl, #0xC042	
    call  cpct_drawStringM0_asm

    ;; El contador lo ponemos a 00
    ld a, #0x30
    ld (string_bajas_enemigos_decenas), a
    call dibuja_string_bajas_enemigos_decenas

    ld a, #0x30
    ld (string_bajas_enemigos_unidades), a
    call dibuja_string_bajas_enemigos_unidades
    
ret



dibuja_string_bajas_enemigos_decenas:
    ;; Decenas (0) --> 4 BYTES
    ld iy, #string_bajas_enemigos_decenas
    ld hl, #0xC032	
    call  cpct_drawStringM0_asm
ret

dibuja_string_bajas_enemigos_unidades:
    ;; Unidades (8/) --> 4 BYTES + 4 BYTES
    ld iy, #string_bajas_enemigos_unidades
    ld hl, #0xC036	
    call  cpct_drawStringM0_asm
ret