/* ReC98
 * -----
 * 2nd part of code segment #1 of TH03's MAIN.EXE
 */

extern "C" {
#include "platform.h"
#include "pc98.h"
#include "th03/sprite16.hpp"
#include "th03/main/playfld.hpp"
#include "th03/main/player/shot.hpp"

void pascal near shots_update(void)
{
	shotpair_t near *shotpair = shotpairs;
	for(int i = 0; i < SHOTPAIR_COUNT; i++, shotpair++) {
		if(shotpair->flag) {
			shotpair->topleft.y.v += shotpair->velocity_y.v;
			if(shotpair->topleft.y.v <= to_sp(-1.0f)) {
				shotpair->flag = 0;
			}
		}
	}
}

void pascal near shots_render(void)
{
	shotpair_t near *shotpair = shotpairs;

	sprite16_put_w = SHOT_W;
	sprite16_put_h = SHOT_H;
	sprite16_clip_left = 0;
	sprite16_clip_right = RES_X - 1;

	for(int i = 0; i < SHOTPAIR_COUNT; i++, shotpair++) {
		if(shotpair->flag) {
			sprite16_offset_t so = (shotpair->so_anim + shotpair->so_pid);
			screen_x_t left = playfield_fg_x_to_screen(
				shotpair->topleft.x, shotpair->pid
			);
			screen_y_t top = shotpair->topleft.y.to_pixel() + PLAYFIELD_TOP;

			sprite16_put(left + 0,                 top, so);
			sprite16_put(left + SHOTPAIR_DISTANCE, top, so);

			shotpair->so_anim += SHOT_VRAM_W;
			if(shotpair->so_anim >= (SHOT_VRAM_W * SHOT_SPRITE_COUNT)) {
				shotpair->so_anim = 0;
			}
		}
	}
}

}