io.write("Starting script for Level: 1 in BlinkenLUA / ",_VERSION,"!\n")
bs.callback.engine.init("initLevel");
function initLevel()
    bs.include("_rock.inc.bsl");
    bs.include("_water.inc.bsl");
    --Make rocks
    Rock:new(27,2);
    Rock:new(111,6);
    Rock:new(109,2);
    Rock:new(104,2);
    Rock:new(102,2);
    Rock:new(88,5);
    Rock:new(74,3);
    Rock:new(63,6);
    Rock:new(50,1);
    Rock:new(37,6);
    Rock:new(16,4);
    --Make Water
    for i=1,131 do
        Water:new(i,10,1);
	Water:new(i,11,0);
    end
    --Create UFO to fly in
    UFO_POS_X=7*32;
    UFO_POS_Y=4*32;
    UFO_MOVEMENT_Y=0;
    GFX_UFO={ bs.gfx.load("ufo_1.png"),
              bs.gfx.load("ufo_2.png"),
	      bs.gfx.load("ufo_3.png"),
	      bs.gfx.load("ufo_4.png"),
	      bs.gfx.load("ufo_5.png"),
	      bs.gfx.load("ufo_up.png"),
	      bs.gfx.load("ufo_down.png"),
	      bs.gfx.load("ufo_stop.png") };
    OBJ_UFO={};
    OBJ_UFO[1]=bs.obj.new(UFO_POS_X*32, UFO_POS_Y*32, GFX_UFO[1], "blocking, visible, elevator");
    OBJ_UFO[2]=bs.obj.new(UFO_POS_X*32, (UFO_POS_Y+1)*32, GFX_UFO[2], "blocking, visible, elevator");
    OBJ_UFO[3]=bs.obj.new((UFO_POS_X+1)*32, (UFO_POS_Y+1)*32, GFX_UFO[3], "blocking, visible, elevator");
    OBJ_UFO[4]=bs.obj.new((UFO_POS_X+4)*32, (UFO_POS_Y+1)*32, GFX_UFO[4], "blocking, visible, elevator");
    OBJ_UFO[5]=bs.obj.new((UFO_POS_X+4)*32, UFO_POS_Y*32, GFX_UFO[5], "blocking, visible, elevator");
    OBJ_UFO_STEERUP=bs.obj.new((UFO_POS_X+1)*32, UFO_POS_Y*32, GFX_UFO[6], "visible");
    OBJ_UFO_STEERDOWN=bs.obj.new((UFO_POS_X+3)*32, UFO_POS_Y*32, GFX_UFO[7], "visible");
    OBJ_UFO_STOP=bs.obj.new((UFO_POS_X+2)*32, UFO_POS_Y*32, GFX_UFO[8], "visible");
    OBJ_UFO_STEERUP.callback.playeraction("steerUp");
    OBJ_UFO_STEERDOWN.callback.playeraction("steerDown");
    OBJ_UFO_STOP.callback.playeraction("stop");

    bs.callback.engine.physics("scriptPhysics");
end
function scriptPhysics()
    if bs.player.x()>UFO_POS_X-1 and bs.player.x()<UFO_POS_X+6*32 and bs.player.y()>UFO_POS_Y-1 and bs.player.y()<UFO_POS_Y+2*32 then
        UFO_POS_X=UFO_POS_X+1;
        if UFO_POS_Y+UFO_MOVEMENT_Y<16 or UFO_POS_Y+UFO_MOVEMENT_Y>9*32 then
            UFO_MOVEMENT_Y=0;
        end
        UFO_POS_Y=UFO_POS_Y+UFO_MOVEMENT_Y;
        ufoToPos();
        bs.player.x(bs.player.x()+1);
    else
        if bs.player.x()==0 and bs.player.y()==64 then
            UFO_POS_X=7*32;
	    UFO_POS_Y=4*32;
	end
        ufoToPos();
    end
    if bs.player.x()>=4160 and bs.level.pixels.required()~=bs.level.pixels.collected() then
        bs.player.x(0);
	bs.player.y(63);
    end
end
function ufoToPos()
    OBJ_UFO[1].x(UFO_POS_X);
    OBJ_UFO[1].y(UFO_POS_Y);
    OBJ_UFO[2].x(UFO_POS_X);
    OBJ_UFO[2].y(UFO_POS_Y+1*32);
    OBJ_UFO[3].x(UFO_POS_X+1*32);
    OBJ_UFO[3].y(UFO_POS_Y+1*32);
    OBJ_UFO[4].x(UFO_POS_X+4*32);
    OBJ_UFO[4].y(UFO_POS_Y+1*32);
    OBJ_UFO[5].x(UFO_POS_X+4*32);
    OBJ_UFO[5].y(UFO_POS_Y);
    OBJ_UFO_STEERUP.x(UFO_POS_X+1*32);
    OBJ_UFO_STEERUP.y(UFO_POS_Y);
    OBJ_UFO_STEERDOWN.x(UFO_POS_X+3*32);
    OBJ_UFO_STEERDOWN.y(UFO_POS_Y);
    OBJ_UFO_STOP.x(UFO_POS_X+2*32);
    OBJ_UFO_STOP.y(UFO_POS_Y);
end
function steerUp(obj_id)
    UFO_MOVEMENT_Y=-0.5;
end
function steerDown(obj_id)
    UFO_MOVEMENT_Y=0.5;
end
function stop(obj_id)
    UFO_MOVEMENT_Y=0;
end
