terra-plr 0.2.4

Terraria player parser
Documentation
mod player;

pub use player::{
	buff::{Buff, BuffEffect},
	default,
	error::{Error, Result},
	inventory,
	looks::{HairDye, Style},
	read, write, Difficulty, Player, SpawnPoint, Visibility, SUPPORTED_VERSIONS,
};
pub use terra_types::{Color, InTiles, NonNegativeI32, PositiveI32, Vec2};

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum TerrariaFileType {
	Unknown,
	Map,
	World,
	Player,
}

impl TerrariaFileType {
	pub fn name(self) -> &'static str {
		match self {
			Self::Map => "map",
			Self::Player => "player",
			Self::World => "world",
			Self::Unknown => "unknown",
		}
	}
}

impl TerrariaFileType {
	pub fn to_id(self) -> Option<u8> {
		Some(match self {
			Self::Map => 1,
			Self::World => 2,
			Self::Player => 3,
			Self::Unknown => return None,
		})
	}

	pub fn from_id(id: u8) -> Self {
		match id {
			1 => Self::Map,
			2 => Self::World,
			3 => Self::Player,
			_ => Self::Unknown,
		}
	}
}

fn round_division_i64(dividend: i64, divisor: i64) -> i64 {
	let double_remainder = (dividend % divisor) * 2;
	dividend / divisor
		+ if double_remainder.abs() >= divisor.abs() {
			if dividend.is_negative() == divisor.is_negative() {
				1
			} else {
				-1
			}
		} else {
			0
		}
}

fn round_division_i128(dividend: i128, divisor: i128) -> i128 {
	let double_remainder = (dividend % divisor) * 2;
	dividend / divisor
		+ if double_remainder.abs() >= divisor.abs() {
			if dividend.is_negative() == divisor.is_negative() {
				1
			} else {
				-1
			}
		} else {
			0
		}
}