#include "_Global.h"

#include "Main.h"

/**
 * 弾
 */
class Shot extends Object {
	var m;

	// コンストラクタ
	function Shot(m, p1, p2, p3, p4) {
		this.m = m;
		_x0 = p1; _y0 = p2; _x1 = p3; _y1 = p4; _x = _x0; _y = _y0;
	}

	var _x, _y;					// 位置
	var _elapse = 0;			// 経過時間
//	function x() { return _x; }
//	function y() { return _y; }
//	function elapse() { return _elapse; }

	var _col = -1;			// ウェーブの色

	var _x0, _y0;		// 発射位置
	var _x1, _y1;		// 目標位置
//	function create(x0, y0, x1, y1) { _x0 = x0; _y0 = y0; _x1 = x1; _y1 = y1; _x = _x0; _y = _y0; }
	function update() {
		_elapse += SHOT_MOVE;

		var i;
		var e;
		var dx, dy, sx, sy;
		var w, h;
		var d = _elapse * _elapse;
		sx = (_x1 > _x0) ? 1 : -1;
		dx = (_x1 > _x0) ? _x1 - _x0 : _x0 - _x1;
		sy = (_y1 > _y0) ? 1 : -1;
		dy = (_y1 > _y0) ? _y1 - _y0 : _y0 - _y1;
		_x = _x0;
		_y = _y0;
		if ( dx >= dy ) {
			e = -dx;
			for ( i = 0; i <= _elapse; i++ ) {
				_x += sx;
				e += 2 * dy;
				if ( e >= 0 ) {
					_y += sy;
					e -= 2 * dx;
				}
				w = _x - _x0;
				h = _y - _y0;
				if ( (w * w + h * h) >= d ) {
					// 目標距離に達すると抜ける(水平垂直に飛ぶ弾も斜めに飛ぶ弾も速度が一定になる)
					break;
				}
			}
		} else {
			e = -dy;
			for ( i = 0; i <= _elapse; i++ ) {
				_y += sy;
				e += 2 * dx;
				if ( e >= 0 ) {
					_x += sx;
					e -= 2 * dy;
				}
				w = _x - _x0;
				h = _y - _y0;
				if ( (w * w + h * h) >= d ) {
					// 目標距離に達すると抜ける(水平垂直に飛ぶ弾も斜めに飛ぶ弾も速度が一定になる)
					break;
				}
			}
		}
	}
}
