в мап эдиторе ты нашел точку фишки от нулевых корд. X = 0.06 Y = 0.56, из этого следует что X+Y = радиус окружности
Мы имеем центр окружности, радиус, угол поворота
Правильная формула для поиска конечной точки
X = (R * floatcos (A, degrees))
Y = (R * floatsin (A, degrees))
Возможно ты ошибся с позицией фишки? Еще раз напомню учитывай инверсию коорд Y
Один вопрос: камера за столом фиксируемая, вне зависимости от угла поворота стола?
Последний раз редактировалось tnc; 23.05.2021 в 15:20.
Скинь настройки камеры
UPD: вот так можно получить оффсеты для ячеек
#include <a_samp> main() { new Float: base_x_pos = -0.29, Float: base_y_pos = 0.49; const Float: X_SIZE = 0.2433, Float: Y_SIZE = 0.1525, COL_COUNT = 5, ROWS_COUNT = 23, CELLS_COUNT = COL_COUNT * ROWS_COUNT; printf(" { %2.f, %2.f, -1, 5, 3, 1 }, // Zero", base_x_pos + X_SIZE * 1.5, base_y_pos + Y_SIZE * 0.5); // Zero new index = 1, Float: x_size = X_SIZE * 0.5, Float: y_size = Y_SIZE * 0.5; base_x_pos += x_size; base_y_pos -= y_size; for (new i = 0, j = 0, Float: x = 0.0, Float: y = base_y_pos; j < ROWS_COUNT; ++j, y -= y_size) { for (i = 0, x = base_x_pos; i < COL_COUNT; ++i, x += x_size, ++index) { new up = index - COL_COUNT; new right = index + 1; new down = index + COL_COUNT; new left = index - 1; (up < 0) ? 0 : up, (index % COL_COUNT) ? right : -1, down, (left % COL_COUNT) ? left : (((index - 1) / (7 * COL_COUNT)) + CELLS_COUNT + 4), index ); } } base_x_pos -= X_SIZE * 0.5; base_y_pos += Y_SIZE * 0.5; printf(" {%2.f, %2.f, %3d, %3d, -1, -1}, // %3d - 3 to 1", base_x_pos + X_SIZE * 0.5, base_y_pos - Y_SIZE * 12.5, index - COL_COUNT, index + 1, index); // 37 - 3 to 1 index++; printf(" {%2.f, %2.f, %3d, %3d, -1, %3d}, // %3d - 3 to 1", base_x_pos + X_SIZE * 1.5, base_y_pos - Y_SIZE * 12.5, index - 4, index + 1, index - 1, index); // 38 - 3 to 1 index++; printf(" {%2.f, %2.f, %3d, -1, -1, %3d}, // %3d - 3 to 1", base_x_pos + X_SIZE * 2.5, base_y_pos - Y_SIZE * 12.5, index - 3, index - 1, index); // 39 - 3 to 1 index++; printf(" {%2.f, %2.f, -1, 1, %3d, %3d}, // %3d - 1st 112", base_x_pos - X_SIZE * 0.5, base_y_pos - Y_SIZE * 2.0, index + 1, index + 3, index); // 40 - 1st 112 index++; printf(" {%2.f, %2.f, %3d, 13, %3d, %3d}, // %3d - 2nd 112", base_x_pos - X_SIZE * 0.5, base_y_pos - Y_SIZE * 6.0, index - 1, index + 1, index + 4, index); // 41 - 2nd 112 index++; printf(" {%2.f, %2.f, %3d, 25, -1, %3d}, // %3d - 3rd 112", base_x_pos - X_SIZE * 0.5, base_y_pos - Y_SIZE * 10.0, index - 1, index + 5, index); // 42 - 3rd 112 index++; printf(" {%2.f, %2.f, -1, %3d, %3d, -1}, // %3d - 1 to 18", base_x_pos - X_SIZE * 1.5, base_y_pos - Y_SIZE * 1.0, index - 3, index + 1, index); // 43 - 1 to 18 index++; printf(" {%2.f, %2.f, %3d, %3d, %3d, -1}, // %3d - EVEN", base_x_pos - X_SIZE * 1.5, base_y_pos - Y_SIZE * 3.0, index - 1, index - 4, index + 1, index); // 44 - EVEN index++; printf(" {%2.f, %2.f, %3d, %3d, %3d, -1}, // %3d - RED", base_x_pos - X_SIZE * 1.5, base_y_pos - Y_SIZE * 5.0, index - 1, index - 4, index + 1, index); // 45 - RED index++; printf(" {%2.f, %2.f, %3d, %3d, %3d, -1}, // %3d - BLACK", base_x_pos - X_SIZE * 1.5, base_y_pos - Y_SIZE * 7.0, index - 1, index - 5, index + 1, index); // 46 - BLACK index++; printf(" {%2.f, %2.f, %3d, %3d, %3d, -1}, // %3d - ODD", base_x_pos - X_SIZE * 1.5, base_y_pos - Y_SIZE * 9.0, index - 1, index - 5, index + 1, index); // 47 - ODD index++; printf(" {%2.f, %2.f, %3d, %3d, -1, -1} // %3d - 19 to 36", base_x_pos - X_SIZE * 1.5, base_y_pos - Y_SIZE * 11.0, index - 1, index - 6, index); // 48 - 19 to 36 index++; }
Прогоняешь этот код, на выходе получаешь готовые оффсеты. Осталось сделать логику для управления фишками и поддержку направлений, если с этим тоже есть проблемы, то отпишешь сюда
Последний раз редактировалось tnc; 24.05.2021 в 21:14.
Pa4enka (24.05.2021)
Показывай код перемещения фишек.
P.S: Только не скрином
PHP код:
new fieldSlot = roulettePlayer[playerid][tableField] = random(sizeof(rouletteField));
roulettePlayer[playerid][chipID] = CreateDynamicObject(chip, rouletteTable[table][posX], rouletteTable[table][posY], rouletteTable[table][posZ] + TABLE_CHIP_OFFSET_Z,
rouletteTable[table][rotX], rouletteTable[table][rotY], rouletteTable[table][rotZ], rouletteTable[table][virtualWorldID], rouletteTable[table][interiorID]);
camX = rouletteTable[table][posX], camY = rouletteTable[table][posY];
camX += (rouletteField[fieldSlot][offX] * floatsin(-rouletteTable[table][rotZ], degrees));
camY += (rouletteField[fieldSlot][offY] * floatcos(-rouletteTable[table][rotZ], degrees));
AttachDynamicObjectToObject(roulettePlayer[playerid][chipID], rouletteTable[table][objectID], camX, camY, TABLE_CHIP_OFFSET_Z, rouletteTable[table][rotX],
rouletteTable[table][rotY], rouletteTable[table][rotZ]);
Streamer_Update(playerid);
Последний раз редактировалось XrenoTeHb; 25.05.2021 в 09:12.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)