summaryrefslogtreecommitdiff
path: root/pixel-client/src
diff options
context:
space:
mode:
Diffstat (limited to 'pixel-client/src')
-rw-r--r--pixel-client/src/menu/credits.rs52
-rw-r--r--pixel-client/src/menu/main.rs13
-rw-r--r--pixel-client/src/menu/mod.rs1
-rw-r--r--pixel-client/src/ui.rs28
4 files changed, 92 insertions, 2 deletions
diff --git a/pixel-client/src/menu/credits.rs b/pixel-client/src/menu/credits.rs
new file mode 100644
index 00000000..1b3128e5
--- /dev/null
+++ b/pixel-client/src/menu/credits.rs
@@ -0,0 +1,52 @@
+/*
+ Hurry Curry! - a game about cooking
+ Copyright 2024 metamuffin
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, version 3 of the License only.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+*/
+use crate::{render::sprite::SpriteDraw, ui::Ui};
+use hurrycurry_protocol::glam::Vec2;
+
+#[derive(Default)]
+pub struct CreditsMenu {}
+
+impl CreditsMenu {
+ pub fn draw(&mut self, ui: &mut Ui) -> bool {
+ ui.renderer.draw_ui(SpriteDraw::overlay(
+ ui.renderer.misc_textures.solid,
+ Vec2::ZERO,
+ ui.renderer.ui_size,
+ Some([0, 0, 0, 150]),
+ ));
+
+ let mut back = false;
+
+ ui.horizontal(|ui| {
+ ui.advance(Vec2::splat(30.));
+ ui.vertical(|ui| {
+ ui.advance(Vec2::splat(30.));
+ ui.text("Pixel Curry!");
+
+ ui.small_text("developed by");
+
+ ui.text("metamuffin, BigBrotherNii");
+
+ ui.advance(ui.get_remaining() - Vec2::Y * 30.);
+ back = ui.button(80., "Back");
+ });
+ });
+
+ return back;
+ }
+}
diff --git a/pixel-client/src/menu/main.rs b/pixel-client/src/menu/main.rs
index f5ea5cd6..5c515169 100644
--- a/pixel-client/src/menu/main.rs
+++ b/pixel-client/src/menu/main.rs
@@ -15,7 +15,7 @@
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
-use super::{background::MenuBackground, settings::SettingsMenu};
+use super::{background::MenuBackground, credits::CreditsMenu, settings::SettingsMenu};
use crate::{
game::Game,
network::Network,
@@ -36,6 +36,7 @@ pub struct MainMenu {
server_address: String,
next_state: Option<Box<State>>,
settings: Option<SettingsMenu>,
+ credits: Option<CreditsMenu>,
}
impl MainMenu {
@@ -47,6 +48,7 @@ impl MainMenu {
ui_state: UiState::default(),
next_state: None,
settings: None,
+ credits: None,
}
}
pub fn tick(
@@ -74,6 +76,12 @@ impl MainMenu {
}
return;
}
+ if let Some(credits) = &mut self.credits {
+ if credits.draw(ui) {
+ self.credits = None;
+ }
+ return;
+ }
if ui.button(80., "Join") {
self.next_state = Some(Box::new(State::Ingame(Box::new(Game::new(
Network::connect(&self.server_address).unwrap(),
@@ -84,6 +92,9 @@ impl MainMenu {
if ui.button(80., "Settings") {
self.settings = Some(SettingsMenu::default())
}
+ if ui.button(80., "Credits") {
+ self.credits = Some(CreditsMenu::default())
+ }
if ui.button(80., "Quit") {
self.next_state = Some(Box::new(State::Quit));
}
diff --git a/pixel-client/src/menu/mod.rs b/pixel-client/src/menu/mod.rs
index f09e4fdf..632e7ca2 100644
--- a/pixel-client/src/menu/mod.rs
+++ b/pixel-client/src/menu/mod.rs
@@ -18,3 +18,4 @@
pub mod main;
pub mod background;
pub mod settings;
+pub mod credits;
diff --git a/pixel-client/src/ui.rs b/pixel-client/src/ui.rs
index 684fb5b3..9e3e1a3e 100644
--- a/pixel-client/src/ui.rs
+++ b/pixel-client/src/ui.rs
@@ -120,12 +120,38 @@ impl FocusDevice {
}
impl<'a, 'b> Ui<'a, 'b> {
+ pub fn vertical(&mut self, content: impl FnOnce(&mut Ui)) {
+ self.flow(false, content)
+ }
+ pub fn horizontal(&mut self, content: impl FnOnce(&mut Ui)) {
+ self.flow(true, content)
+ }
+ pub fn flow(&mut self, dir: bool, content: impl FnOnce(&mut Ui)) {
+ let d = self.direction_horizontal;
+ let ch = self.cross_height;
+ let c = self.cursor;
+ self.direction_horizontal = dir;
+ self.cross_height = 0.;
+ content(self);
+ let size = (self.cursor - c).max(if dir { Vec2::Y } else { Vec2::X } * self.cross_height);
+ self.direction_horizontal = d;
+ self.cross_height = ch;
+ self.cursor = c;
+ self.advance(size);
+ }
+
pub fn text(&mut self, text: &str) {
+ self.scaled_text(text, 1.)
+ }
+ pub fn small_text(&mut self, text: &str) {
+ self.scaled_text(text, 0.5)
+ }
+ pub fn scaled_text(&mut self, text: &str, scale: f32) {
let margin = Vec2::splat(2.);
let size = margin
+ self
.renderer
- .draw_text(self.cursor + margin, text, 1., None)
+ .draw_text(self.cursor + margin, text, scale, None)
+ margin;
self.advance(size);
}