/*
*	Yamana's Otomeza Plug-in Tool
*		ゆらゆら
*	
*	1995.07.07  乙女座用プラグイン対応版
*	1995.08.18  cos テーブルを使い微妙にびみょ〜に高速化
*	
*/
#include	"otome_pi.h"
#include	"costbl.h"

const char longname[]  = "EFFECT: ゆらゆら";
int			cnfg_max = 3;
PI_CNFG		cnfg[] =
			{	/* 1234567890123456 ,min,max,def,set */
				{ "横 ←   → 縦  " , 0,   2,  0,  0 },
				{ "揺れの幅"		, 4,  64,  4,  4 },
				{ "揺れの大きさ"	, 2,  32,  3,  3 }
			};

#define	USE_ENV		PI_SET_ENV
#define	USE_TYPE	PI_EFFC_ALORSL

#include	"otome_pi.c"


/*************** ゆらゆらテーブル作成 *****************/

void mk_table( wide,height,tbl )
int 	wide,height,*tbl;
{
	int 	i;
	double	d;
	
	for( i=0; i<wide; i++ )
	{	
//		d = (double)( height * sin( (double)((_PI * i) / wide) )+0.8);
//		tbl[ i      ] = (int)( d );
		tbl[ i      ] = (height * sin256( (i*128)/wide )+ 0x80)>>8;
		tbl[ wide+i ] = -tbl[i] ;
	}
	
}

/****************** ゆらゆら実行 ***********************/

void yurayura( mode,fr, wide,tbl )
FRAME	*fr;
int 	mode,wide,*tbl;
{
	FRAME	para;
	int 	i;
	
	/* ゆらゆら横 */
	if( mode<2 )
	{	para.lupx = fr->lupx ;
		para.rdwx = fr->rdwx ;
		for( i=(fr->lupy); i<=(fr->rdwy) ; i++ )
		{	para.lupy = para.rdwy = i ;
			EGB_partScroll( EgbPtr,0, tbl[ i % wide ],0, &para );
		}
	}
	
	/* ゆらゆら縦 */
	if( mode>0 )
	{	para.lupy = fr->lupy ;
		para.rdwy = fr->rdwy ;
		for( i=(fr->lupx); i<=(fr->rdwx) ; i++ )
		{	para.lupx = para.rdwx = i ;
			EGB_partScroll( EgbPtr,0, 0,tbl[ i % wide ], &para );
		}
	}
	
}


/********************************/

int APL_exec()
{
	int 	wide,height,mode;
	int 	*yure_tbl;
	FRAME	fr;
	
	mode  = cnfg[0].val;		/* 0:横 2:縦 1:両方 */
	wide  = cnfg[1].val;		/* 4〜64 */
	height= cnfg[2].val;		/* 2〜32 */
	
	if( (yure_tbl = (int*)PI_MALLOC( sizeof(int)*(wide*2+1) ))==NULL )
		return PI_ERROR_NO_MEMORY;
	
	mk_table( wide, height, yure_tbl );
	
	fr.lupx = WORD( g_para + 0 );
	fr.lupy = WORD( g_para + 2 );
	fr.rdwx = WORD( g_para + 4 );
	fr.rdwy = WORD( g_para + 6 );
	EGB_writePage( EgbPtr, pi_imge->page );
	
	yurayura( mode, &fr, wide*2,yure_tbl );
	
	PI_FREE( yure_tbl );
	
	return NOERR;
}

