public nivel(int val_, int sizex_, int sizey_) { horizontal = null; vertical = null; val = val_; sizex = sizex_; sizey = sizey_; sup = null; inf = null; }
//insertar una unidad en el nivel public void insertar(unit nuevo, int x, int y) { //no realizar acciones si las coordenadas están afuera del tamaño del tablero if (x > this.sizex) { return; } if (y > this.sizey) { return; } if (horizontal == null) { horizontal = new coord(); } if (vertical == null) { vertical = new coord(); } //insertar en las coordenadas en x pos tempx = horizontal.buscar(x); if (tempx == null) { tempx = horizontal.insertar(x); //insertar nueva coordenada en x } unit ret = tempx.buscar(x, "X"); if (ret == null) { //obtener el primer valor en la columna de tempx ret = tempx.primero; if (ret == null) { tempx.primero = nuevo; } else { //insertar al inicio en la columna de tempx if (ret.y > nuevo.y) { ret.arriba = nuevo; nuevo.abajo = ret; tempx.primero = nuevo; } else {//insertar al medio while (ret.abajo != null) { if (ret.abajo.y > nuevo.y) { nuevo.abajo = ret.abajo; nuevo.arriba = ret; ret.abajo.arriba = nuevo; ret.abajo = nuevo; break; } else { ret = ret.abajo; } //insertar al final if (ret.abajo == null) { ret.abajo = nuevo; nuevo.arriba = ret; } } } } } //insertar en las coordenadas en y pos tempy = vertical.buscar(y); if (tempy == null) { tempy = vertical.insertar(y); //insertar nueva coordenada en x } unit rety = tempy.buscar(y, "Y"); if (rety == null) { //obtener el primer valor en la columna de tempx rety = tempy.primero; if (rety == null) { tempy.primero = nuevo; } else { //insertar al inicio en la columna de tempx if (rety.x > nuevo.x) { rety.izq = nuevo; nuevo.der = rety; tempy.primero = nuevo; } else {//insertar al medio while (rety.der != null) { if (rety.der.x > nuevo.x) { nuevo.der = rety.der; nuevo.izq = rety; rety.der.izq = nuevo; rety.der = nuevo; break; } else { rety = rety.der; } //insertar al final if (rety.der == null) { rety.der = nuevo; nuevo.izq = rety; } } } } } }