;;-----------------------------LICENSE NOTICE------------------------------------
;;  This file is part of Viking Hangover
;;  Copyright (C) 2021 Ahmed Begga / Érika Moreno / Adriana Morejón (@ComputosGame)
;;
;;  This program is free software: you can redistribute it and/or modify
;;  it under the terms of the GNU Lesser General Public License as published by
;;  the Free Software Foundation, either version 3 of the License, or
;;  (at your option) any later version.
;;
;;  This program is distributed in the hope that it will be useful,
;;  but WITHOUT ANY WARRANTY; without even the implied warranty of
;;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;  GNU Lesser General Public License for more details.
;;
;;  You should have received a copy of the GNU Lesser General Public License
;;  along with this program.  If not, see <http://www.gnu.org/licenses/>.
;;-------------------------------------------------------------------------------
.include "ai.h.s"
.include "../man/entity.h.s"
.include "generator.h.s"

ai_speed_left::
    .db #-1

ai_speed_right::
    .db #1

ai_counter::
    .db #1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Description:                                           ;;                                                          
;;     updates vx and vy of any entity with flag move    ;;
;;Required:                                              ;;
;;     IX -> Position of the array entity                ;;  
;; Return:                                               ;;                                                  
;;     -                                                 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
sys_ai_updateOne:
    ld h, e_ia1(ix)
    ld l, e_ia2(ix)
    ld bc, #escape
    push bc

    jp (hl)

    escape:

ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Description:                                           ;;                                                          
;;     updates vx and vy of any entity with flag move    ;;
;;Required:                                              ;;
;;     IX -> Position of the array entity                ;;  
;; Return:                                               ;;                                                  
;;     -                                                 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
sys_ai_entity:
    ld e_vx(ix), #0
    call sys_ai_check
ret
sys_ai_shot::
    call sys_ai_entity
ret
sys_ai_bottle::
    call sys_ai_entity
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Description:                                           ;;                                                          
;;     updates vx and vy of any entity with flag move    ;;
;;Required:                                              ;;
;;     IX -> Position of the array entity                ;;  
;; Return:                                               ;;                                                  
;;     -                                                 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
sys_ai_check:
    ld a, e_count_ia(ix)
    or a
    jp z, reset_ia_count
    dec e_count_ia(ix)
    ret 
reset_ia_count:

    ld a, (ai_counter)
    ld e_count_ia(ix), a

    ld a, e_movement_ia(ix)
    or a
    jp z, sys_ai_move_right
    jp sys_ai_move_left
    jp sys_ai_entity
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Description:                                           ;;                                                          
;;     Updates speed type (left) of the specific entity  ;;
;;Required:                                              ;;
;;     IX -> Position of the array entity                ;;  
;; Return:                                               ;;                                                  
;;     -                                                 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
sys_ai_move_left::
    ld a, (ai_speed_left)
    ld e_vx(ix), a
ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Description:                                           ;;                                                          
;;     Updates speed type (right) of the specific entity ;;
;;Required:                                              ;;
;;     IX -> Position of the array entity                ;;  
;; Return:                                               ;;                                                  
;;     -                                                 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
sys_ai_move_right:: 
    ld a, (ai_speed_right)
    ld e_vx(ix), a
ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Description:                                           ;;                                                          
;;     Destroy an entity after u colided with            ;;
;;Required:                                              ;;
;;     IX -> Position of the array entity                ;;  
;; Return:                                               ;;                                                  
;;     -                                                 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
sys_ai_explosion:
    ld a, e_count_ia(ix)
    dec a
    jp z, sys_ai_destroy
    ld e_count_ia(ix), a
    ret
sys_ai_destroy:
    call man_entity_set4_destroy
ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Description:                                           ;;                                                          
;;     updates all the entities woth the flag e_cmpia    ;;
;;Required:                                              ;;
;;     -                                                 ;;  
;; Return:                                               ;;                                                  
;;     -                                                 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
sys_ai_update::
    ld hl, #sys_ai_updateOne
    ld a, #e_cmp_ia
    call man_entity_forall
ret