diff options
| author | 1992414357@qq.com <1992414357@qq.com> | 2025-04-21 06:25:54 +0800 |
|---|---|---|
| committer | 1992414357@qq.com <1992414357@qq.com> | 2025-04-21 06:25:54 +0800 |
| commit | 50ea9869616846e5a0448ead8272c397080f36d8 (patch) | |
| tree | 5f2ec829ecf48441a6d33f4160909dc02ddf83bf /core/src/player | |
| parent | d72d700c84794ca420035ceb9c294563f3f9c048 (diff) | |
.
Diffstat (limited to 'core/src/player')
| -rw-r--r-- | core/src/player/mod.rs | 1 | ||||
| -rw-r--r-- | core/src/player/player_info.rs | 62 |
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 |
