/******************************************************************/
/* アニメーション付き１文字入力 */
/******************************************************************/

#include <stdio.h>
#include <time.h>
#include "defines.h"
#include "amacro.h"
#include "aigtext.h"

#define	DEBUG	0

/******************************************************************/

int AnimeGetch(ANIME *an)
/* アニメーション機能付きgetch() */
{
int fanim=0,i,c,col;
time_t ts,t,tss;
	col=B_COLOR(-1);
	tss=ts=clock(); /* 一番最初の開始時間 */
	while (!an->kbhits()) { /* キーが押されていない時 */
		if (an->etim>0 && ((clock()-tss)/CLK_TCK)>an->etim) {
			/* 制限時間オーバー */
			break;
		}
		if (fanim==0) { /* 現在アニメーションが出ていない */
		    if (((clock()-ts)/CLK_TCK)>=an->stim) {
			/* 時間が経ったのでアニメーションをＯＮにする */
			c=curmode(0);
			/* 下画面退避 */
			if (an->under!=NULL) gettext(an->sx,an->sy,an->ex,an->ey,an->under);
			i=0;
			fanim=1;
		    }
		}
		if (fanim) { /* アニメーション中 */
		    if (clock()-ts>an->sc[i].tm) {
			/* 指定/100秒単位でアニメーションを動かす */
			if (i>0 && an->sc[i].clr) {
				/* 前のパターンを消す:最初以外 */
				ImgPut(an->sc[i].x,an->sc[i].y,an->sc[i].buff,0);
			}
			/* 次のパターンを */
			if ((++i)>=an->ptrns) i=0;
			/* パターン表示 */
			ImgPut(an->sc[i].x,an->sc[i].y,an->sc[i].buff,col);
			ts=clock();
		    }
		}
	}
	/* アニメーションを消してからキー入力 */
	if (fanim) {
		if (an->under==NULL) {
			ImgPut(an->sc[i].x,an->sc[i].y,an->sc[i].buff,0);
		} else {
			puttext(an->sx,an->sy,an->under);
		}
		fanim=0;
		curmode(c);
	}
	return(an->kbhits()? an->getchs(0):-1);
}

/******************************************************************/
