10个版本 (6个稳定版)
1.4.1 | 2021年12月16日 |
---|---|
1.3.0 | 2021年12月5日 |
0.2.2 | 2021年11月28日 |
0.1.2 | 2021年11月28日 |
0.1.1 | 2021年2月5日 |
在 游戏开发 中排名第 493
每月下载量 27
19KB
552 行
inv-sys
一个强大而有效的游戏库存系统。
功能
- 简单但强大的API
- 自动堆叠功能
- 取堆
- 查找槽位
- 迭代器
- 通过特质设置最大堆叠大小
- 排序
- 等等!
用法
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub enum Item {
Apple,
Banana,
Mango,
Peach,
Orange
}
/*
* Implement the Stacksize trait for
* your type that will act as your Item
*/
impl Stacksize for Item {
fn get_max_stacksize(&self) -> usize {
3
}
}
fn main() {
let mut inv = Inv::<Item>::new(32);
// cant be placed, slot out of bounds
assert_eq!(
inv.stack_at(
666, ItemStack::new(Item::Peach, 1)
),
Err(InvAccessErr::SlotOutOfBounds)
);
// overflow, which is returned to you
assert_eq!(
inv.stack_at(
2, ItemStack::new(Item::Apple, 4)
),
Ok(Err(
StackErr::StackSizeOverflow(
ItemStack::new(Item::Apple, 1)
)
))
);
// stack Banana at pos 1
inv.stack_at(
1, ItemStack::new(Item::Banana, 1)
).ok();
// item cant be stacked,
// item type does not match (Banana != Orange)
assert_eq!(
inv.stack_at(
1, ItemStack::new(Item::Orange, 1)
),
Ok(Err(
StackErr::ItemTypeDoesNotMatch(
ItemStack::new(Item::Orange, 1)
)
))
);
// auto stacking
// this first fills slot 1 to be at the max of 3
// since slot 1 already had 1 Banana in it
// the leftover will be placed in the first available slot,
// which, in this case, is 0
assert!(
inv.auto_stack(
ItemStack::new(Item::Banana, 3)
).is_ok()
);
// 1 Banana, 3 Bananas
assert_eq!(
inv.get_slot(0),
Ok(&Slot::new(ItemStack::new(Item::Banana, 1)))
);
assert_eq!(
inv.get_slot(1),
Ok(&Slot::new(ItemStack::new(Item::Banana, 3)))
);
// you can take a stack out of its slot
// first, we place 2 Mangos at slot 5
inv.stack_at(5, ItemStack::new(Item::Mango, 1)).ok();
inv.auto_stack(ItemStack::new(Item::Mango, 1)).ok();
// now we just take the stack
assert_eq!(
inv.take_stack(5),
Ok(ItemStack::new(Item::Mango, 2))
);
// slot 5 is empty now
assert_eq!(
inv.take_stack(5),
Err(InvAccessErr::SlotEmpty)
);
}
您可以查看单元测试以获取更多示例。
待办事项
- 排序
- 有任何请求?请只需提交一个问题,谢谢!
贡献
请随意提交一个说明可能的改进或更改的问题/PR。
帮助
此外,当需要时,请不要犹豫,提交一个问题。我很乐意提供帮助!