use std::collections::HashMap;
use bevy_ecs::prelude::*;
use bevy_reflect::prelude::*;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
#[derive(Clone, Component, Debug, Default, Reflect)]
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
#[reflect(Component, Debug, Default)]
#[cfg_attr(feature = "serde", reflect(Deserialize, Serialize))]
pub struct CursorHotspots {
#[cfg_attr(feature = "serde", serde(default))]
pub default: (u16, u16),
#[cfg_attr(feature = "serde", serde(default))]
pub overrides: HashMap<usize, (u16, u16)>,
}
impl CursorHotspots {
pub fn get_or_default(&self, index: usize) -> (u16, u16) {
self.overrides.get(&index).copied().unwrap_or(self.default)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_get_or_default() {
let hotspots = CursorHotspots {
default: (10, 0),
overrides: HashMap::new(),
};
assert_eq!(hotspots.get_or_default(0), (10, 0));
assert_eq!(hotspots.get_or_default(1), (10, 0));
assert_eq!(hotspots.get_or_default(2), (10, 0));
let hotspots = CursorHotspots {
default: (10, 0),
overrides: vec![(1, (1, 1))].into_iter().collect(),
};
assert_eq!(hotspots.get_or_default(0), (10, 0));
assert_eq!(hotspots.get_or_default(1), (1, 1));
assert_eq!(hotspots.get_or_default(2), (10, 0));
}
}