Added more ui scenes

master
Mark 2024-02-02 22:19:06 -08:00
parent 5f5e153da5
commit e3fd358e80
Signed by: Mark
GPG Key ID: C6D63995FE72FD80
5 changed files with 220 additions and 6 deletions

View File

@ -40,3 +40,5 @@ zoom_max = 2000.0
# TODO: move to user config file # TODO: move to user config file
ui_scale = 2 ui_scale = 2
ui_landed_scene = "landed.rhai" ui_landed_scene = "landed.rhai"
ui_flying_scene = "flying.rhai"
ui_outfitter_scene = "outfitter.rhai"

3
content/flying.rhai Normal file
View File

@ -0,0 +1,3 @@
fn init(state) { return []; }
fn hover(element, hover_state) {}
fn click(element, click_state) {}

View File

@ -60,8 +60,12 @@ fn hover(element, hover_state) {
} }
} }
//fn click(scene, name) { fn click(element, click_state) {
// if name = "button" { if !click_state {
// return SceneAction::Outfitter(); return SceneAction::None;
// } }
//}
if element.has_name("button") {
return SceneAction::SceneOutfitter;
}
}

187
content/outfitter.rhai Normal file
View File

@ -0,0 +1,187 @@
fn init(state) {
let se_box = SpriteBuilder(
"se_box",
"ui::outfitterbox",
Rect(
-1.0, -1.0, 202.345, 133.409,
SpriteAnchor::SouthWest,
SpriteAnchor::SouthWest
)
);
let exit_text = TextBoxBuilder(
"exit_text",
10.0, 10.0, TextBoxFont::Serif, TextBoxJustify::Center,
Rect(
122.71, 48.0, 51.0, 12.0,
SpriteAnchor::NorthWest,
SpriteAnchor::SouthWest
)
);
exit_text.set_text(state.planet_name);
let exit_button = SpriteBuilder(
"exit_button",
"ui::button",
Rect(
113.35, 52.0, 69.8, 18.924,
SpriteAnchor::NorthWest,
SpriteAnchor::SouthWest
)
);
let ship_bg = SpriteBuilder(
"ship_bg",
"ui::outfitter-ship-bg",
Rect(
16.0, -16.0, 190.0, 353.0,
SpriteAnchor::NorthWest,
SpriteAnchor::NorthWest
)
);
let ship_thumb = SpriteBuilder(
"ship_thumb",
"icon::gypsum",
Rect(
111.0, -95.45, 90.0, 90.0,
SpriteAnchor::Center,
SpriteAnchor::NorthWest
)
);
let ship_name = TextBoxBuilder(
"ship_name",
10.0, 10.0, TextBoxFont::Serif, TextBoxJustify::Center,
Rect(
111.0, -167.27, 145.0, 10.0,
SpriteAnchor::Center,
SpriteAnchor::NorthWest
)
);
ship_name.set_text(state.planet_name);
let ship_type = TextBoxBuilder(
"ship_type",
7.0, 8.5, TextBoxFont::SansSerif, TextBoxJustify::Center,
Rect(
111.0, -178.0, 145.0, 8.5,
SpriteAnchor::Center,
SpriteAnchor::NorthWest
)
);
ship_type.set_text(state.planet_name);
let ship_stats = TextBoxBuilder(
"ship_stats",
7.0, 8.5, TextBoxFont::Monospace, TextBoxJustify::Left,
Rect(
38.526, -192.332, 144.948, 154.5,
SpriteAnchor::NorthWest,
SpriteAnchor::NorthWest,
)
);
ship_stats.set_text(state.planet_name);
let outfit_bg = SpriteBuilder(
"outfit_bg",
"ui::outfitter-outfit-bg",
Rect(
-16.0, -16.0, 300.0, 480.0,
SpriteAnchor::NorthEast,
SpriteAnchor::NorthEast
)
);
let outfit_thumb = SpriteBuilder(
"outfit_thumb",
"icon::engine",
Rect(
-166.0, -109.0, 90.0, 90.0,
SpriteAnchor::Center,
SpriteAnchor::NorthEast
)
);
let outfit_name = TextBoxBuilder(
"outfit_name",
16.0, 16.0, TextBoxFont::Serif, TextBoxJustify::Left,
Rect(
-312.0, -20.0, 200.0, 16.0,
SpriteAnchor::NorthWest,
SpriteAnchor::NorthEast,
)
);
outfit_name.set_text(state.planet_name);
let outfit_desc = TextBoxBuilder(
"outfit_desc",
7.0, 8.5, TextBoxFont::SansSerif, TextBoxJustify::Left,
Rect(
-166.0, -219.0, 260.0, 78.0,
SpriteAnchor::Center,
SpriteAnchor::NorthEast,
)
);
outfit_desc.set_text(state.planet_name);
let outfit_stats = TextBoxBuilder(
"outfit_stats",
7.0, 8.5, TextBoxFont::Monospace, TextBoxJustify::Left,
Rect(
-295.0, -271.0, 164.0, 216.0,
SpriteAnchor::NorthWest,
SpriteAnchor::NorthEast,
)
);
outfit_stats.set_text(state.planet_name);
return [
ship_bg,
ship_thumb,
ship_name,
ship_type,
ship_stats,
outfit_bg,
outfit_thumb,
outfit_name,
outfit_desc,
outfit_stats,
se_box,
exit_button,
exit_text
];
}
fn hover(element, hover_state) {
if element.has_name("exit_button") {
if hover_state {
element.take_edge("on:top", 0.1);
} else {
element.take_edge("off:top", 0.1);
}
}
}
fn click(element, click_state) {
if !click_state {
return SceneAction::None;
}
if element.has_name("exit_button") {
return SceneAction::SceneLanded;
}
}

View File

@ -20,7 +20,9 @@ pub(crate) mod syntax {
pub zoom_min: f32, pub zoom_min: f32,
pub zoom_max: f32, pub zoom_max: f32,
pub ui_scale: f32, pub ui_scale: f32,
pub ui_flying_scene: PathBuf,
pub ui_landed_scene: PathBuf, pub ui_landed_scene: PathBuf,
pub ui_outfitter_scene: PathBuf,
} }
impl Config { impl Config {
@ -61,6 +63,14 @@ pub(crate) mod syntax {
.compile_file(content_root.join(self.ui_landed_scene)) .compile_file(content_root.join(self.ui_landed_scene))
.with_context(|| format!("while loading `landed` scene")) .with_context(|| format!("while loading `landed` scene"))
.with_context(|| format!("while loading config"))?; .with_context(|| format!("while loading config"))?;
let ui_outfitter_scene = engine
.compile_file(content_root.join(self.ui_outfitter_scene))
.with_context(|| format!("while loading `outfitter` scene"))
.with_context(|| format!("while loading config"))?;
let ui_flying_scene = engine
.compile_file(content_root.join(self.ui_flying_scene))
.with_context(|| format!("while loading `flying` scene"))
.with_context(|| format!("while loading config"))?;
return Ok(super::Config { return Ok(super::Config {
sprite_root: asset_root.join(self.sprite_root), sprite_root: asset_root.join(self.sprite_root),
@ -89,6 +99,8 @@ pub(crate) mod syntax {
zoom_min: self.zoom_min, zoom_min: self.zoom_min,
ui_scale: self.ui_scale, ui_scale: self.ui_scale,
ui_landed_scene, ui_landed_scene,
ui_flying_scene,
ui_outfitter_scene,
}); });
} }
} }
@ -175,6 +187,12 @@ pub struct Config {
/// Ui scale factor /// Ui scale factor
pub ui_scale: f32, pub ui_scale: f32,
/// Ui landed scene /// Ui landed scene script
pub ui_landed_scene: AST, pub ui_landed_scene: AST,
/// Ui flying scene script
pub ui_flying_scene: AST,
/// Ui outfitter scene script
pub ui_outfitter_scene: AST,
} }