/*!

	鮫亀カーソル部分

*/
#if defined CURSOR_INCLUDED___
  #endinput
#endif
#define CURSOR_INCLUDED___

#include "./common/helper_array.inc"
#include "./common/helper_audio.inc"
#include "./common/helper_2d.inc"
#include "./common/helper_texture.inc"
#include "./common/helper_pad.inc"

#include "./types.inc"

stock GetCursorPos(&x, &y);

//////////////////////////////////////////////////////////////////////////////////

static g_Cursor[tagObjectData];
static float:g_CursorSize;				//カーソルの移動間隔
//static float:g_CursorHalfSize;			//

static g_XMaxRange;						//行動可能範囲
static g_YMaxRange;						//

static texture:g_TextureCursor;

//////////////////////////////////////////////////////////////////////////////////

public CursorAction() {
//	new tex_id01[64];
//	new tex_id02[64];
//	new tex_id03[64];

//	GetArg( "id01", tex_id01);
//	GetArg( "id02", tex_id02);
//	GetArg( "id03", tex_id03);
//	new texture:tex[3];

// 	tex[0] = texture:atoi(tex_id01);
//	tex[1] = texture:atoi(tex_id02);
//	tex[2] = texture:atoi(tex_id03);

	for (;;) {

//		new id, param1, param2;
		WaitMessage(TAG("ANIM"));
/*
		new anim_count = 0;
		new anim_frame = 0;
		for (;;) { 
			anim_count++;
			anim_count &= 0x03;
			if (!anim_count) {
				anim_frame++;
				if (anim_frame == 3) {
					break;
				}
				SetTexture(Self(), tex[anim_frame]);
			}
			sleep;
		}

		SetTexture(Self(), tex[0]);
*/
		AnimRotate(Self(), 0.0, 0.0, RAD(50.0), 150.0);
		wait(150);

		SetRot(Self(), 0.0, 0.0, 0.0);

		sleep;
	}

}

//////////////////////////////////////////////////////////////////////////////////
/*!
	カーソルの作成
*/
stock CursorTextureLoad() {
	g_TextureCursor = TextureLoad("./texture/cursor.png", true);
//	imgDecStart("./texture/cursor.png", _, _, _, _, IMGDEC_FLAG_INDIRECT);
//	imgDecWait();
//	TrimingTextureFromXml(domRoot(), "TEXTURE", "cursor", g_TextureCursor);
}
stock CursorTextureRelease() {
	imgReleaseTex(g_TextureCursor);
}

//////////////////////////////////////////////////////////////////////////////////
/*!
	カーソルの作成
*/
stock CursorCreate(const game_level, obj:parent) {


	CursorDestroy();	//一度念のために破棄する。


	g_CursorSize = KOMA_SIZE[game_level];
//	g_CursorHalfSize = g_CursorSize / 2.0;
	new x = 0;
	new y = KOMA_LENGTH[game_level] - 1;
	g_XMaxRange = KOMA_LENGTH[game_level] - 1;
	g_YMaxRange = KOMA_LENGTH[game_level] - 1;

//	imgDecStart("./texture/cursor.png", _, _, _, _, IMGDEC_FLAG_INDIRECT);
//	imgDecWait();
//	TrimingTextureFromXml(domRoot(), "TEXTURE", "cursor", g_TextureCursor);

	g_Cursor[Object] = obj:CreateCharacterObject(
										x * g_CursorSize, y * g_CursorSize,
										g_CursorSize, g_CursorSize,
										g_TextureCursor, parent,
										ZSORT_NORMAL, 12.0);
	Hide(obj:g_Cursor[Object]);
/*
	new args[256];
	sprintf(args, "id01 = %d ; id02 = %d ; id03 = %d",
		g_TextureCursor[0],
		g_TextureCursor[1],
		g_TextureCursor[2]);
*/
//	AttachScript(obj:g_Cursor[Object], "CursorAction", _, args);
	AttachScript(obj:g_Cursor[Object], "CursorAction");

	g_Cursor[PointX] = x;
	g_Cursor[PointY] = y;

}
//////////////////////////////////////////////////////////////////////////////////
/*!
	カーソルの破棄
*/
stock CursorDestroy() {
	SafeDestroyObject(obj:g_Cursor[Object]);
}

//////////////////////////////////////////////////////////////////////////////////
/*!
	カーソルを指定の位置に設定
*/
stock CursorDraw() {
	new float: new_x = (g_Cursor[PointX] * g_CursorSize);
	new float: new_y = (g_Cursor[PointY] * g_CursorSize);
	SetPos(obj: g_Cursor[Object], new_x + g_CursorSize, new_y + g_CursorSize, 1.0);
}
//////////////////////////////////////////////////////////////////////////////////
/*!
	カーソル非表示
*/
stock CursorHide() {
	Hide(obj: g_Cursor[Object]);
}
//////////////////////////////////////////////////////////////////////////////////
/*!
	カーソル表示
*/
stock CursorShow() {
	Show(obj: g_Cursor[Object]);
}

//////////////////////////////////////////////////////////////////////////////////
stock CursorMoveUp() {

	g_Cursor[PointY]--;
	if (g_Cursor[PointY] < 0) {
		g_Cursor[PointY] = 0;
	} else {
		new obj:target = obj:g_Cursor[Object];
		AnimMoveLine(target, 
			g_Cursor[PointX] * g_CursorSize + g_CursorSize,
			g_Cursor[PointY] * g_CursorSize + g_CursorSize, 1.0, 120.0);
		wait(120);
	}
}

//////////////////////////////////////////////////////////////////////////////////
stock CursorMoveDown() {
	g_Cursor[PointY]++;
	if (g_Cursor[PointY] > g_YMaxRange) {
		g_Cursor[PointY] = g_YMaxRange;
	} else {
		new obj:target = obj:g_Cursor[Object];
		AnimMoveLine(target, 
			g_Cursor[PointX] * g_CursorSize + g_CursorSize,
			g_Cursor[PointY] * g_CursorSize + g_CursorSize, 1.0, 120.0);
		wait(120);
	}

}

//////////////////////////////////////////////////////////////////////////////////
stock CursorMoveLeft() {
	g_Cursor[PointX]--;
	if (g_Cursor[PointX] < 0) {
		g_Cursor[PointX] = 0;
	} else {
		new obj:target = obj:g_Cursor[Object];
		AnimMoveLine(target, 
			g_Cursor[PointX] * g_CursorSize + g_CursorSize,
			g_Cursor[PointY] * g_CursorSize + g_CursorSize, 1.0, 120.0);
		wait(120);
	}

}

//////////////////////////////////////////////////////////////////////////////////
stock CursorMoveRight() {
	g_Cursor[PointX]++;
	if (g_Cursor[PointX] > g_XMaxRange) {
		g_Cursor[PointX] = g_XMaxRange;
	} else {
		new obj:target = obj:g_Cursor[Object];
		AnimMoveLine(target, 
			g_Cursor[PointX] * g_CursorSize + g_CursorSize,
			g_Cursor[PointY] * g_CursorSize + g_CursorSize, 1.0, 120.0);
		wait(120);
	}

}

//////////////////////////////////////////////////////////////////////////////////
stock GetCursorPos(&x, &y) {
	x = g_Cursor[PointX];
	y = g_Cursor[PointY];
}

stock CursorSelectAnimation() {
	SendMessage(obj:g_Cursor[Object], TAG("ANIM"));
//	sleep;
}
