/* -----------------------------------------------------------------------------
	GSFramework
	Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
----------------------------------------------------------------------------- */


		#include "script_squirrel/cobject/uv_decl.h"
		#include "script_squirrel/cobject/vector_decl.h"

		using namespace GS;

#ifndef	_T
	#define _T
#endif


_IMPL_NATIVE_CONSTRUCTION(UV, GS::Vector2);

//------------------------------------------------------------------------------
_MEMBER_FUNCTION_IMPL(UV, constructor)
	Vector2 temp;
	int nparams = sa.GetParamCount();

	switch (nparams)
	{
		case 1:	temp.Set(0, 0);	break;
		case 2:
			if	(sa.GetType(2) == OT_INSTANCE)
			{
				_GetTypedParam(uv, 2, Vector2, UV);
				if	(uv)
						temp = *uv;
				else	return sa.ThrowError("Invalid instance type");
			}
			else	temp.Set(sa.GetFloat(2), 0);
			break;
		case 3:	temp.Set(sa.GetFloat(2), sa.GetFloat(3));	break;

		default:
			return sa.ThrowError("Wrong parameter count");
	}
	return construct_UV(v, new Vector2(temp));
_END_IMPL

_MEMBER_FUNCTION_IMPL(UV, _cloned)
	_GetTypedParam(uv, 2, Vector2, UV);
	return construct_UV(v, new Vector2(*uv));
_END_IMPL

_MEMBER_FUNCTION_IMPL(UV, _set)
	_GetSelf(Vector2, UV);

	const SQChar *s = sa.GetString(2);
	int index = s ? s[0] : sa.GetInt(2);

	switch (index)
	{
		case 0: case 'u': case 'x':
			return sa.Return(self->x = sa.GetFloat(3));
		case 1: case 'v': case 'y':
			return sa.Return(self->y = sa.GetFloat(3));
	}
	return SQ_ERROR;
_END_IMPL

_MEMBER_FUNCTION_IMPL(UV, _get)
	_GetSelf(Vector2, UV);
	const SQChar *s = sa.GetString(2);
	if	(s && (s[1] != 0))
		return SQ_ERROR;
	int index = s && (s[1] == 0) ? s[0] : sa.GetInt(2);

	switch (index)
	{
		case 0: case 'u': case 'x':
			return sa.Return(self->x);
		case 1: case 'v': case 'y':
			return sa.Return(self->y);
	}
	return SQ_ERROR;
_END_IMPL

_MEMBER_FUNCTION_IMPL(UV, Set)
	_GetSelf(Vector2, UV);
	switch (sa.GetParamCount())
	{
		case 1:	self->Set(0, 0); break;
		case 2:	self->Set(sa.GetFloat(2), 0); break;
		case 3:	self->Set(sa.GetFloat(2), sa.GetFloat(3)); break;
		default:
			return sa.ThrowError("Wrong parameter count");
	}
	return 0;
_END_IMPL
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/*#
	Topic: UV
	Type: UV
#*/

/*#
	Section: UVGeneric
	Desc: Generic
#*/
_BEGIN_CLASS(UV)

_MEMBER_FUNCTION(UV, constructor, -1, _T(".n|xn"))
_MEMBER_FUNCTION(UV, _cloned, 2, _T(".x"))
_MEMBER_FUNCTION(UV, _set, 3, _T("xs|n"))
_MEMBER_FUNCTION(UV, _get, 2, _T("xs|n"))

	/*#
		Func: Set
		Proto: void:float x = 0,float y = 0
		Desc: Set UV values.
	#*/
_MEMBER_FUNCTION(UV, Set, -1, _T("xnn"))

_END_CLASS(UV)
//------------------------------------------------------------------------------
