#include "_Global.h"

#include "Main.h"

/**
 * バー
 */
class Bar extends Object {
	var m;

	// コンストラクタ
	function Bar(m, x, y, col, count, border) {
		this.m = m;

//		create(x, y, col, count, border);

		_x      = x;
		_y      = y;
		_col    = col;
		_count  = count;
		_border = border;

		_hit = new Array(3);
		_hit[0] = false;
		_hit[1] = false;
		_hit[2] = false;
	}

	var _x, _y;
//	function x() { return _x; }
//	function y() { return _y; }

	var _col;
	var _count;
	var _border;
	var _hit;
//	function create(x, y, col, count, border) {
//		_x      = x;
//		_y      = y;
//		_col    = col;
//		_count  = count;
//		_border = border;
//
//		_hit = new Array(3);
//		_hit[0] = false;
//		_hit[1] = false;
//		_hit[2] = false;
//	}
//	function col() { return _col; }
//	function count() { return _count; }
	function update() {
		var i;

		_y += _DIV(m.speeder[0]._speed, 10);

		var y;
		var dsp_x0, dsp_y0;
		var dsp_x1, dsp_y1;
		var dsp_x2, dsp_y2;
		for ( i = 0; i < 3; i++ ) {
			y = m.speeder[i].dsp_y();
			if ( (y > -48) && (y < 320) && (_y > y) && !_hit[i] ) {
				_hit[i] = true;

				if ( i != 0 ) {
					// 移動
					if ( m.speeder[i]._x <= (_x + 38) ) {
						m.speeder[i].right();
						m.speeder[i]._auto = AUTO_MOVED_INERTIA;
					} else if ( m.speeder[i]._x >= (_x + 138) ) {
						m.speeder[i].left();
						m.speeder[i]._auto = AUTO_MOVED_INERTIA;
					} else if ( m.speeder[i]._x != (_x + 88) ) {
						m.speeder[i].set_direction(_DIV((_x + 88) - m.speeder[i]._x, 10));
						m.speeder[i]._auto = AUTO_MOVED_NEUTRAL;
					} else {
						m.speeder[i]._auto = AUTO_NEUTRAL;
					}

					// スライド
					dsp_x0 = m.speeder[0].dsp_x();
					dsp_y0 = m.speeder[0].dsp_y();
					dsp_x1 = m.speeder[1].dsp_x();
					dsp_y1 = m.speeder[1].dsp_y();
					dsp_x2 = m.speeder[2].dsp_x();
					dsp_y2 = m.speeder[2].dsp_y();
					switch ( i ) {
					case 1:
						if (
						( dsp_x1       <= (dsp_x0 + 24)) &&
						( dsp_y1       <= (dsp_y0 + 48)) &&
						((dsp_x1 + 24) >=  dsp_x0      ) &&
						((dsp_y1 + 48) >=  dsp_y0      )
						) {
							m.speeder[i].slide((m.speeder[0]._x < (_x + 88)) ? 1 : -1);
						} else if (
						( dsp_x1       <= (dsp_x2 + 24)) &&
						( dsp_y1       <= (dsp_y2 + 48)) &&
						((dsp_x1 + 24) >=  dsp_x2      ) &&
						((dsp_y1 + 48) >=  dsp_y2      )
						) {
							m.speeder[i].slide((m.speeder[2]._x < (_x + 88)) ? 1 : -1);
						}
						break;
					case 2:
						if (
						( dsp_x2       <= (dsp_x0 + 24)) &&
						( dsp_y2       <= (dsp_y0 + 48)) &&
						((dsp_x2 + 24) >=  dsp_x0      ) &&
						((dsp_y2 + 48) >=  dsp_y0      )
						) {
							m.speeder[i].slide((m.speeder[0]._x < (_x + 88)) ? 1 : -1);
						} else if (
						( dsp_x2       <= (dsp_x1 + 24)) &&
						( dsp_y2       <= (dsp_y1 + 48)) &&
						((dsp_x2 + 24) >=  dsp_x1      ) &&
						((dsp_y2 + 48) >=  dsp_y1      )
						) {
							m.speeder[i].slide((m.speeder[1]._x < (_x + 88)) ? 1 : -1);
						}
						break;
					}
				}

				// 移動
				if ( m.level == 4 ) {
					if ( m.speeder[0]._x <= (_x + 38) ) {
						m.speeder[0].right();
						m.speeder[0]._auto = AUTO_MOVED_INERTIA;
					} else if ( m.speeder[0]._x >= (_x + 138) ) {
						m.speeder[0].left();
						m.speeder[0]._auto = AUTO_MOVED_INERTIA;
					} else if ( m.speeder[0]._x != (_x + 88) ) {
						m.speeder[0].set_direction(_DIV((_x + 88) - m.speeder[0]._x, 10));
						m.speeder[0]._auto = AUTO_MOVED_NEUTRAL;
					} else {
						m.speeder[0]._auto = AUTO_NEUTRAL;
					}
				}

				// シールド変更
				if ( m.level == 5 ) {
					if ( _col < 3 ) m.speeder[0].shield(_col);
				}

				// スピード変更
				var _in = true;
				if ( (m.level != 4) && ((_x > m.speeder[i]._x) || ((_x + 176) < m.speeder[i]._x)) ) {
					_in = false;
				}
				if ( _in && ((_col == 3) || (_col == m.speeder[i]._shield)) ) {
					if ( m.level != 6 ) {
						m.speeder[i].speed_up();
						if ( _col == 3 ) {
							m.speeder[i].speed_up();
						}
					}
				} else {
					if ( m.level != 6 ) {
						m.speeder[i].speed_down();
					} else {
						m.speeder[i].speed_down_v(5);
					}
				}

				if ( i == 0 ) {
					// スピード変更
					if ( (m.level < 2) || (m.level == 7) ) {
						if ( m.speeder[1]._out ) {
							if ( (m.speeder[1].dsp_y() <= -48) && (m.shield_wait[0] > 0) ) {
								m.speeder[1].speed_down();
							} else {
								m.speeder[1].speed_up();
							}
						}
						if ( m.speeder[2]._out ) {
							if ( (m.speeder[2].dsp_y() <= -48) && (m.shield_wait[1] > 0) ) {
								m.speeder[2].speed_down();
							} else {
								m.speeder[2].speed_up();
							}
						}
					}

					// ラップタイム計測
					if ( _border ) {
						m._elapse_l = m._elapse;
						m.lap = 9 - _count;
						m.time[m.lap] = m.time[0];
						if ( m.lap == 1 ) {
							m.lap_time = m.time[m.lap] - m.best_time[m.index_b()][m.lap];
						} else {
							m.lap_time = (m.time[m.lap] - m.time[m.lap - 1]) - m.best_time[m.index_b()][m.lap];
						}
						m.dsp_lap = true;
						if ( m.lap == 9 ) {
							m.finish = true;
						}
					}
				}
			}
			if ( (m.level >= 2) && (m.level <= 6) ) break;
		}

		if ( _y >= 320 ) {
			return false;
		}
		return true;
	}
}
