Window.SetBackgroundTopColor (0, 0, 0);
Window.SetBackgroundBottomColor (0, 0, 0);
bg_image = Image ("bg.png");
bg_image = bg_image.Scale (Window.GetWidth (),Window.GetHeight ());
bg =  Sprite (bg_image);
bg.SetZ (-10);


yPos = (2/5);
if (Plymouth.GetMode () == "shutdown")
{
    yPos = 0.5;
}


s = 0.75;

logo_image = Image ("logo.png");
logo_image = logo_image.Scale (120 * s , 120 * s);
logo = Sprite (logo_image);
logo.SetX (Window.GetWidth ()  / 2 - logo_image.GetWidth()  / 2);
logo.SetY ((Window.GetHeight() * yPos) - logo_image.GetHeight() / 2);

istatic = Image ("static.png");
istatic = istatic.Scale (istatic.GetWidth() * s * 0.3 ,istatic.GetHeight() * s * 0.3 );
static = Sprite (istatic);
static.SetX (Window.GetWidth ()  / 2 - istatic.GetWidth()  / 2);
static.SetY ((Window.GetHeight() * yPos) - istatic.GetHeight() / 2);

ic1 = Image ("1.png");
ic1 = ic1.Scale (ic1.GetWidth() * s ,ic1.GetHeight() * s );
c1 = Sprite (ic1);
c1.SetX (Window.GetWidth ()  / 2 - ic1.GetWidth()  / 2);
c1.SetY ((Window.GetHeight() * yPos) - ic1.GetHeight() / 2);

ic2 = Image ("2.png");
ic2 = ic2.Scale (ic2.GetWidth() * s ,ic2.GetHeight() * s );
c2 = Sprite (ic2);
c2.SetX (Window.GetWidth ()  / 2 - ic2.GetWidth()  / 2);
c2.SetY ((Window.GetHeight() * yPos) - ic2.GetHeight() / 2);

ic3 = Image ("3.png");
ic3 = ic3.Scale (ic3.GetWidth() * s ,ic3.GetHeight() * s );
c3 = Sprite (ic3);
c3.SetX (Window.GetWidth ()  / 2 - ic3.GetWidth()  / 2);
c3.SetY ((Window.GetHeight() * yPos) - ic3.GetHeight() / 2);

ic4 = Image ("4.png");
ic4 = ic4.Scale (ic4.GetWidth() * s ,ic4.GetHeight() * s );
c4 = Sprite (ic4);
c4.SetX (Window.GetWidth ()  / 2 - ic4.GetWidth()  / 2);
c4.SetY ((Window.GetHeight() * yPos) - ic4.GetHeight() / 2);

ic5 = Image ("5.png");
ic5 = ic5.Scale (ic5.GetWidth() * s ,ic5.GetHeight() * s );
c5 = Sprite (ic5);
c5.SetX (Window.GetWidth ()  / 2 - ic5.GetWidth()  / 2);
c5.SetY ((Window.GetHeight() * yPos) - ic5.GetHeight() / 2);

ic6 = Image ("6.png");
ic6 = ic6.Scale (ic6.GetWidth() * s ,ic6.GetHeight() * s );
c6 = Sprite (ic6);
c6.SetX (Window.GetWidth ()  / 2 - ic6.GetWidth()  / 2);
c6.SetY ((Window.GetHeight() * yPos) - ic6.GetHeight() / 2);

ic7 = Image ("7.png");
ic7 = ic7.Scale (ic7.GetWidth() * s ,ic7.GetHeight() * s );
c7 = Sprite (ic7);
c7.SetX (Window.GetWidth ()  / 2 - ic7.GetWidth()  / 2);
c7.SetY ((Window.GetHeight() * yPos) - ic7.GetHeight() / 2);

ic8 = Image ("8.png");
ic8 = ic8.Scale (ic8.GetWidth() * s ,ic8.GetHeight() * s );
c8 = Sprite (ic8);
c8.SetX (Window.GetWidth ()  / 2 - ic8.GetWidth()  / 2);
c8.SetY ((Window.GetHeight() * yPos) - ic8.GetHeight() / 2);

ic9 = Image ("9.png");
ic9 = ic9.Scale (ic9.GetWidth() * s ,ic9.GetHeight() * s );
c9 = Sprite (ic9);
c9.SetX (Window.GetWidth ()  / 2 - ic9.GetWidth()  / 2);
c9.SetY ((Window.GetHeight() * yPos) - ic9.GetHeight() / 2);

ic10 = Image ("10.png");
ic10 = ic10.Scale (ic10.GetWidth() * s ,ic10.GetHeight() * s );
c10 = Sprite (ic10);
c10.SetX (Window.GetWidth ()  / 2 - ic10.GetWidth()  / 2);
c10.SetY ((Window.GetHeight() * yPos) - ic10.GetHeight() / 2);

t=0;

fun update ()
{
    t++;
    c1.SetImage(ic1.Rotate(t * 0.009));
    c2.SetImage(ic2.Rotate(t * 0.007));
    c3.SetImage(ic3.Rotate(t * 0.006));
    c4.SetImage(ic4.Rotate(t * 0.0053));
    c5.SetImage(ic5.Rotate(t * 0.0048));
    c6.SetImage(ic6.Rotate(t * 0.004));
    c7.SetImage(ic7.Rotate(t * 0.0035));
    c8.SetImage(ic8.Rotate(t * 0.003));
    c9.SetImage(ic9.Rotate(t * 0.0025));
    c10.SetImage(ic10.Rotate(t * 0.002));
}

Plymouth.SetRefreshFunction (update);


#----------------------------------------- Progress Bar --------------------------------
if (Plymouth.GetMode () == "boot")
{
    ipb = Image ("pb.png");
    pb = ipb.Scale (1 , 3);
    pb = Sprite (ipb);
    pb.SetX (Window.GetWidth ()  / 2 - 50);
    pb.SetY ((Window.GetHeight() * (2/3)) - ipb.GetHeight() / 2);

    fun progress_callback (duration, progress)
    {
         pb.SetImage(ipb.Scale ( progress * 100, 3));
    }
    Plymouth.SetBootProgressFunction(progress_callback);
}

# From https://github.com/adi1090x/plymouth-themes
// Screen size
screen.w = Window.GetWidth(0);
screen.h = Window.GetHeight(0);
screen.half.w = Window.GetWidth(0) / 2;
screen.half.h = Window.GetHeight(0) / 2;

// Question prompt
question = null;
answer = null;

// Message
message = null;

// Password prompt
bullets = null;
prompt = null;
bullet.image = Image.Text("*", 1, 1, 1);

// Flow
state.status = "play";
state.time = 0.0;

//------------------------------------- Password prompt -------------------------------
fun DisplayQuestionCallback(prompt, entry) {
    question = null;
    answer = null;

    if (entry == "")
        entry = "<answer>";

    question.image = Image.Text(prompt, 1, 1, 1);
    question.sprite = Sprite(question.image);
    question.sprite.SetX(screen.half.w - question.image.GetWidth() / 2);
    question.sprite.SetY(screen.h - 4 * question.image.GetHeight());

    answer.image = Image.Text(entry, 1, 1, 1);
    answer.sprite = Sprite(answer.image);
    answer.sprite.SetX(screen.half.w - answer.image.GetWidth() / 2);
    answer.sprite.SetY(screen.h - 2 * answer.image.GetHeight());
}
Plymouth.SetDisplayQuestionFunction(DisplayQuestionCallback);

//------------------------------------- Password prompt -------------------------------
fun DisplayPasswordCallback(nil, bulletCount) {
    state.status = "pause";
    totalWidth = bulletCount * bullet.image.GetWidth();
    startPos = screen.half.w - totalWidth / 2;

    prompt.image = Image.Text("Enter Password", 1, 1, 1);
    prompt.sprite = Sprite(prompt.image);
    prompt.sprite.SetX(screen.half.w - prompt.image.GetWidth() / 2);
    prompt.sprite.SetY(screen.h - 4 * prompt.image.GetHeight());

    // Clear all bullets (user might hit backspace)
    bullets = null;
    for (i = 0; i < bulletCount; i++) {
        bullets[i].sprite = Sprite(bullet.image);
        bullets[i].sprite.SetX(startPos + i * bullet.image.GetWidth());
        bullets[i].sprite.SetY(screen.h - 2 * bullet.image.GetHeight());
    }
}
Plymouth.SetDisplayPasswordFunction(DisplayPasswordCallback);

//--------------------------- Normal display (unset all text) ----------------------
fun DisplayNormalCallback() {
    state.status = "play";
    bullets = null;
    prompt = null;
    message = null;
    question = null;
    answer = null;
}
Plymouth.SetDisplayNormalFunction(DisplayNormalCallback);

//----------------------------------------- Message --------------------------------
fun MessageCallback(text) {
    message.image = Image.Text(text, 1, 1, 1);
    message.sprite = Sprite(message.image);
    message.sprite.SetPosition(screen.half.w - message.image.GetWidth() / 2, message.image.GetHeight());
}
Plymouth.SetMessageFunction(MessageCallback);