Saturday 28 May 2011

Elämä kehittyy edistymistään

Uutisia, koulun loputtua väsäsin kahdessa illassa uuden MEMAPPER - käyttöliittymän loppuun. Skriini on täällä. Käyttöliittymässä on napit layeroperaatioihin (lisää/poista/kopio/yhdistä layer), tilesettien tuontiin ja poistoon, ja lisäksi olen toteuttanut ToolBoxin niin, että ikkuna korostaa valitun työkalun vihreellä.

Mitä seuraavaksi? Kirjoitan tätä keskeltä mitä parhainta yötä, jossa Tässi suunnittelee PdN:llä hippiAnkkaTässiä, joten minunkin on luonnollisesti suunniteltava ja toteutettava jotain. Kun käyttöliittymä on valmiin näköinen, on luonnollista alkaa miettimään ohjelman datarakenteita. Mitä rakenteita ohjelma tarvitsee?

Rakenteen, joka säilyttää kaikki tilesetit muistissa.
Rakenteen pitäisi pystyä vastaanottamaan tileset ( .add(tileset);), ja palauttamaan ännäs tileset ( .get(tilesetin_nro);). Yllättäen tämän rakenteen pitää laajentua dynaamisesti, mutta se ei ole ongelma.

Tämä koostuu tileseteistä

Tilesetrakenteen
Tämä rakenne osaa palauttaa BufferedImagena/jossain muussa helposti työstettävässä muodossa jokaisen kartalta löytyvän tilen, ottaen parametreina tilen X:n ja Y:n tilesetiltä. Konstruktori voisi ottaa polun .png-tiedostoon, josta tileset sitten ladataan. Ja, kuten toitotettua, ohjelman pitäisi joka kohdassa tukea transparentteja .png-kuvia.

Tämä koostuu tileistä

Tile
Tilerakenne tuntee isäntätilesettinsä numeron, sijaintinsa ko. tilesetillä ja rotaationsa kartalla. Näiden tietojen perusteella pitäisi renderöijän osata piirtää kartan jokainen tile. Jokaista näistä arvoista pääsee käyttäjä muuttamaan.

Tämä on karttojen pienin yksittäinen komponentti

Layer
Layer on samantyyppinen rakenne, kuin tileset. Luodessa layerin koko määritetään, ja layer täytetään erityistileillä. Nämä erityistilet, joiden sijainti tilesetillä on (254,254), ovat täysin läpinäkyviä tilejä. Jokaisen layerin tilen sijaintia voi muuttaa antamalla layer-rakenteelle ensin x,y - arvot, jotka kertovat mistä päin karttaa haluttu tile löytyy, ja sitten muuttamalla palautuvan tilen sijaintia tilesetillä.

Yllättäen, Layeritkin koostuvat Tileistä.

Layerkokoelma
Säilöö Layerit melko samalla periaatteella, kuin tilesetrakenne. Enpä yllättyisi, vaikka Layerkokoelmalla ja Tilesetrakenteella olisi sama, geneerinen kantaluokka jonka päälle erottavat ominaisuudet on rakennettu (Enpä yllättyisi, vaikka käyttäisin oliokielten perusrakenteita :O OMFG)

Saatan olla erittäin paha, ja rikkoa pyhän kolminaisuuden sääntöä, jossa UI ja data pitää pitää erillään. Voi silti olla, että toteutan näille luokille data- ja käyttöliittymärajapinnat, ja käsittelen oliota ulkopuolelta vain rajapintojen kautta, toteuttaen näin piene erotuksen käyttölittymäsysteemien ja datan välille.

Ai miksi teen näin? Tämä mahdollistaisi sen, että kun kartan jonkun layerin jonkun tilen tila muuttuu, osaa systeemi automaattisesti kutsua karttapaneelin repaint()-metodia. Lisäksi minulla on suunnitteilla plugin-api, jonka toteutusta helpottaisi fiksu karttapaneeli. Ei siitä kuitenkaan vielä mitään. Nyt koodaamaan :P

No comments:

Post a Comment