aboutsummaryrefslogtreecommitdiff
path: root/server/src/entity/button.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/entity/button.rs')
-rw-r--r--server/src/entity/button.rs54
1 files changed, 54 insertions, 0 deletions
diff --git a/server/src/entity/button.rs b/server/src/entity/button.rs
new file mode 100644
index 00000000..74726253
--- /dev/null
+++ b/server/src/entity/button.rs
@@ -0,0 +1,54 @@
+/*
+ Hurry Curry! - a game about cooking
+ Copyright (C) 2025 Hurry Curry! Contributors
+
+ 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 super::{Entity, EntityContext};
+use anyhow::Result;
+use hurrycurry_data::entities::ButtonAction;
+use hurrycurry_locale::TrError;
+use hurrycurry_protocol::{ItemLocation, Menu, PacketC, PlayerID, glam::IVec2};
+
+#[derive(Debug, Clone)]
+pub struct Button {
+ pub pos: IVec2,
+ pub action: ButtonAction,
+}
+
+impl Entity for Button {
+ fn interact(
+ &mut self,
+ c: EntityContext<'_>,
+ pos: Option<ItemLocation>,
+ _player: PlayerID,
+ ) -> Result<bool, TrError> {
+ if pos == Some(ItemLocation::Tile(self.pos)) {
+ match self.action {
+ ButtonAction::Book => {
+ c.replies
+ .unwrap()
+ .push(PacketC::Menu(Menu::Book(c.serverdata.book.clone())));
+ }
+ ButtonAction::VoteYes => {}
+ ButtonAction::VoteNo => {}
+ ButtonAction::MapSelector => {
+ c.replies.unwrap().push(PacketC::Menu(Menu::MapSelector));
+ }
+ }
+ return Ok(true);
+ }
+ Ok(false)
+ }
+}