toString(alpha) {
		let r = this.r.toString(16);
		let g = this.g.toString(16);
		let b = this.b.toString(16);
		let a = this.a.toString(16);

		if (r.length === 1) r = `0${r}`;
		if (g.length === 1) g = `0${g}`;
		if (b.length === 1) b = `0${b}`;
		if (a.length === 1) a = `0${a}`;

		const hex = () => `#${r}${g}${b}`.toUpperCase();
		const hexA = () => `#${r}${g}${b}${a}`.toUpperCase();

		if (alpha === undefined) {
			return this.a === 255 ? hex() : hexA();
		}

		return alpha ? hexA() : hex();
	}
Gets the color as a string
@param {boolean} alpha Whether to include alpha