;; TODO hacer sistema fisico que actualiza las entidades
;; sumandole las velocidades
;; 1.- cogemos una entidad
;; 2.- le sumamos a la x su velocidad
;; 3.- le sumamos a la y su velocidad
;; 4.- seguimos con la siguiente entidad

.include "physics_system.h.s"
.include "man/entity_manager.h.s"

screen_width = 80
screen_height = 200

physics_system_init::
    ret

;; INPUT:
;; IX: puntero a la entidad a actualizar
;; de esta entidad debemos obtener su posición (_x, _y)
;; y su velocidad (_vx, _vy)
;; devuelve la nueva posición donde se debe dibujar la entidad
;; B: mascara de bits
physics_system_update::

    ld      b, a
    
    ld      a, #screen_width + 1
    sub     e_w(ix)
    ld      c, a
    
    ld      a, e_x(ix)
    add     e_vx(ix)
    cp      c
    jr      nc, invalid_x

valid_x:
        ld      e_x(ix), a
        jr      endif_x
invalid_x:
        ld      a, e_vx(ix)
        neg
        ld      e_vx(ix), a
endif_x:


    ld      a, #22 + 1
    add    e_h(ix)
    ld      c, a
    
    ld      a, e_y(ix)
    add     e_vy(ix)
    cp      c
    jr      c, invalid_y
 
    ld      a, #screen_height + 1
    sub     e_h(ix)
    ld      c, a
    
    ld      a, e_y(ix)
    add     e_vy(ix)
    cp      c
    jr      nc, invalid_y


valid_y:
        ld      e_y(ix), a
        jr      endif_y


invalid_y:
        ld      a, e_vy(ix)
        neg
        ld      e_vy(ix), a
endif_y:
        ret
