void classboss::exec_daisiebot()
{
	unsigned short int shot_type = IA_STATE_SHOT_RAINBOW;

	std::cout << "classboss::exec_daisiebot" << std::endl;

	if (IA_state == IA_STATE_WAIT_TIME) {
		IA_state = IA_STAND;
	}

	// stand -> shot rainbow -> cross screen -> use flowers
	if (IA_state == IA_STAND) {
		IA_state = IA_STATE_CROSS_SCREEN;
		state.animation_type = ANIM_TYPE_WALK;
		return;
	}

	if (IA_state == IA_STATE_SHOT_RAINBOW) {
		state.animation_type = ANIM_TYPE_STAND;
		/// @TODO (use attacks/weapons system) shot_rainbow();
		IA_state = IA_STATE_CROSS_SCREEN;

		initial_position.x = position.x;
		initial_position.y = position.y;
		IA_state = IA_STATE_WAIT_TIME;
		state.move_timer = timer.getTimer()+300;
	}

	if (IA_state == IA_STATE_SHOT_FLOWER) {
		state.animation_type = ANIM_TYPE_STAND;
		/// @TODO (use attacks/weapons system) shot_flower(temp_npc);
		/// temp_npc->projectile.timer = getTimer()+60;
		initial_position.x = position.x;
		initial_position.y = position.y;
		IA_state = IA_STATE_WAIT_TIME;
		state.move_timer = timer.getTimer()+3000;
	}

	// TODO: move to generic npc, once more will use it
	if (IA_state == IA_STATE_CROSS_SCREEN) {
		// check if must stop/invert
		state.move_timer = timer.getTimer() + 10;
		if (state.direction == ANIM_DIRECTION_LEFT) {
			int map_tile_x = (position.x-move_speed)/16;
			int map_tile_y = position.y/16;
			if (distance.width < 18*TILESIZE && (position.x-move_speed > 0 && (map->getMapPointLock(st_position(map_tile_x, map_tile_y)) == 0 || map->getMapPointLock(st_position(map_tile_x, map_tile_y)) == TERRAIN_WATER))) {
				position.x-= move_speed;
				distance.width += move_speed;
			} else {
				distance.width = 0;
				invert_direction();
				if (shot_type == IA_STATE_SHOT_RAINBOW) {
					shot_type = IA_STATE_SHOT_FLOWER;
				} else {
					shot_type = IA_STATE_SHOT_RAINBOW;
				}
				IA_state = shot_type;
			}
		} else { // ANIM_RIGHT
			int map_tile_x = (position.x+frameSize.width+move_speed)/16;
			int map_tile_y = position.y/16;
			//map->getMapPointLock(st_position(map_tile_x, map_tile_y))
			if (distance.width < 18*TILESIZE && (map->getMapPointLock(st_position(map_tile_x, map_tile_y)) == 0 || map->getMapPointLock(st_position(map_tile_x, map_tile_y)) == TERRAIN_WATER)) {
				position.x+= move_speed;
				distance.width += move_speed;
			} else {
				distance.width = 0;
				invert_direction();
				IA_state = shot_type;
			}
		}
	}

}
void Robot::brake(unsigned long duration){
   run(_left.speed, _right.speed, invert_direction(_left.state), invert_direction(_right.state));
   delay(duration);
   release();
}