[Ajuda] Mover objetos em massa
#1

Oi, estou tentando fazer uma inclusгo para mover objetos em massa, agrupando-os em um grupo e movendo esse grupo. Sу tenho um problema com a rotaзгo Z do objeto. Fica muito torto quando deve se mover na mesma velocidade e rotaзгo que outros objetos

Code:
yagr_MoveGroup(groupid, Float:X, Float:Y, Float:Z, Float:rZ, Float:Speed)
{
	if(!Iter_Contains(ValidGroups, groupid))
		return 0;

	new Float:CoordCenter[3], Float:ObjectPos[6], nmax, Float:g_sin[3], Float:g_cos[3];
	yagr_GetCenterCoords(groupid, CoordCenter[0], CoordCenter[1], CoordCenter[2]);
	for(new i; i < MAX_GROUP_OBJECTS; i ++)
	{
		if(GroupInfo[groupid][yagr_objectid][i] != -1)
		{
			yagr_GetObjectPos(groupid, GroupInfo[groupid][yagr_objectid][i], ObjectPos[0], ObjectPos[1], ObjectPos[2], ObjectPos[3], ObjectPos[4], ObjectPos[5]);
			GroupInfo[groupid][yagr_obdestinyX][i] = X + (ObjectPos[0]-CoordCenter[0]);
			GroupInfo[groupid][yagr_obdestinyY][i] = Y + (ObjectPos[1]-CoordCenter[1]);
			GroupInfo[groupid][yagr_obdestinyZ][i] = Z + (ObjectPos[2]-CoordCenter[2]);

			yagr_ConverterValores(ObjectPos[3], ObjectPos[4], ObjectPos[5]-rZ, g_sin, g_cos);
			GroupInfo[groupid][yagr_obdestinyRZ][i] = atan2(g_cos[0] * g_sin[2] - g_cos[2] * g_sin[0] * g_sin[1], g_cos[0] * g_cos[2] + g_sin[0] * g_sin[1] * g_sin[2]);
			nmax = i;
		}
	}
	for(new i; i < nmax; i ++)
	{
		if(GroupInfo[groupid][yagr_objectid][i] != -1)
		{
			if(GroupInfo[groupid][yagr_objectdynamic][i])
				MoveDynamicObject(GroupInfo[groupid][yagr_objectid][i], GroupInfo[groupid][yagr_obdestinyX][i], GroupInfo[groupid][yagr_obdestinyY][i], GroupInfo[groupid][yagr_obdestinyZ][i], Speed, GroupInfo[groupid][yagr_originRX][i], GroupInfo[groupid][yagr_originRY][i], GroupInfo[groupid][yagr_obdestinyRZ][i]);
			else
				MoveObject(GroupInfo[groupid][yagr_objectid][i], GroupInfo[groupid][yagr_obdestinyX][i], GroupInfo[groupid][yagr_obdestinyY][i], GroupInfo[groupid][yagr_obdestinyZ][i], Speed, GroupInfo[groupid][yagr_originRX][i], GroupInfo[groupid][yagr_originRY][i], GroupInfo[groupid][yagr_obdestinyRZ][i]);
		}
	}
	return 1;
}

yagr_GetCenterCoords(groupid, &Float:X, &Float:Y, &Float:Z)
{
	new Float:highX = -9999999.0;
	new Float:highY = -9999999.0;
	new Float:highZ = -9999999.0;

	new Float:lowX  = 9999999.0;
	new Float:lowY  = 9999999.0;
	new Float:lowZ  = 9999999.0;

	new count, Float:oX, Float:oY, Float:oZ, Float:null;

	for(new i; i < MAX_GROUP_OBJECTS; i ++)
	{
		if(GroupInfo[groupid][yagr_objectid][i] != -1)
		{
			yagr_GetObjectPos(groupid, GroupInfo[groupid][yagr_objectid][i], oX, oY, oZ, null, null, null);
			if(oX > highX) highX = oX;
			if(oY > highY) highY = oY;
			if(oZ > highZ) highZ = oZ;
			if(oX < lowX) lowX = oX;
			if(oY < lowY) lowY = oY;
			if(oZ < lowZ) lowZ = oZ;
			count++;
		}
	}

	if(count < 1) return 0;

	X = (highX + lowX) / 2;
	Y = (highY + lowY) / 2;
	Z = (highZ + lowZ) / 2;
	return 1;
}
yagr_ConverterValores(Float:rot_x, Float:rot_y, Float:rot_z, Float:sin[3], Float:cos[3])
{
    sin[0] = floatsin(rot_x, degrees);
    sin[1] = floatsin(rot_y, degrees);
    sin[2] = floatsin(rot_z, degrees);
    cos[0] = floatcos(rot_x, degrees);
    cos[1] = floatcos(rot_y, degrees);
    cos[2] = floatcos(rot_z, degrees);
    return 1;
}

Reply
#2

Tente usar SetObjectRot.
Nunca vi nada do tipo assim, rs.

Provavelmente vocк terб que fazer isso de forma manual.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)