eos_theme_plymouth/eos/eos.script

384 lines
12 KiB
Plaintext
Raw Normal View History

2024-08-30 08:01:17 +02:00
# ------------------[ Persona Plymouth circle ]-----------------
# -------------------------[version 2.5]------------------------
# ------------[ Created by M. Syarief Hidayatulloh ]------------
# ------------------[ me.msyariefh@gmail.com ]------------------
# --[ Not for Commercial use, except with my permission !!!! ]--
# ------------------------[ Terimakasih ]-----------------------
#====================[Thanks to]====================#
# Allah SWT
# https://codepen.io/feebaa/pen/PPrLQP (Fernando de Almeida Faria ) for cirle bootloader idea
# All my friend in Real world and in social media
#===================================================#
# ====================[ Constant here !!!!! ]==================== #
maximum_msg = 5;
ubuntufont = "Ubuntu Light 18";
perfont = "Ubuntu Light 20";
progressfont = "Ubuntu 15";
hi_text = "DECHIFFRE";
bye_text = "FERMETURE";
progress_t= 0;
fun_curve_linear = 0;
fun_curve_in = 1;
fun_curve_out = 2;
fun_curve_in_out = 3;
radiant_factor = Math.Pi / 180;
math_pi2 = Math.Pi / 2;
dots = 5;
show_progress = 0;
fade_out_dots = 1;
fps = 13;
anim_duration = 16087;
anim_frames = anim_duration / 1000 * fps;
# ====================[ End of Constant ]==================== #
# ====================[ Scale Desktop begin ]==================== #
bg_image = Image("eos_background.png");
window_max_width = Window.GetX() * 2 + Window.GetWidth();
window_max_height = Window.GetY() * 2 + Window.GetHeight();
screen_ratio = window_max_width / window_max_height;
bg_image_ratio = bg_image.GetWidth() / bg_image.GetHeight();
if (screen_ratio > bg_image_ratio)
bg_scale_factor = window_max_width / bg_image.GetWidth();
else
bg_scale_factor = window_max_height / bg_image.GetHeight();
scaled_bg_image = bg_image.Scale(bg_image.GetWidth() * bg_scale_factor,
bg_image.GetHeight() * bg_scale_factor);
bg_sprite = Sprite(scaled_bg_image);
bg_sprite.SetPosition(Window.GetX() + Window.GetWidth() / 2 - scaled_bg_image.GetWidth() / 2,
Window.GetY() + Window.GetHeight() / 2 - scaled_bg_image.GetHeight() / 2,
-10000);
# ====================[ Scale Desktop end ]==================== #
# ====================[ Pre_start begin ]==================== #
// percentage
percent_00 = 0;
percent_07 = Math.Int( 7 / 100 * anim_frames);
percent_30 = Math.Int(30 / 100 * anim_frames);
percent_39 = Math.Int(39 / 100 * anim_frames);
percent_70 = Math.Int(70 / 100 * anim_frames);
percent_75 = Math.Int(75 / 100 * anim_frames);
percent_76 = Math.Int(76 / 100 * anim_frames);
percent_100 = anim_frames;
// angle
angle_225 = 225 * radiant_factor - math_pi2;
angle_345 = 345 * radiant_factor - math_pi2;
angle_455 = 455 * radiant_factor - math_pi2;
angle_690 = 690 * radiant_factor - math_pi2;
angle_815 = 815 * radiant_factor - math_pi2;
angle_945 = 945 * radiant_factor - math_pi2;
// curve
fun curve (value, functype, input_from, input_to, output_from, output_to)
{
input_range = input_to - input_from;
output_range = output_to - output_from;
linear_value = (value - input_from) / input_range;
if (functype == fun_curve_linear) {
return output_from + linear_value * output_range;
} else if (functype == fun_curve_out) {
return output_from + Math.Sin(linear_value * math_pi2) * output_range;
} else if (functype == fun_curve_in) {
return output_from + (1 - Math.Sin(math_pi2 + linear_value * math_pi2)) * output_range;
} else if (functype == fun_curve_in_out) {
return output_from + (1 - Math.Sin(math_pi2 + linear_value * Math.Pi)) / 2 * output_range;
} else {
return 0;
}
}
// dots
dot_image = Image("dot.png");
for (i = 0; i < dots; i++)
{
dot[i].sprite = Sprite(dot_image);
dot[i].sprite.SetOpacity(0.0);
dot[i].sprite.SetZ(0);
}
dot_gap = Math.Int(fps - 1);
progress = 0.0;
center_x = Window.GetX() + Window.GetWidth() / 2;
center_y = Window.GetHeight() * 0.85;
radius = Math.Max(15, Math.Int(Window.GetHeight() * 25 / 1080)); // adapt to screen height (better than width)
opacity = 0;
angle = 0;
frame = 0;
loop_count = 0;
// x, y, opacity values
computed_x[0] = 0;
computed_y[0] = 0;
computed_o[0] = 0;
for (f = 0; f < anim_frames; f++)
{
if (f < percent_07)
{
angle = curve(f, fun_curve_out, percent_00, percent_07, angle_225, angle_345);
if (fade_out_dots)
{
opacity = curve(f, fun_curve_out, percent_00, percent_07, 0, 1);
}
else
{
opacity = 1;
}
}
else if (f < percent_30)
{
angle = curve(f, fun_curve_linear, percent_07, percent_30, angle_345, angle_455);
opacity = 1;
}
else if (f < percent_39)
{
angle = curve(f, fun_curve_in_out, percent_30, percent_39, angle_455, angle_690);
opacity = 1;
}
else if (f <= percent_70)
{
angle = curve(f, fun_curve_linear, percent_39, percent_70, angle_690, angle_815);
opacity = 1;
}
else if (f <= percent_75)
{
angle = curve(f, fun_curve_out, percent_70, percent_75, angle_815, angle_945);
if (fade_out_dots)
{
opacity = curve(f, fun_curve_out, percent_70, percent_75, 1, 0);
}
else
{
opacity = 1;
}
}
else if (f <= percent_76)
{
angle = angle_945;
opacity = 0;
}
else if (f <= percent_100)
{
angle = angle_945;
opacity = 0;
}
computed_x[f] = center_x + radius * Math.Sin(angle);
computed_y[f] = center_y - radius * Math.Cos(angle);
computed_o[f] = opacity;
}
# ====================[ Pre_start end ]==================== #
# ====================[ fun_refresh start ]==================== #
fun refresh ()
{
inc = progress;
if ((loop_count == 0) && (frame < percent_30))
new_logo.sprite.SetOpacity(Math.Clamp(frame / percent_30, 0, 1));
if (inc < 0.80)
{
for (i = 0; i < dots; i++)
{
f = Math.Min(Math.Max(0, frame - i * dot_gap), anim_frames);
dot[i].sprite.SetX(computed_x[f]);
dot[i].sprite.SetY(computed_y[f]);
dot[i].sprite.SetOpacity(computed_o[f]);
}
}
else
{
opacity = curve(inc, fun_curve_linear, 0.8, 1.0, 1.0, 0.0);
for (i = 0; i < dots; i++)
{
f = Math.Min(Math.Max(0, frame - i * dot_gap), anim_frames);
dot[i].sprite.SetX(computed_x[f]);
dot[i].sprite.SetY(computed_y[f]);
dot[i].sprite.SetOpacity(computed_o[f] * opacity);
}
new_logo.sprite.SetOpacity(opacity);
}
if (frame >= anim_frames)
{
loop_count++;
frame = 0;
} else
{
frame++;
}
}
Plymouth.SetRefreshFunction(refresh);
# ====================[ fun_refresh end ]==================== #
# ====================[ Text_center begin ]==================== #
per.image = Image.Text ("",255,255,255,1, perfont);
per.sprite = Sprite(per.image);
per.x = Window.GetX() + Window.GetWidth() / 2 - per.image.GetWidth() / 2;
per.y = Window.GetY() + Window.GetHeight() * 0.45 - per.image.GetHeight() / 2;
per.sprite.SetPosition(per.x, per.y, 2);
if (Plymouth.GetMode () == "boot")
{
text.image = Image.Text (hi_text,255,255,255,1, ubuntufont);
text.sprite = Sprite(text.image);
text.x = Window.GetX() + Window.GetWidth() / 2 - text.image.GetWidth() / 2;
text.y = Window.GetY() + Window.GetHeight() * 0.77 - text.image.GetHeight() / 2;
text.sprite.SetPosition(text.x, text.y, 2);
}
else
{
text_end.image = Image.Text(bye_text,255,255,255,1, ubuntufont);
text_end.sprite = Sprite(text_end.image);
text_end.x = Window.GetX() + Window.GetWidth() / 2 - text_end.image.GetWidth() / 2;
text_end.y = Window.GetY() + Window.GetHeight() * 0.77 - text_end.image.GetHeight() / 2;
text_end.sprite.SetPosition(text_end.x, text_end.y, 2);
}
# ====================[ Text_center end ]==================== #
# ====================[ persona Logo begin ]==================== #
new_logo.image = Image("eos.png");
new_logo.sprite = Sprite();
new_logo.x = Window.GetX() + Window.GetWidth() / 2 - new_logo.image.GetWidth() / 2;
new_logo.y = Window.GetHeight() * 0.35 - new_logo.image.GetHeight() / 2;
new_logo.sprite.SetPosition(new_logo.x, new_logo.y, 10);
new_logo.sprite.SetImage(new_logo.image);
# ====================[ Persona Logo end ]==================== #
# ====================[ Dialog_script begin ]==================== #
status = "normal";
fun dialog_setup()
{
local.box;
local.lock;
local.entry;
box.image = Image("box.png");
lock.image = Image("lock.png");
entry.image = Image("entry.png");
box.sprite = Sprite(box.image);
box.x = Window.GetX() + Window.GetWidth() / 2 - box.image.GetWidth ()/2;
box.y = Window.GetY() + Window.GetHeight() / 2 - box.image.GetHeight()/2;
box.z = 10000;
box.sprite.SetPosition(box.x, box.y, box.z);
lock.sprite = Sprite(lock.image);
lock.x = box.x + box.image.GetWidth()/2 - (lock.image.GetWidth() + entry.image.GetWidth()) / 2;
lock.y = box.y + box.image.GetHeight()/2 - lock.image.GetHeight()/2;
lock.z = box.z + 1;
lock.sprite.SetPosition(lock.x, lock.y, lock.z);
entry.sprite = Sprite(entry.image);
entry.x = lock.x + lock.image.GetWidth();
entry.y = box.y + box.image.GetHeight()/2 - entry.image.GetHeight()/2;
entry.z = box.z + 1;
entry.sprite.SetPosition(entry.x, entry.y, entry.z);
global.dialog.box = box;
global.dialog.lock = lock;
global.dialog.entry = entry;
global.dialog.bullet_image = Image("bullet.png");
dialog_opacity (1);
}
fun dialog_opacity(opacity)
{
dialog.box.sprite.SetOpacity (opacity);
dialog.lock.sprite.SetOpacity (opacity);
dialog.entry.sprite.SetOpacity (opacity);
for (index = 0; dialog.bullet[index]; index++)
{
dialog.bullet[index].sprite.SetOpacity(opacity);
}
}
fun display_normal_callback ()
{
global.status = "normal";
if (global.dialog)
dialog_opacity (0);
}
fun display_password_callback (prompt, bullets)
{
global.status = "password";
if (!global.dialog)
dialog_setup();
else
dialog_opacity(1);
for (index = 0; dialog.bullet[index] || index < bullets; index++)
{
if (!dialog.bullet[index])
{
dialog.bullet[index].sprite = Sprite(dialog.bullet_image);
dialog.bullet[index].x = dialog.entry.x + index * dialog.bullet_image.GetWidth();
dialog.bullet[index].y = dialog.entry.y + dialog.entry.image.GetHeight() / 2 - dialog.bullet_image.GetHeight() / 2;
dialog.bullet[index].z = dialog.entry.z + 1;
dialog.bullet[index].sprite.SetPosition(dialog.bullet[index].x, dialog.bullet[index].y, dialog.bullet[index].z);
}
if (index < bullets)
dialog.bullet[index].sprite.SetOpacity(1);
else
dialog.bullet[index].sprite.SetOpacity(0);
}
}
Plymouth.SetDisplayNormalFunction(display_normal_callback);
Plymouth.SetDisplayPasswordFunction(display_password_callback);
# ====================[ Dialog_script end ]==================== #
# ====================[ Fun Quit begin ]==================== #
fun quit_callback ()
{
}
Plymouth.SetQuitFunction(quit_callback);
# ====================[ Fun Quit end ]==================== #
# ====================[ Message begin ]==================== #
msg_sprites;
num_displayed_msg = 0;
next_msg_idx = 0;
next_msg_y;
fun message_callback (text)
{
if (num_displayed_msg < maximum_msg)
{
next_msg_y = 10;
for (i = 0; i < num_displayed_msg; i++)
next_msg_y += msg_sprites[i].GetImage().GetHeight() + 1;
num_displayed_msg++;
}
else
{
move_y_by = -1 - msg_sprites[(next_msg_idx + 1) % maximum_msg].GetImage().GetHeight();
for (i = 0; i < maximum_msg; i++)
{
msg = msg_sprites[(next_msg_idx + 1 + i) % maximum_msg];
msg.SetY(msg.GetY() + move_y_by);
}
}
next_msg_image = Image.Text(text, 1, 1, 1, 1);
msg_sprites[next_msg_idx] = Sprite();
msg_sprites[next_msg_idx].SetPosition(Window.GetX() + 10, Window.GetY() + next_msg_y, 10000);
msg_sprites[next_msg_idx].SetImage(next_msg_image);
next_msg_idx = (next_msg_idx + 1) % maximum_msg;
}
Plymouth.SetMessageFunction(message_callback);
# ====================[ Message end ]==================== #