No ale jak znasz wysokość i szerokość, to nadal jak wyżej.
A jak nie znasz, to ciężka sprawa... chyba, ze to jedyny kształt w tym gridzie ? Wtedy będzie tak:
var _w = ds_grid_width(index);
var _h = ds_grid_height(index);
var xstart = _w, xend = 0, ystart = _h, yend = 0;
for(var i = 0; i < _w; i++) {
for(var j = 0; j < _h; j++) {
if index[# i, j] == 1 {
xstart = min(xstart, i);
xend = max(xend, i);
ystart = min(ystart, j);
yend = max(yend, j);
}
}
}
// ok, mamy juz prostokat w ktorym jest figura, teraz przesuwamy
var offsetx = -1, offsety = -20;
for(var i = xstart; i < xend; i++;) {
for(var j = ystart; j < _yend; j++) {
if index[# i, j] == 1 {
index[# ((i + _w + xoffset) % _w), ((j + _h + yoffset) % _h)] = 1;
index[# i, j] = 0;
/* robimy operację modulo, żeby przenosiło na drugi koniec grida w przypadku, gdy np. litera zaczyna się na osi X w pozycji 2, a ustawisz offset na -5.
ponieważ jednak modulo z liczb ujemnych nie jest tylko dopisaniem znaku - przed wartością, dodajemy pełną wysokość
np. 3 % 10 = 3, ale -3 % 10 = 7, wystarczy jednak dodawać zawsze 10 do liczby i po sprawie (-3 + 10) % 10 = 3. */
}
}
}
tu jest jeszcze taki jeden problem, że jak szerokość litery jest taka, ze po odjęciu offsetu nachodzi na siebie z drugiej strony, no to skasuje się część litery niestety - trzeba by wtedy do nowego grida po prostu przenosić i stary kasować.