aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-08-14 21:40:30 +0200
committermetamuffin <metamuffin@disroot.org>2024-08-14 21:40:30 +0200
commitc44b86bcd86762dcdf1268ebfd3be9899ccf24ba (patch)
tree7ac984467e973f5abfa78c913e692ce06c0ca4e6
parentc4ecfadbdfa8487a390958dbd80240f58b286303 (diff)
downloadhurrycurry-c44b86bcd86762dcdf1268ebfd3be9899ccf24ba.tar
hurrycurry-c44b86bcd86762dcdf1268ebfd3be9899ccf24ba.tar.bz2
hurrycurry-c44b86bcd86762dcdf1268ebfd3be9899ccf24ba.tar.zst
pc: add itembubble and config save/load
-rw-r--r--Cargo.lock28
-rw-r--r--pixel-client/Cargo.toml4
-rw-r--r--pixel-client/assets/misc.ini1
-rw-r--r--pixel-client/assets/textures/itembubble.ta96
-rw-r--r--pixel-client/src/config.rs43
-rw-r--r--pixel-client/src/main.rs3
-rw-r--r--pixel-client/src/render/misc.rs2
7 files changed, 172 insertions, 5 deletions
diff --git a/Cargo.lock b/Cargo.lock
index d6ba42e0..4b3a4d4b 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1257,8 +1257,12 @@ dependencies = [
"rand 0.9.0-alpha.2",
"rustls",
"sdl2",
+ "serde",
"serde_json",
+ "toml",
"tungstenite",
+ "users",
+ "xdg",
]
[[package]]
@@ -1702,18 +1706,18 @@ dependencies = [
[[package]]
name = "serde"
-version = "1.0.205"
+version = "1.0.207"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e33aedb1a7135da52b7c21791455563facbbcc43d0f0f66165b42c21b3dfb150"
+checksum = "5665e14a49a4ea1b91029ba7d3bca9f299e1f7cfa194388ccc20f14743e784f2"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.205"
+version = "1.0.207"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "692d6f5ac90220161d6774db30c662202721e64aed9058d2c394f451261420c1"
+checksum = "6aea2634c86b0e8ef2cfdc0c340baede54ec27b1e46febd7f80dffb2aa44a00e"
dependencies = [
"proc-macro2",
"quote",
@@ -2061,6 +2065,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
[[package]]
+name = "users"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24cc0f6d6f267b73e5a2cadf007ba8f9bc39c6a6f9666f8cf25ea809a153b032"
+dependencies = [
+ "libc",
+ "log",
+]
+
+[[package]]
name = "utf-8"
version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2277,6 +2291,12 @@ dependencies = [
]
[[package]]
+name = "xdg"
+version = "2.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546"
+
+[[package]]
name = "zerocopy"
version = "0.7.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/pixel-client/Cargo.toml b/pixel-client/Cargo.toml
index 38c32db8..d319457f 100644
--- a/pixel-client/Cargo.toml
+++ b/pixel-client/Cargo.toml
@@ -18,6 +18,10 @@ anyhow = "1.0.86"
clap = { version = "4.5.15", features = ["derive"] }
rustls = { version = "0.23.12", features = ["ring"] }
rand = "0.9.0-alpha.2"
+xdg = "2.5.2"
+toml = "0.8.19"
+serde = { version = "1.0.207", featues = ["derive"] }
+users = "0.11.0"
[features]
bundle_sdl2 = ["sdl2/bundled"]
diff --git a/pixel-client/assets/misc.ini b/pixel-client/assets/misc.ini
index 19a4ba2f..1647caac 100644
--- a/pixel-client/assets/misc.ini
+++ b/pixel-client/assets/misc.ini
@@ -15,3 +15,4 @@ conveyor-arrow=we:conveyor_arrow_left~hflip
icon=pot_back,steak_in_pot~x4~y11,pot_front
clouds=clouds
+itembubble=itembubble
diff --git a/pixel-client/assets/textures/itembubble.ta b/pixel-client/assets/textures/itembubble.ta
new file mode 100644
index 00000000..6c13fb31
--- /dev/null
+++ b/pixel-client/assets/textures/itembubble.ta
@@ -0,0 +1,96 @@
+tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
+tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
+tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
+tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
+tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
+tttttttttttttccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccttttttttttttt
+ttttttttttcccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccctttttttttt
+ttttttttccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcctttttttt
+tttttttcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcttttttt
+tttttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttttt
+ttttttcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffctttttt
+ttttttfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffftttttt
+ttttttfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffftttttt
+tttttcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+tttttkfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttt
+ttttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffkttttt
+ttttttfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffftttttt
+ttttttkffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffftttttt
+tttttttffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffktttttt
+tttttttkfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffttttttt
+ttttttttkfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffkttttttt
+tttttttttkkfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffkktttttttt
+tttttttttttkkkfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffkkktttttttttt
+ttttttttttttttkkkkkkkkkkkkkkkkkkkkkkkffffffffffffffffffffffkkkkkkkkkkkkkkkkkkkkkkkkttttttttttttt
+tttttttttttttttttttttttttttttttttttttkkkffffffffffffffffkkkttttttttttttttttttttttttttttttttttttt
+ttttttttttttttttttttttttttttttttttttttttkkkffffffffffkkktttttttttttttttttttttttttttttttttttttttt
+tttttttttttttttttttttttttttttttttttttttttttkkkffffkkkttttttttttttttttttttttttttttttttttttttttttt
+ttttttttttttttttttttttttttttttttttttttttttttttkffktttttttttttttttttttttttttttttttttttttttttttttt
diff --git a/pixel-client/src/config.rs b/pixel-client/src/config.rs
new file mode 100644
index 00000000..6d74fbe7
--- /dev/null
+++ b/pixel-client/src/config.rs
@@ -0,0 +1,43 @@
+use anyhow::{anyhow, Result};
+use serde::{Deserialize, Serialize};
+use std::{
+ fs::{read_to_string, rename, File},
+ io::Write,
+ path::PathBuf,
+};
+
+#[derive(Serialize, Deserialize)]
+pub struct Config {
+ username: String,
+}
+
+impl Config {
+ pub fn path() -> Result<PathBuf> {
+ Ok(xdg::BaseDirectories::with_prefix("pixelcurry")?.place_config_file("config.toml")?)
+ }
+ pub fn load() -> Result<Self> {
+ let path = Self::path()?;
+ if path.exists() {
+ Ok(toml::from_str(&read_to_string(path)?)?)
+ } else {
+ File::create(path)?.write_all(toml::to_string(&Self::initial()?)?.as_bytes())?;
+ Self::load()
+ }
+ }
+ pub fn save(&self) -> Result<()> {
+ let path = Self::path()?;
+ let temp = path.with_added_extension("~");
+ File::create(&temp)?.write_all(toml::to_string(self)?.as_bytes())?;
+ rename(temp, path)?;
+ Ok(())
+ }
+ pub fn initial() -> Result<Self> {
+ Ok(Config {
+ username: users::get_current_username()
+ .ok_or(anyhow!("current user has no name"))?
+ .to_str()
+ .ok_or(anyhow!("current user's name is not valid UTF8"))?
+ .to_owned(),
+ })
+ }
+}
diff --git a/pixel-client/src/main.rs b/pixel-client/src/main.rs
index 23d99bc8..24421994 100644
--- a/pixel-client/src/main.rs
+++ b/pixel-client/src/main.rs
@@ -15,7 +15,7 @@
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
-#![feature(map_many_mut)]
+#![feature(map_many_mut, path_add_extension)]
use clap::{Parser, Subcommand};
use game::Game;
use hurrycurry_client_lib::network::sync::Network;
@@ -26,6 +26,7 @@ use render::Renderer;
use sdl2::{event::Event, keyboard::KeyboardState, mouse::MouseState, pixels::Color};
use std::time::{Duration, Instant};
+pub mod config;
pub mod game;
pub mod helper;
pub mod menu;
diff --git a/pixel-client/src/render/misc.rs b/pixel-client/src/render/misc.rs
index 2197b89c..7a631154 100644
--- a/pixel-client/src/render/misc.rs
+++ b/pixel-client/src/render/misc.rs
@@ -25,6 +25,7 @@ pub struct MiscTextures {
pub interact_target: Sprite,
pub solid: Rect,
pub clouds: Rect,
+ pub itembubble: Rect,
}
impl MiscTextures {
@@ -39,6 +40,7 @@ impl MiscTextures {
),
solid: *layout.get("solid+a").unwrap(),
clouds: *layout.get("clouds+a").unwrap(),
+ itembubble: *layout.get("itembubble+a").unwrap(),
}
}
}