oc_wasm_opencomputers/
common.rs

1use core::convert::TryFrom;
2use minicbor::{Decode, Encode};
3
4pub use oc_wasm_helpers::{
5	error::TryFromInt as TryFromIntError,
6	fluid::{Fluid, Tank},
7	inventory::ItemStack,
8	sides::{Absolute as AbsoluteSide, Relative as RelativeSide, Side, BLOCK_SIDES},
9	Lockable,
10};
11
12/// A rectangular dimension
13#[derive(Clone, Copy, Debug, Decode, Encode, Eq, Hash, Ord, PartialEq, PartialOrd)]
14#[cbor(array)]
15pub struct Dimension {
16	/// The width of the rectangle.
17	#[n(0)]
18	pub width: u32,
19
20	/// The height of the rectangle.
21	#[n(1)]
22	pub height: u32,
23}
24
25/// A nonnegative position coordinate.
26#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
27pub struct Point {
28	/// The X coordinate.
29	pub x: u32,
30
31	/// The Y coordinate.
32	pub y: u32,
33}
34
35/// A 2D integer vector.
36#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
37pub struct Vector2 {
38	/// The vector’s X component.
39	pub x: i32,
40
41	/// The vector’s Y component.
42	pub y: i32,
43}
44
45/// The number of colours in the standard Minecraft colour table.
46pub const COLOURS: usize = 16;
47
48/// A colour.
49#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
50pub enum Colour {
51	White,
52	Orange,
53	Magenta,
54	LightBlue,
55	Yellow,
56	Lime,
57	Pink,
58	Grey,
59	LightGrey,
60	Cyan,
61	Purple,
62	Blue,
63	Brown,
64	Green,
65	Red,
66	Black,
67}
68
69impl From<Colour> for u8 {
70	fn from(x: Colour) -> u8 {
71		match x {
72			Colour::White => 0,
73			Colour::Orange => 1,
74			Colour::Magenta => 2,
75			Colour::LightBlue => 3,
76			Colour::Yellow => 4,
77			Colour::Lime => 5,
78			Colour::Pink => 6,
79			Colour::Grey => 7,
80			Colour::LightGrey => 8,
81			Colour::Cyan => 9,
82			Colour::Purple => 10,
83			Colour::Blue => 11,
84			Colour::Brown => 12,
85			Colour::Green => 13,
86			Colour::Red => 14,
87			Colour::Black => 15,
88		}
89	}
90}
91
92impl From<Colour> for usize {
93	fn from(x: Colour) -> usize {
94		u8::from(x) as usize
95	}
96}
97
98impl TryFrom<u8> for Colour {
99	type Error = oc_wasm_helpers::error::TryFromInt;
100
101	fn try_from(x: u8) -> Result<Self, Self::Error> {
102		match x {
103			0 => Ok(Colour::White),
104			1 => Ok(Colour::Orange),
105			2 => Ok(Colour::Magenta),
106			3 => Ok(Colour::LightBlue),
107			4 => Ok(Colour::Yellow),
108			5 => Ok(Colour::Lime),
109			6 => Ok(Colour::Pink),
110			7 => Ok(Colour::Grey),
111			8 => Ok(Colour::LightGrey),
112			9 => Ok(Colour::Cyan),
113			10 => Ok(Colour::Purple),
114			11 => Ok(Colour::Blue),
115			12 => Ok(Colour::Brown),
116			13 => Ok(Colour::Green),
117			14 => Ok(Colour::Red),
118			15 => Ok(Colour::Black),
119			_ => Err(oc_wasm_helpers::error::TryFromInt),
120		}
121	}
122}
123
124/// A 24-bit RGB colour.
125#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
126pub struct Rgb(pub u32);