2024-02-02 22:19:06 -08:00
|
|
|
fn init(state) {
|
2024-02-04 11:45:49 -08:00
|
|
|
|
2024-02-05 10:12:15 -08:00
|
|
|
conf::show_starfield(true);
|
|
|
|
conf::show_phys(false);
|
2024-02-04 11:45:49 -08:00
|
|
|
|
2024-02-05 10:12:15 -08:00
|
|
|
sprite::add(
|
2024-02-02 22:19:06 -08:00
|
|
|
"se_box",
|
|
|
|
"ui::outfitterbox",
|
|
|
|
Rect(
|
|
|
|
-1.0, -1.0, 202.345, 133.409,
|
2024-02-04 11:45:49 -08:00
|
|
|
Anchor::SouthWest,
|
|
|
|
Anchor::SouthWest
|
2024-02-02 22:19:06 -08:00
|
|
|
)
|
|
|
|
);
|
|
|
|
|
2024-02-05 10:12:15 -08:00
|
|
|
textbox::add(
|
2024-02-03 16:45:47 -08:00
|
|
|
"exit_text", 10.0, 10.0,
|
2024-02-02 22:19:06 -08:00
|
|
|
Rect(
|
|
|
|
122.71, 48.0, 51.0, 12.0,
|
2024-02-04 11:45:49 -08:00
|
|
|
Anchor::NorthWest,
|
|
|
|
Anchor::SouthWest
|
2024-02-03 16:21:21 -08:00
|
|
|
),
|
|
|
|
Color(1.0, 1.0, 1.0, 1.0)
|
2024-02-02 22:19:06 -08:00
|
|
|
);
|
2024-02-05 10:12:15 -08:00
|
|
|
textbox::font_serif("exit_text");
|
|
|
|
textbox::align_center("exit_text");
|
|
|
|
textbox::set_text("exit_text", "Exit");
|
2024-02-02 22:19:06 -08:00
|
|
|
|
2024-02-05 10:12:15 -08:00
|
|
|
sprite::add(
|
2024-02-02 22:19:06 -08:00
|
|
|
"exit_button",
|
|
|
|
"ui::button",
|
|
|
|
Rect(
|
|
|
|
113.35, 52.0, 69.8, 18.924,
|
2024-02-04 11:45:49 -08:00
|
|
|
Anchor::NorthWest,
|
|
|
|
Anchor::SouthWest
|
2024-02-02 22:19:06 -08:00
|
|
|
)
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-02-05 10:12:15 -08:00
|
|
|
sprite::add(
|
2024-02-02 22:19:06 -08:00
|
|
|
"ship_bg",
|
|
|
|
"ui::outfitter-ship-bg",
|
|
|
|
Rect(
|
|
|
|
16.0, -16.0, 190.0, 353.0,
|
2024-02-04 11:45:49 -08:00
|
|
|
Anchor::NorthWest,
|
|
|
|
Anchor::NorthWest
|
2024-02-02 22:19:06 -08:00
|
|
|
)
|
|
|
|
);
|
|
|
|
|
2024-02-05 10:12:15 -08:00
|
|
|
sprite::add(
|
2024-02-02 22:19:06 -08:00
|
|
|
"ship_thumb",
|
|
|
|
"icon::gypsum",
|
|
|
|
Rect(
|
|
|
|
111.0, -95.45, 90.0, 90.0,
|
2024-02-04 11:45:49 -08:00
|
|
|
Anchor::Center,
|
|
|
|
Anchor::NorthWest
|
2024-02-02 22:19:06 -08:00
|
|
|
)
|
|
|
|
);
|
2024-02-05 14:11:47 -08:00
|
|
|
sprite::preserve_aspect("ship_thumb", true);
|
2024-02-02 22:19:06 -08:00
|
|
|
|
2024-02-05 10:12:15 -08:00
|
|
|
textbox::add(
|
2024-02-03 16:45:47 -08:00
|
|
|
"ship_name", 10.0, 10.0,
|
2024-02-02 22:19:06 -08:00
|
|
|
Rect(
|
|
|
|
111.0, -167.27, 145.0, 10.0,
|
2024-02-04 11:45:49 -08:00
|
|
|
Anchor::Center,
|
|
|
|
Anchor::NorthWest
|
2024-02-03 16:21:21 -08:00
|
|
|
),
|
|
|
|
Color(1.0, 1.0, 1.0, 1.0)
|
2024-02-02 22:19:06 -08:00
|
|
|
);
|
2024-02-05 10:12:15 -08:00
|
|
|
textbox::font_serif("ship_name");
|
|
|
|
textbox::align_center("ship_name");
|
|
|
|
textbox::set_text("ship_name", "Hyperion");
|
2024-02-02 22:19:06 -08:00
|
|
|
|
2024-02-05 10:12:15 -08:00
|
|
|
textbox::add(
|
2024-02-03 16:45:47 -08:00
|
|
|
"ship_type", 7.0, 8.5,
|
2024-02-02 22:19:06 -08:00
|
|
|
Rect(
|
|
|
|
111.0, -178.0, 145.0, 8.5,
|
2024-02-04 11:45:49 -08:00
|
|
|
Anchor::Center,
|
|
|
|
Anchor::NorthWest
|
2024-02-03 16:21:21 -08:00
|
|
|
),
|
|
|
|
Color(0.7, 0.7, 0.7, 1.0)
|
2024-02-02 22:19:06 -08:00
|
|
|
);
|
2024-02-05 10:12:15 -08:00
|
|
|
textbox::font_sans("ship_type");
|
|
|
|
textbox::align_center("ship_type");
|
2024-02-03 16:06:11 -08:00
|
|
|
if state.player_ship().is_some() {
|
2024-02-05 18:29:05 -08:00
|
|
|
textbox::set_text("ship_type", state.player_ship().display_name());
|
2024-02-03 16:06:11 -08:00
|
|
|
}
|
2024-02-02 22:19:06 -08:00
|
|
|
|
2024-02-04 11:45:49 -08:00
|
|
|
|
2024-02-05 10:12:15 -08:00
|
|
|
textbox::add(
|
2024-02-03 16:45:47 -08:00
|
|
|
"ship_stats", 7.0, 8.5,
|
2024-02-02 22:19:06 -08:00
|
|
|
Rect(
|
|
|
|
38.526, -192.332, 144.948, 154.5,
|
2024-02-04 11:45:49 -08:00
|
|
|
Anchor::NorthWest,
|
|
|
|
Anchor::NorthWest,
|
2024-02-03 16:21:21 -08:00
|
|
|
),
|
|
|
|
Color(1.0, 1.0, 1.0, 1.0)
|
2024-02-02 22:19:06 -08:00
|
|
|
);
|
2024-02-05 10:12:15 -08:00
|
|
|
textbox::font_mono("ship_stats");
|
|
|
|
textbox::set_text("ship_stats", "Earth");
|
2024-02-02 22:19:06 -08:00
|
|
|
|
|
|
|
|
2024-02-05 10:12:15 -08:00
|
|
|
sprite::add(
|
2024-02-02 22:19:06 -08:00
|
|
|
"outfit_bg",
|
|
|
|
"ui::outfitter-outfit-bg",
|
|
|
|
Rect(
|
|
|
|
-16.0, -16.0, 300.0, 480.0,
|
2024-02-04 11:45:49 -08:00
|
|
|
Anchor::NorthEast,
|
|
|
|
Anchor::NorthEast
|
2024-02-02 22:19:06 -08:00
|
|
|
)
|
|
|
|
);
|
|
|
|
|
2024-02-05 10:12:15 -08:00
|
|
|
sprite::add(
|
2024-02-02 22:19:06 -08:00
|
|
|
"outfit_thumb",
|
|
|
|
"icon::engine",
|
|
|
|
Rect(
|
|
|
|
-166.0, -109.0, 90.0, 90.0,
|
2024-02-04 11:45:49 -08:00
|
|
|
Anchor::Center,
|
|
|
|
Anchor::NorthEast
|
2024-02-02 22:19:06 -08:00
|
|
|
)
|
|
|
|
);
|
2024-02-05 14:11:47 -08:00
|
|
|
sprite::preserve_aspect("outfit_thumb", true);
|
|
|
|
|
2024-02-02 22:19:06 -08:00
|
|
|
|
2024-02-05 10:12:15 -08:00
|
|
|
textbox::add(
|
2024-02-03 16:45:47 -08:00
|
|
|
"outfit_name", 16.0, 16.0,
|
2024-02-02 22:19:06 -08:00
|
|
|
Rect(
|
|
|
|
-312.0, -20.0, 200.0, 16.0,
|
2024-02-04 11:45:49 -08:00
|
|
|
Anchor::NorthWest,
|
|
|
|
Anchor::NorthEast,
|
2024-02-03 16:21:21 -08:00
|
|
|
),
|
|
|
|
Color(1.0, 1.0, 1.0, 1.0)
|
2024-02-02 22:19:06 -08:00
|
|
|
);
|
2024-02-05 10:12:15 -08:00
|
|
|
textbox::font_serif("outfit_name");
|
|
|
|
textbox::weight_bold("outfit_name");
|
|
|
|
textbox::set_text("outfit_name", "Earth");
|
2024-02-02 22:19:06 -08:00
|
|
|
|
2024-02-05 10:12:15 -08:00
|
|
|
textbox::add(
|
2024-02-03 16:45:47 -08:00
|
|
|
"outfit_desc", 7.0, 8.5,
|
2024-02-02 22:19:06 -08:00
|
|
|
Rect(
|
|
|
|
-166.0, -219.0, 260.0, 78.0,
|
2024-02-04 11:45:49 -08:00
|
|
|
Anchor::Center,
|
|
|
|
Anchor::NorthEast,
|
2024-02-03 16:21:21 -08:00
|
|
|
),
|
|
|
|
Color(1.0, 1.0, 1.0, 1.0)
|
2024-02-02 22:19:06 -08:00
|
|
|
);
|
2024-02-05 10:12:15 -08:00
|
|
|
textbox::font_serif("outfit_desc");
|
|
|
|
textbox::set_text("outfit_desc", "Earth");
|
2024-02-02 22:19:06 -08:00
|
|
|
|
2024-02-04 11:45:49 -08:00
|
|
|
|
2024-02-05 10:12:15 -08:00
|
|
|
textbox::add(
|
2024-02-03 16:45:47 -08:00
|
|
|
"outfit_stats", 7.0, 8.5,
|
2024-02-02 22:19:06 -08:00
|
|
|
Rect(
|
|
|
|
-295.0, -271.0, 164.0, 216.0,
|
2024-02-04 11:45:49 -08:00
|
|
|
Anchor::NorthWest,
|
|
|
|
Anchor::NorthEast,
|
2024-02-03 16:21:21 -08:00
|
|
|
),
|
|
|
|
Color(1.0, 1.0, 1.0, 1.0)
|
2024-02-02 22:19:06 -08:00
|
|
|
);
|
2024-02-05 10:12:15 -08:00
|
|
|
textbox::font_mono("outfit_stats");
|
|
|
|
textbox::set_text("outfit_stats", "Earth");
|
2024-02-04 11:45:49 -08:00
|
|
|
|
2024-02-07 15:58:48 -08:00
|
|
|
|
|
|
|
// width should be calculated as a fraction of screen width
|
|
|
|
let scrollbox_rect = Rect(
|
|
|
|
222.0, -16.0, 470.0, 480.0,
|
|
|
|
Anchor::NorthWest,
|
|
|
|
Anchor::NorthWest,
|
|
|
|
);
|
|
|
|
|
|
|
|
scrollbox::add("outfit_list", scrollbox_rect);
|
|
|
|
|
2024-02-08 20:41:04 -08:00
|
|
|
let selected_outfit = false;
|
|
|
|
|
|
|
|
{
|
|
|
|
// p cannot be saved in the global scope.
|
|
|
|
let p = state.player_ship();
|
|
|
|
if p.is_landed() {
|
|
|
|
let s = "";
|
|
|
|
let x = scrollbox_rect.pos().x() + 45.0;
|
|
|
|
let y = scrollbox_rect.pos().y() - 45.0;
|
|
|
|
for xxx in ["1","2","3"] {
|
|
|
|
for i in p.landed_on().outfitter() {
|
|
|
|
s = s + i.display_name() + "\n";
|
|
|
|
|
|
|
|
let thumb_name = "outfit.thumb." + i.index() + xxx;
|
|
|
|
let backg_name = "outfit.backg." + i.index() + xxx;
|
|
|
|
let title_name = "outfit.title." + i.index() + xxx;
|
|
|
|
|
|
|
|
sprite::add(
|
|
|
|
backg_name,
|
|
|
|
"ui::outfitbg",
|
|
|
|
Rect(
|
|
|
|
x, y, 90.0, 90.0,
|
|
|
|
Anchor::Center,
|
|
|
|
Anchor::NorthWest
|
|
|
|
)
|
|
|
|
);
|
|
|
|
sprite::preserve_aspect(backg_name, true);
|
|
|
|
scrollbox::add_element("outfit_list", backg_name);
|
|
|
|
|
|
|
|
sprite::add(
|
|
|
|
thumb_name,
|
|
|
|
i.thumbnail(),
|
|
|
|
Rect(
|
|
|
|
x, y, 75.0, 75.0,
|
|
|
|
Anchor::Center,
|
|
|
|
Anchor::NorthWest
|
|
|
|
)
|
|
|
|
);
|
|
|
|
sprite::preserve_aspect(thumb_name, true);
|
|
|
|
scrollbox::add_element("outfit_list", thumb_name);
|
|
|
|
|
|
|
|
textbox::add(
|
|
|
|
title_name,
|
|
|
|
10.0, 10.0,
|
|
|
|
Rect(
|
|
|
|
x, y - 50.0, 90.0, 10.0,
|
|
|
|
Anchor::Center,
|
|
|
|
Anchor::NorthWest,
|
|
|
|
),
|
|
|
|
Color(1.0, 1.0, 1.0, 1.0)
|
|
|
|
);
|
|
|
|
textbox::font_sans(title_name);
|
|
|
|
textbox::align_center(title_name);
|
|
|
|
textbox::set_text(title_name, i.display_name());
|
|
|
|
scrollbox::add_element("outfit_list", title_name);
|
|
|
|
|
|
|
|
x = x + 120.0;
|
|
|
|
if x > (
|
|
|
|
scrollbox_rect.pos().x() + scrollbox_rect.dim().x() - 45.0
|
|
|
|
) {
|
|
|
|
x = scrollbox_rect.pos().x() + 45.0;
|
|
|
|
y = y - 120.0;
|
|
|
|
}
|
2024-02-07 15:58:48 -08:00
|
|
|
}
|
2024-02-08 20:41:04 -08:00
|
|
|
}
|
|
|
|
textbox::set_text("outfit_stats", s);
|
2024-02-07 15:58:48 -08:00
|
|
|
}
|
|
|
|
}
|
2024-02-02 22:19:06 -08:00
|
|
|
}
|
|
|
|
|
2024-02-03 11:24:17 -08:00
|
|
|
|
|
|
|
fn event(state, event) {
|
|
|
|
if type_of(event) == "MouseHoverEvent" {
|
|
|
|
let element = event.element();
|
2024-02-04 11:45:49 -08:00
|
|
|
if element == "exit_button" {
|
2024-02-03 11:24:17 -08:00
|
|
|
if event.is_enter() {
|
2024-02-07 15:58:48 -08:00
|
|
|
sprite::jump_to("exit_button", "on:top", 0.1);
|
2024-02-03 11:24:17 -08:00
|
|
|
} else {
|
2024-02-07 15:58:48 -08:00
|
|
|
sprite::jump_to("exit_button", "off:top", 0.1);
|
2024-02-03 11:24:17 -08:00
|
|
|
}
|
2024-02-02 22:19:06 -08:00
|
|
|
}
|
2024-02-08 20:41:04 -08:00
|
|
|
|
|
|
|
if element.starts_with("outfit.backg.") && element != selected_outfit {
|
|
|
|
if event.is_enter() {
|
|
|
|
sprite::jump_to(element, "hover:top", 0.1);
|
|
|
|
} else {
|
|
|
|
sprite::jump_to(element, "off:top", 0.1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return PlayerDirective::None;
|
2024-02-02 22:19:06 -08:00
|
|
|
}
|
2024-02-03 11:24:17 -08:00
|
|
|
|
2024-02-08 20:41:04 -08:00
|
|
|
|
|
|
|
// TODO: this occasionally breaks because of sprite ordering.
|
|
|
|
// Clicks go to se_box instead!
|
2024-02-03 11:24:17 -08:00
|
|
|
if type_of(event) == "MouseClickEvent" {
|
|
|
|
if !event.is_down() {
|
2024-02-08 20:41:04 -08:00
|
|
|
return PlayerDirective::None;
|
2024-02-03 11:24:17 -08:00
|
|
|
}
|
2024-02-08 20:41:04 -08:00
|
|
|
|
|
|
|
print(event.element());
|
|
|
|
|
2024-02-03 11:24:17 -08:00
|
|
|
|
|
|
|
let element = event.element();
|
2024-02-04 11:45:49 -08:00
|
|
|
if element == "exit_button" {
|
2024-02-05 10:12:15 -08:00
|
|
|
ui::go_to_scene("landed");
|
2024-02-08 20:41:04 -08:00
|
|
|
return PlayerDirective::None;
|
|
|
|
}
|
|
|
|
|
|
|
|
if element.starts_with("outfit.backg.") && element != selected_outfit {
|
|
|
|
if selected_outfit != false {
|
|
|
|
sprite::jump_to(selected_outfit, "off:top", 0.1);
|
|
|
|
}
|
|
|
|
sprite::jump_to(element, "selected:top", 0.1);
|
|
|
|
selected_outfit = element;
|
|
|
|
return PlayerDirective::None;
|
2024-02-03 11:24:17 -08:00
|
|
|
}
|
2024-02-08 20:41:04 -08:00
|
|
|
|
2024-02-03 11:24:17 -08:00
|
|
|
return;
|
2024-02-02 22:19:06 -08:00
|
|
|
}
|
|
|
|
|
2024-02-03 11:24:17 -08:00
|
|
|
if type_of(event) == "PlayerShipStateEvent" {
|
|
|
|
if !state.player_ship().is_landed() {
|
2024-02-05 10:12:15 -08:00
|
|
|
ui::go_to_scene("flying");
|
2024-02-03 11:24:17 -08:00
|
|
|
}
|
2024-02-08 20:41:04 -08:00
|
|
|
return PlayerDirective::None;
|
2024-02-02 22:19:06 -08:00
|
|
|
}
|
|
|
|
}
|