;;####################################################################
;;# GNU Free Documentation License                                   #
;;# Version 1.3, 3 November 2008                                     #
;;#                                                                  #
;;# Copyright (C) 2021 Lumina                                        #
;;# (Paula Garcia Morales, Laura Gil Lopez, Jorge Perez Dominguez)   #
;;#                                                                  #
;;# Everyone is permitted to copy and distribute verbatim copies     #
;;# of this license document, but changing it is not allowed.        #
;;####################################################################


.include "cpctelera.h.s"
.include "collisions.h.s"

;;Actualizar colisiones cada vez que se ejecuta el bucle principal del juego
collisions_update::
	ld hl, #check_collisions
	ld  a, #Collision_masc

	call entityman_forall_matching_pairs
ret


;;Comprobar si las entidades estan colisionando
;;IX - Entidad 1
;;IY - Entidad 2
check_collisions::
	;;e_x(iy)+e_w(iy) < e_x(ix)
	;;Si A<B no colision

	ld  a, 0(iy)  ;;A = Player.x
	add a, 2(iy)  ;;A = A + Player.w
	sub a, 0(ix)  ;;A = A - Enemy.x
	jr c, _no_collision


	;;e_x(ix)+e_w(ix) < e_x(iy)
	;;Si C<D no colision

	ld  a, 0(ix)  ;;A = Enemy.x
	add a, 2(ix)  ;;A = A + Enemy.w
	sub a, 0(iy)  ;;A = A - Player.x
	jr c, _no_collision


	;;e_y(iy)+e_h(iy) < e_y(ix)
	;;Si A<B no colision

	ld  a, 1(iy)  ;;A = Player.y
	add a, 3(iy)  ;;A = A + Player.h
	sub a, 1(ix)  ;;A = A - Enemy.y
	jr c, _no_collision


	;;e_y(ix)+e_h(ix) < e_y(iy)
	;;Si C<D no colision

	ld  a, 1(ix)  ;;A = Enemy.y
	add a, 3(ix)  ;;A = A + Enemy.h
	sub a, 1(iy)  ;;A = A - Player.y
	jr c, _no_collision
	

	;;Si hay colision marcamos la entidad para destruir
	call entityman_set_for_destruction

	ld a, 7(iy)			;;Saves Entity.Masc into A
	and #Player_masc 	;;And with Masc
	cp  #Player_masc 	;;Compare A with masc

	jr nz, no_delete_life	;;If != 0


	ld a, 7(ix)
	and #Queso_masc		;;And with Masc
	cp  #Queso_masc 	;;Compare A with masc
	jr  z, suma_vida

	
	;;Si hay colision y una de las entidades es el jugador le quitamos una vida
	call life_update

	no_delete_life:
		jp _no_collision

	suma_vida:
		call life_up
		call puedo_queso

	_no_collision:
		pop hl
		jp (hl)