aboutsummaryrefslogtreecommitdiff
path: root/core/src/player
diff options
context:
space:
mode:
author1992414357@qq.com <1992414357@qq.com>2025-04-21 06:25:54 +0800
committer1992414357@qq.com <1992414357@qq.com>2025-04-21 06:25:54 +0800
commit50ea9869616846e5a0448ead8272c397080f36d8 (patch)
tree5f2ec829ecf48441a6d33f4160909dc02ddf83bf /core/src/player
parentd72d700c84794ca420035ceb9c294563f3f9c048 (diff)
.
Diffstat (limited to 'core/src/player')
-rw-r--r--core/src/player/mod.rs1
-rw-r--r--core/src/player/player_info.rs62
2 files changed, 63 insertions, 0 deletions
diff --git a/core/src/player/mod.rs b/core/src/player/mod.rs
new file mode 100644
index 0000000..fcb7558
--- /dev/null
+++ b/core/src/player/mod.rs
@@ -0,0 +1 @@
+pub mod player_info; \ No newline at end of file
diff --git a/core/src/player/player_info.rs b/core/src/player/player_info.rs
new file mode 100644
index 0000000..6412b66
--- /dev/null
+++ b/core/src/player/player_info.rs
@@ -0,0 +1,62 @@
+use hex::encode;
+use serde::{Deserialize, Serialize};
+use sha1::{Digest, Sha1};
+use crate::constants::SALT;
+
+/// 玩家信息
+#[derive(Serialize, Deserialize, PartialEq)]
+pub struct PlayerInfo {
+ pub display_name: String,
+ pub name_hash: String,
+
+ // 颜色 HSV
+ pub color_hue: i32, // 0 - 360
+ pub color_saturation: f64, // 0 - 1
+ pub color_value: f64, // 0 - 1
+}
+
+impl Default for PlayerInfo {
+
+ fn default() -> Self {
+ PlayerInfo {
+ display_name: String::from("Player"),
+ name_hash: String::new(),
+ color_hue: 86,
+ color_saturation: 1.0,
+ color_value: 1.0,
+ }
+ }
+}
+
+impl PlayerInfo {
+
+ /// # 配置玩家 ID 和 名称
+ /// self : 自身
+ /// display_name : 玩家显示名称
+ /// id : 玩家 ID
+ /// return -> 自身
+ pub fn name(&mut self, display_name: String, id: String) -> &mut Self {
+ self.display_name = display_name;
+
+ let combined = format!("{}{}{}", &self.display_name, id, SALT);
+ let mut hasher = Sha1::new();
+ hasher.update(combined);
+ let result = hasher.finalize();
+
+ self.name_hash = encode(&result[..]);
+ self
+ }
+
+ /// # 配置玩家颜色
+ /// self : 自身
+ /// hue : 色调 0 -> RED; 120 -> GREEN; 240 -> BLUE
+ /// saturation : 饱和度
+ /// value : 明度
+ /// return -> 自身
+ pub fn color_hsv(&mut self, hue: i32, saturation: f64, value: f64) -> &mut Self {
+ self.color_hue = hue.clamp(0, 360);
+ self.color_saturation = saturation.clamp(0.0, 1.0);
+ self.color_value = value.clamp(0.0, 1.0);
+ self
+ }
+} \ No newline at end of file