// USEFUL FUNCTIONS FOR ZT2

#library "zt2functions"
#include "zcommon.acs"

#define ALIGN_CENTER 0.4
#define ALIGN_CENTER_Y 0.0
#define ALIGN_LEFT 0.1
#define ALIGN_RIGHT 0.2

// Returns integer value
function int round(int fixedNumber)
{
	return (fixedNumber + 0.5) >> 16;
}


// Shows a message on the screen without being scaled
function void HudMessageUnscaled (int xoffset, int yoffset, str text, int alignx, int aligny, int id)
{
	int vidres_x = GetCVar("vid_defwidth");
	int vidres_y = GetCVar("vid_defheight");
	int vidres_xFixed = vidres_x * 1.0;
	int vidres_yFixed = vidres_y * 1.0;
	int vidres_xCenter = FixedDiv(vidres_xFixed, 2.0);
	int vidres_yCenter = FixedDiv(vidres_yFixed, 2.0);
	int alignvar_x;
	int alignvar_y;

	int finaloffset_x;
	int finaloffset_y;

	if (yoffset < 0) { finaloffset_y = vidres_yFixed + yoffset; }
	else { finaloffset_y = yoffset; }

	if (xoffset < 0) { finaloffset_x = vidres_xFixed + xoffset; }
	else { finaloffset_x = xoffset; }

	switch (alignx)
	{
		case 0:
		alignvar_x = ALIGN_LEFT;
		break;

		case 1:
		alignvar_x = ALIGN_CENTER;
		break;

		case 2:
		alignvar_x = ALIGN_RIGHT;
		break;
	}

	switch (aligny)
	{
		case 0:
		alignvar_y = ALIGN_LEFT;
		break;

		case 1:
		alignvar_y = ALIGN_CENTER_Y;
		break;

		case 2:
		alignvar_y = ALIGN_RIGHT;
		break;
	}

	SetHUDSize(vidres_x, vidres_y, false);
	HudMessage(s:text; HUDMSG_PLAIN | HUDMSG_FADEOUT, 725+id, CR_WHITE, finaloffset_x + alignvar_x, finaloffset_y + alignvar_y, 2.0);
}

// Shows a message on the screen without being scaled
function void HudMessageUnscaledSlot (int xoffset, int yoffset, str text, int alignx, int aligny, int id, int showtime)
{
	int vidres_x = GetCVar("vid_defwidth");
	int vidres_y = GetCVar("vid_defheight");
	int vidres_xFixed = vidres_x * 1.0;
	int vidres_yFixed = vidres_y * 1.0;
	int vidres_xCenter = FixedDiv(vidres_xFixed, 2.0);
	int vidres_yCenter = FixedDiv(vidres_yFixed, 2.0);
	int alignvar_x;
	int alignvar_y;

	int finaloffset_x;
	int finaloffset_y;

	if (yoffset < 0) { finaloffset_y = vidres_yFixed + yoffset; }
	else { finaloffset_y = yoffset; }

	if (xoffset < 0) { finaloffset_x = vidres_xFixed + xoffset; }
	else { finaloffset_x = xoffset; }

	switch (alignx)
	{
		case 0:
		alignvar_x = ALIGN_LEFT;
		break;

		case 1:
		alignvar_x = ALIGN_CENTER;
		break;

		case 2:
		alignvar_x = ALIGN_RIGHT;
		break;
	}

	switch (aligny)
	{
		case 0:
		alignvar_y = ALIGN_LEFT;
		break;

		case 1:
		alignvar_y = ALIGN_CENTER_Y;
		break;

		case 2:
		alignvar_y = ALIGN_RIGHT;
		break;
	}

	SetHUDSize(vidres_x, vidres_y, false);
	HudMessage(s:text; HUDMSG_PLAIN | HUDMSG_FADEOUT, id, CR_UNTRANSLATED, finaloffset_x + alignvar_x, finaloffset_y + alignvar_y, showtime, 0.5);
}

// -- REDUX OF THE PREVIOUS SCRIPTS --
function void HMUSRedux (int xoffset, int yoffset, str text, int alignx, int aligny, int id, int showtime, int side)
{
	int vidres_x;
	int vidres_y;
	
	// Clientside?
	if (side > 0)
	{
	vidres_x = GetCVar("vid_defwidth");
	vidres_y = GetCVar("vid_defheight");
	}
	
	// Serverside
	else
	{
	vidres_x = CheckInventory("ResolutionX");
	vidres_y = CheckInventory("ResolutionY");	
	}
	
	int vidres_xFixed = vidres_x * 1.0;
	int vidres_yFixed = vidres_y * 1.0;
	int vidres_xCenter = FixedDiv(vidres_xFixed, 2.0);
	int vidres_yCenter = FixedDiv(vidres_yFixed, 2.0);
	int alignvar_x;
	int alignvar_y;

	int finaloffset_x;
	int finaloffset_y;

	if (yoffset < 0) { finaloffset_y = vidres_yFixed + yoffset; }
	else { finaloffset_y = yoffset; }

	if (xoffset < 0) { finaloffset_x = vidres_xFixed + xoffset; }
	else { finaloffset_x = xoffset; }

	switch (alignx)
	{
		case 0:
		alignvar_x = ALIGN_LEFT;
		break;

		case 1:
		alignvar_x = ALIGN_CENTER;
		break;

		case 2:
		alignvar_x = ALIGN_RIGHT;
		break;
	}

	switch (aligny)
	{
		case 0:
		alignvar_y = ALIGN_LEFT;
		break;

		case 1:
		alignvar_y = ALIGN_CENTER_Y;
		break;

		case 2:
		alignvar_y = ALIGN_RIGHT;
		break;
	}

	SetHUDSize(vidres_x, vidres_y, false);
	HudMessage(s:text; HUDMSG_PLAIN | HUDMSG_FADEOUT, id, CR_UNTRANSLATED, finaloffset_x + alignvar_x, finaloffset_y + alignvar_y, showtime, 0.5);
	SetHUDSize(0, 0, false);
}