#include <acknex.h>
#include <default.c>
#define GRID_size 10
#define GRID_cellsize 32
var GridMoveSquares = 3; // stores size of movement diameter
var GridArray[GRID_size][GRID_size]; // stores size of grid
// visual debug representation variables
var current_row = 3;
var current_col = 1;
// function that resets every GRID value
function resetGrid() {
var X_index = 0;
var Y_index = 0;
for(X_index=0; X_index<GRID_size; X_index++) {
for(Y_index=0; Y_index<GRID_size; Y_index++) {
GridArray[X_index][Y_index] = 0;
}
}
}
// function that visually represents the GRID data
function drawGridData() {
var column_index = 0;
var row_index = 0;
for(column_index=0; column_index<GRID_size; column_index++) {
for(row_index=0; row_index<GRID_size; row_index++) {
if(GridArray[column_index][row_index] == 0) {
draw_text(str_for_num(NULL, GridArray[column_index][row_index]), GRID_cellsize*column_index, GRID_cellsize*row_index, vector(255,255,255));
} else {
draw_text(str_for_num(NULL, GridArray[column_index][row_index]), GRID_cellsize*column_index, GRID_cellsize*row_index, vector(0,0,255));
}
}
}
}
// actually calculate the cells that can be moved on
function setMoveGrid(var row, var col) {
var column_index = 0;
var row_index = 0;
var clampedIndex;
resetGrid(); // reset
for(column_index=GridMoveSquares; column_index>=0; column_index--) {
// fill right hand side of column
clampedIndex = clamp(col+column_index, 0, GRID_size-1);
GridArray[row][clampedIndex] = column_index;
for(row_index=GridMoveSquares; row_index>=column_index; row_index--) {
GridArray[clamp(row+(row_index-column_index), 0, GRID_size-1)][clampedIndex] = row_index;
GridArray[clamp(row-(row_index-column_index), 0, GRID_size-1)][clampedIndex] = row_index;
}
// fill left hand side of column
clampedIndex = clamp(col-column_index, 0, GRID_size-1);
GridArray[row][clampedIndex] = column_index;
for(row_index=GridMoveSquares; row_index>=column_index; row_index--) {
GridArray[clamp(row+(row_index-column_index), 0, GRID_size-1)][clampedIndex] = row_index;
GridArray[clamp(row-(row_index-column_index), 0, GRID_size-1)][clampedIndex] = row_index;
}
}
}
function getMouseInput() {
current_row = clamp(integer(abs(mouse_pos.x) / GRID_cellsize), 0, GRID_size-1);
current_col = clamp(integer(abs(mouse_pos.y) / GRID_cellsize), 0, GRID_size-1);
GridMoveSquares += (mickey.z/120); GridMoveSquares = clamp(GridMoveSquares, 0, GRID_size);
}
function main() {
mouse_mode = 4;
resetGrid(); // reset GRID
while(1) {
getMouseInput();
setMoveGrid(current_row,current_col); // calculate new GRID data
drawGridData(); // debug draw grid
wait(1);
}
}