Exemple #1
0
static int vectorL_sub__( lua_State *L )
{
   Vector2d *v1, *v2;
   double x, y;

   /* Get self. */
   v1    = luaL_checkvector(L,1);

   /* Get rest of parameters. */
   v2 = NULL;
   if (lua_isvector(L,2)) {
      v2 = lua_tovector(L,2);
      x = v2->x;
      y = v2->y;
   }
   else if ((lua_gettop(L) > 2) && lua_isnumber(L,2) && lua_isnumber(L,3)) {
      x = lua_tonumber(L,2);
      y = lua_tonumber(L,3);
   }
   else {
      NLUA_INVALID_PARAMETER(L);
      return 0;
   }

   /* Actually add it */
   vect_cset( v1, v1->x - x, v1->y - y );
   lua_pushvector( L, *v1 );
   return 1;
}
int qlua_ProjectToPlane(lua_State *L) {
	vec3_t dst,src,plane;

	luaL_checktype(L,1,LUA_TVECTOR);
	luaL_checktype(L,2,LUA_TVECTOR);
	luaL_checktype(L,3,LUA_TVECTOR);
	
	lua_tovector(L,1,src);
	lua_tovector(L,2,plane);
	lua_tovector(L,3,dst);

	ProjectPointOnPlane(dst,src,plane);

	lua_pushvector(L,dst);
	return 1;
}
Exemple #3
0
/**
 * @brief Subtracts two vectors or a vector and some cartesian coordinates.
 *
 * If x is a vector it subtracts both vectors, otherwise it subtracts cartesian
 * coordinates to the vector.
 *
 * @usage my_vec = my_vec - your_vec
 * @usage my_vec:sub( your_vec )
 * @usage my_vec:sub( 5, 3 )
 *
 *    @luaparam v Vector getting stuff subtracted from.
 *    @luaparam x X coordinate or vector to subtract.
 *    @luaparam y Y coordinate or nil to subtract.
 *    @luareturn The result of the vector operation.
 * @luafunc sub( v, x, y )
 */
static int vectorL_sub( lua_State *L )
{
    LuaVector vout, *v1, *v2;
    double x, y;

    /* Get self. */
    v1    = luaL_checkvector(L,1);

    /* Get rest of parameters. */
    v2 = NULL;
    if (lua_isvector(L,2)) {
        v2 = lua_tovector(L,2);
        x = v2->vec.x;
        y = v2->vec.y;
    }
    else if ((lua_gettop(L) > 2) && lua_isnumber(L,2) && lua_isnumber(L,3)) {
        x = lua_tonumber(L,2);
        y = lua_tonumber(L,3);
    }
    else NLUA_INVALID_PARAMETER(L);

    /* Actually add it */
    vect_cset( &vout.vec, v1->vec.x - x, v1->vec.y - y );
    lua_pushvector( L, vout );
    return 1;
}
Exemple #4
0
struct model *luaL_checkmodel(lua_State *L, int index)
{
	int n, i;
	struct mesh *group;
	vector offset;
	struct model *m;

	n = lua_objlen(L, index);
	if (n <= 0)
	{
		luaL_error(L, "invalid table length at index %d", index);
	}
	m = model_create(NULL);
	for (i=0; i<n; i++)
	{
		lua_getfieldi(L, index, i+1);
		group = luaL_checkmesh(L, -1);
		lua_getfield(L, -1, "offset");
		if (lua_isvector(L, -1))
			lua_tovector(L, -1, &offset);
		else
			offset.x = offset.y = offset.z = 0.0f;
		lua_pop(L, 2);
		model_addgroup(m, group, &offset);
		mesh_destroy(group);
	}

	return m;
}
int qlua_VectorRotate(lua_State *L) {
	vec3_t in,out;
	vec3_t axis[3];

	luaL_checktype(L,1,LUA_TVECTOR);
	luaL_checktype(L,2,LUA_TVECTOR);
	luaL_checktype(L,3,LUA_TVECTOR);
	luaL_checktype(L,4,LUA_TVECTOR);

	lua_tovector(L,1,in);
	lua_tovector(L,2,axis[0]);
	lua_tovector(L,3,axis[1]);
	lua_tovector(L,4,axis[2]);

	VectorRotate(in,axis,out);

	lua_pushvector(L,out);
	return 1;
}
void qlua_pullvector_i(lua_State *L, int i, vec3_t vec, qboolean req, int m) {
	vec3_t v;
	VectorClear(v);
	lua_pushinteger(L,i);
	lua_gettable(L,m);
	if(req) luaL_checktype(L,lua_gettop(L),LUA_TVECTOR);
	if(lua_type(L,lua_gettop(L)) == LUA_TVECTOR) {
		lua_tovector(L,lua_gettop(L),v);
		vec[0] = v[0];
		vec[1] = v[1];
		vec[2] = v[2];
	}
}
void qlua_pullvector(lua_State *L, char *str, vec3_t vec, qboolean req) {
	vec3_t v;
	VectorClear(v);
	lua_pushstring(L,str);
	lua_gettable(L,1);
	if(req) luaL_checktype(L,lua_gettop(L),LUA_TVECTOR);
	if(lua_type(L,lua_gettop(L)) == LUA_TVECTOR) {
		lua_tovector(L,lua_gettop(L),v);
		vec[0] = v[0];
		vec[1] = v[1];
		vec[2] = v[2];
	}
}
int qlua_trace(lua_State *L) {
	trace_t results;
	vec3_t start, end;
	vec3_t mins, maxs;
	centity_t *ent;
	int pass=ENTITYNUM_NONE, mask=MASK_ALL;
	int top = lua_gettop(L);

	if(top > 1) {
		lua_tovector(L,1,start);
		lua_tovector(L,2,end);
		VectorSet(mins,vec3_origin[0],vec3_origin[1],vec3_origin[2]);
		VectorSet(maxs,vec3_origin[0],vec3_origin[1],vec3_origin[2]);
		if(top > 2) {
			if(lua_type(L,3) == LUA_TNUMBER) {
				pass = lua_tointeger(L,3);
			} else if(lua_type(L,3) == LUA_TUSERDATA) {
				ent = lua_toentity(L,3);
				if(ent != NULL) {
					pass = ent->currentState.number;
				}
			}
			if(top > 3)
				mask = lua_tointeger(L,4);
			if(top > 4) {
				if(lua_type(L,5) == LUA_TVECTOR) lua_tovector(L,5,mins);
				if(lua_type(L,6) == LUA_TVECTOR) lua_tovector(L,6,maxs);
			}
		}
		CG_Trace(&results,start,mins,maxs,end,pass,mask);

		lua_pushtrace(L, results);

		return 1;
	}


	return 0;
}
int qlua_setangles(lua_State *L) {
	centity_t	*luaentity;

	luaL_checktype(L,1,LUA_TUSERDATA);
	luaL_checktype(L,2,LUA_TVECTOR);

	luaentity = lua_toentity(L,1);
	if(luaentity != NULL) {
		lua_tovector(L,2,luaentity->currentState.angles);
		return 1;
	}
	return 0;
}
int qlua_ProjectVector(lua_State *L) {
	vec3_t in;
	vec3_t out;
	refdef_t		refdef;
	
	memset( &refdef, 0, sizeof( refdef ) );
	lua_torefdef(L,1,&refdef,qtrue);

	luaL_checktype(L,2,LUA_TVECTOR);
	lua_tovector(L,2,in);
	
	CG_ProjectVector(refdef,in,out);

	lua_pushvector(L,out);
	return 1;
}
int luautil_pointcontents(lua_State *L) {
	vec3_t point;
	int pass = -1;
	int contents;

	//luaL_checkudata(L,1,"Vector");
	if(lua_type(L,1) != LUA_TUSERDATA) return 0;

	lua_tovector(L,1,point);

	if(lua_type(L,2) == LUA_TNUMBER) {
		pass = lua_tonumber(L,2);
	}
	contents = trap_PointContents(point,pass);

	lua_pushinteger(L,contents);
	return 1;
}
int qlua_setpos(lua_State *L) {
	centity_t	*luaentity;
	vec3_t		origin;

	luaL_checktype(L,1,LUA_TUSERDATA);
	luaL_checktype(L,2,LUA_TVECTOR);

	luaentity = lua_toentity(L,1);
	if(luaentity != NULL) {
			BG_EvaluateTrajectory( &luaentity->currentState.pos, cg.time, origin );
			lua_tovector(L,2,luaentity->currentState.pos.trBase);
			luaentity->currentState.pos.trDuration += (cg.time - luaentity->currentState.pos.trTime);
			luaentity->currentState.pos.trTime = cg.time;
			
			VectorCopy(luaentity->currentState.pos.trBase, luaentity->currentState.origin);
		return 1;
	}
	return 0;
}
Exemple #13
0
LUALIB_API lua_Vector *luaL_checkvector (lua_State *L, int narg) {
  lua_Vector *d = lua_tovector(L, narg);
  if (d == NULL)  /* avoid extra test when d is not 0 */
    luaL_typerror(L, narg, "Vector");
  return d;
}