Changeset 790


Ignore:
Timestamp:
Jul 23, 2011, 11:14:40 PM (9 years ago)
Author:
sam
Message:

tileset: replace the Tiler ID system with real TileSet objects. The only
thing that is still broken is the Layer <--> Map interface.

Location:
trunk
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/deushax/debugsprite.cpp

    r785 r790  
    2626private:
    2727    Game *game;
    28     int tiler;
     28    TileSet *tileset;
    2929    vec3 pos;
    3030};
     
    3939    data->game = game;
    4040    Ticker::Ref(game);
    41     data->tiler = Tiler::Register("deushax/art/test/character-dress.png",
    42                                   32, 0, sqrtf(2));
     41    data->tileset = Tiler::Register("deushax/art/test/character-dress.png",
     42                                    32, 0, sqrtf(2));
    4343    data->pos = vec3(320, 206, 0);
    4444}
     
    5858    vec3i pos = (vec3i)data->pos;
    5959
    60     Scene::GetDefault()->AddTile((data->tiler << 16) | 31,
     60    Scene::GetDefault()->AddTile(data->tileset, 31,
    6161                                 pos.x - 16, pos.y, pos.z, 1);
    62     Scene::GetDefault()->AddTile((data->tiler << 16) | 15,
     62    Scene::GetDefault()->AddTile(data->tileset, 15,
    6363                                 pos.x - 16, pos.y, pos.z + 32, 1);
    6464}
     
    6767{
    6868    Ticker::Unref(data->game);
    69     Tiler::Deregister(data->tiler);
     69    Tiler::Deregister(data->tileset);
    7070    delete data;
    7171}
  • trunk/monsterz/board.cpp

    r759 r790  
    4444    int minnpieces, npieces, maxnpieces;
    4545
    46     int screen, board, tiles, icons;
     46    TileSet *screen, *board, *tiles, *icons;
    4747    int click, whip;
    4848
     
    254254    Entity::TickDraw(deltams);
    255255
    256     Scene::GetDefault()->AddTile((data->board << 16) | 0,
     256    Scene::GetDefault()->AddTile(data->board, 0,
    257257                                 position.x, position.y, 1, 0);
    258     Scene::GetDefault()->AddTile((data->screen << 16) | 0, 0, 0, 10, 0);
     258    Scene::GetDefault()->AddTile(data->screen, 0, 0, 0, 10, 0);
    259259
    260260    switch (data->game)
  • trunk/monsterz/interface.cpp

    r786 r790  
    3737    Title *title;
    3838    Board *board;
    39     int tiles;
     39    TileSet *tiles;
    4040
    4141    enum
     
    100100    {
    101101        vec2i m = mouse + vec2i(-6, 6 - 48);
    102         Scene::GetDefault()->AddTile((data->tiles << 16) | 22, m.x, m.y, 30, 0);
     102        Scene::GetDefault()->AddTile(data->tiles, 22, m.x, m.y, 30, 0);
    103103    }
    104104}
  • trunk/monsterz/piece.cpp

    r759 r790  
    3535    Piece::piece_t piece;
    3636
    37     int tiler;
     37    TileSet *tileset;
    3838    Emitter *emitter;
    3939    Piece *above, *below;
     
    9494    case PIECE_HUNT:
    9595        data->size = 48;
    96         data->tiler = Tiler::Register(PNG_TILES, data->size, 0, 1.0f);
     96        data->tileset = Tiler::Register(PNG_TILES, data->size, 0, 1.0f);
    9797        data->id = 80 + 20 * id;
    9898        break;
     
    383383
    384384    if (data->state != PieceData::DEAD)
    385         Scene::GetDefault()->AddTile((data->tiler << 16) | id, x, y, z, 0);
     385        Scene::GetDefault()->AddTile(data->tileset, id, x, y, z, 0);
    386386
    387387    if (data->state == PieceData::GRAB && Platform::GetMouseCount())
    388         Scene::GetDefault()->AddTile((data->tiler << 16) | 0, x, y, 9, 0);
     388        Scene::GetDefault()->AddTile(data->tileset, 0, x, y, 9, 0);
    389389}
    390390
     
    396396        Ticker::Unref(data->below);
    397397    Ticker::Unref(data->emitter);
    398     Tiler::Deregister(data->tiler);
     398    Tiler::Deregister(data->tileset);
    399399    delete data;
    400400}
  • trunk/monsterz/thumbs.cpp

    r735 r790  
    3333
    3434private:
     35    TileSet *icons;
    3536    int npieces;
    36     int icons;
    3737
    3838    Text *text[MAX_PIECES];
     
    7474    {
    7575        vec2i p = vec2i(459, 372 - 27 * n);
    76         Scene::GetDefault()->AddTile((data->icons << 16) | n, p.x, p.y, 11, 0);
     76        Scene::GetDefault()->AddTile(data->icons, n, p.x, p.y, 11, 0);
    7777    }
    7878}
  • trunk/monsterz/title.cpp

    r758 r790  
    4040
    4141private:
    42     int title, stars, clouds, eagle, logo, ground;
    43     int anim[6];
    44     int event[7];
     42    TileSet *title, *stars, *clouds, *eagle, *logo, *ground;
     43    TileSet *anim[6];
     44    TileSet *event[7];
    4545
    4646    enum
     
    279279    /* The background, always here. */
    280280    int backid = (int)data->period;
    281     Scene::GetDefault()->AddTile((data->title << 16) | backid,
     281    Scene::GetDefault()->AddTile(data->title, backid,
    282282                                 data->ground_pos.x, data->ground_pos.y, 1, 0);
    283283
     
    285285    if (data->period != TitleData::DAY)
    286286    {
    287         Scene::GetDefault()->AddTile((data->stars << 16) | 0,
     287        Scene::GetDefault()->AddTile(data->stars, 0,
    288288                                     24 + 0, 72 + 240, 2, 0);
    289289    }
     
    295295    {
    296296        int cloudid = n * 4 + cloudoff;
    297         Scene::GetDefault()->AddTile((data->clouds << 16) | cloudid,
     297        Scene::GetDefault()->AddTile(data->clouds, cloudid,
    298298                                     24 + data->cloudpos[n].x,
    299299                                     72 + data->cloudpos[n].y, 2, 0);
    300         Scene::GetDefault()->AddTile((data->clouds << 16) | cloudid,
     300        Scene::GetDefault()->AddTile(data->clouds, cloudid,
    301301                                     24 + data->cloudpos[n].x - 384.0f,
    302302                                     72 + data->cloudpos[n].y, 2, 0);
     
    312312        int x = (DURATION_EAGLE - data->eagletimer) * 384 / DURATION_EAGLE;
    313313        int y = data->eagley + 5.0f * sinf(phase);
    314         Scene::GetDefault()->AddTile((data->eagle << 16) | eagleid,
     314        Scene::GetDefault()->AddTile(data->eagle, eagleid,
    315315                                     24 + x, 72 + y, 3, 0);
    316316    }
     
    320320         x < Video::GetSize().x; x += 384)
    321321    {
    322         Scene::GetDefault()->AddTile((data->ground << 16) | 0,
     322        Scene::GetDefault()->AddTile(data->ground, 0,
    323323                                     x, data->ground_pos.y, 0, 0);
    324324    }
    325325
    326326    /* Maybe an animation? */
    327     int tiler = 0;
     327    TileSet *tiler = NULL;
    328328    int id = 0;
    329329    vec2i pos = 0;
     
    351351    }
    352352    if (tiler)
    353         Scene::GetDefault()->AddTile((tiler << 16) | id,
     353        Scene::GetDefault()->AddTile(tiler, id,
    354354                                     data->ground_pos.x + pos.x,
    355355                                     data->ground_pos.y + pos.y, 1, 0);
    356356
    357357    /* The logo, on top of the rest. */
    358     Scene::GetDefault()->AddTile((data->logo << 16) | 0, 26, 250, 3, 0);
     358    Scene::GetDefault()->AddTile(data->logo, 0, 26, 250, 3, 0);
    359359}
    360360
  • trunk/src/emitter.cpp

    r735 r790  
    3131
    3232private:
    33     int tiler;
     33    TileSet *tileset;
    3434    vec3 gravity;
    3535    int particles[MAX_PARTICLES];
     
    4343 */
    4444
    45 Emitter::Emitter(int tiler, vec3 gravity)
     45Emitter::Emitter(TileSet *tileset, vec3 gravity)
    4646  : data(new EmitterData())
    4747{
    48     data->tiler = tiler;
     48    data->tileset = tileset;
    4949    data->gravity = gravity;
    5050    data->nparticles = 0;
     
    7474
    7575    for (int i = 0; i < data->nparticles; i++)
    76         Scene::GetDefault()->AddTile((data->tiler << 16) | data->particles[i],
     76        Scene::GetDefault()->AddTile(data->tileset, data->particles[i],
    7777                                     data->positions[i].x,
    7878                                     data->positions[i].y,
  • trunk/src/emitter.h

    r748 r790  
    1818
    1919#include "entity.h"
     20#include "tileset.h"
    2021
    2122namespace lol
     
    2728{
    2829public:
    29     Emitter(int tiler, vec3 gravity);
     30    Emitter(TileSet *tileset, vec3 gravity);
    3031    virtual ~Emitter();
    3132
  • trunk/src/font.cpp

    r787 r790  
    3333private:
    3434    char *name;
    35     int tiler;
     35    TileSet *tileset;
    3636    vec2i size;
    3737};
     
    4747    sprintf(data->name, "<font> %s", path);
    4848
    49     data->tiler = Tiler::Register(path, 0, 16, 1.0f);
    50     data->size = Tiler::GetSize(data->tiler, 0);
     49    data->tileset = Tiler::Register(path, 0, 16, 1.0f);
     50    data->size = data->tileset->GetSize(0);
    5151
    5252    drawgroup = DRAWGROUP_BEFORE;
     
    5555Font::~Font()
    5656{
    57     Tiler::Deregister(data->tiler);
     57    Tiler::Deregister(data->tileset);
    5858    free(data->name);
    5959    delete data;
     
    7979
    8080        if (ch != ' ')
    81             scene->AddTile((data->tiler << 16) | (ch & 255),
     81            scene->AddTile(data->tileset, ch & 255,
    8282                           pos.x, pos.y, pos.z, 0);
    8383
  • trunk/src/layer.cpp

    r758 r790  
    4848void Layer::Render(int x, int y, int z)
    4949{
     50    Log::Error("FIXME: Layer::Render no longer works\n");
     51#if 0
    5052    Scene *scene = Scene::GetDefault();
    5153    for (int j = 0; j < height; j++)
     
    5557                               x + i * 32, y + j * 32 - altitude,
    5658                               altitude + z, orientation);
     59#endif
    5760}
    5861
  • trunk/src/map.cpp

    r758 r790  
    3434    friend class Map;
    3535
    36     static int const MAX_TILERS = 128;
     36    static int const MAX_TILESETS = 128;
    3737
    3838private:
    39     int tilers[MAX_TILERS];
     39    TileSet *tilesets[MAX_TILESETS];
    4040    int ntilers;
    4141
     
    6060
    6161    char tmp[BUFSIZ];
    62     int gids[MapData::MAX_TILERS];
     62    int gids[MapData::MAX_TILESETS];
    6363    uint32_t *tiles = NULL;
    6464    int level = 0, orientation = 0, ntiles = 0;
     
    9696                             || id < gids[n + 1])
    9797                        {
    98                             code = (data->tilers[n] << 16) | (id - gids[n]);
     98                            Log::Error("tilesets no longer work this way");
     99                            //code = (data->tilesets[n] << 16) | (id - gids[n]);
    99100                            break;
    100101                        }
     
    133134        {
    134135            /* This is a tileset image file. Associate it with firstgid. */
    135             data->tilers[data->ntilers] = Tiler::Register(str, 32, 0,
     136            data->tilesets[data->ntilers] = Tiler::Register(str, 32, 0,
    136137                                                          sqrtf(2));
    137138            data->ntilers++;
     
    159160{
    160161    for (int i = 0; i < data->ntilers; i++)
    161         Tiler::Deregister(data->tilers[i]);
     162        Tiler::Deregister(data->tilesets[i]);
    162163    for (int i = 0; i < data->nlayers; i++)
    163164        delete data->layers[i];
  • trunk/src/scene.cpp

    r784 r790  
    2929struct Tile
    3030{
    31     uint32_t prio, code;
    32     int x, y, z, o;
     31    TileSet *tileset;
     32    uint32_t prio;
     33    int id, x, y, z, o;
    3334};
    3435
     
    114115}
    115116
    116 void Scene::AddTile(uint32_t code, int x, int y, int z, int o)
     117void Scene::AddTile(TileSet *tileset, int id, int x, int y, int z, int o)
    117118{
    118119    if ((data->ntiles % 1024) == 0)
     
    121122    /* FIXME: this sorting only works for a 45-degree camera */
    122123    data->tiles[data->ntiles].prio = -y - 2 * 32 * z + (o ? 0 : 32);
    123     data->tiles[data->ntiles].code = code;
     124    data->tiles[data->ntiles].tileset = tileset;
     125    data->tiles[data->ntiles].id = id;
    124126    data->tiles[data->ntiles].x = x;
    125127    data->tiles[data->ntiles].y = y;
     
    274276        /* Count how many quads will be needed */
    275277        for (n = i + 1; n < data->ntiles; n++)
    276             if (data->tiles[i].code >> 16 != data->tiles[n].code >> 16)
     278            if (data->tiles[i].tileset != data->tiles[n].tileset)
    277279                break;
    278280
     
    283285        for (int j = i; j < n; j++)
    284286        {
    285             Tiler::BlitTile(data->tiles[j].code, data->tiles[j].x,
    286                             data->tiles[j].y, data->tiles[j].z, data->tiles[j].o,
     287            data->tiles[i].tileset->BlitTile(data->tiles[j].id,
     288                            data->tiles[j].x, data->tiles[j].y,
     289                            data->tiles[j].z, data->tiles[j].o,
    287290                            vertex + 18 * (j - i), texture + 12 * (j - i));
    288291        }
     
    291294
    292295        /* Bind texture */
    293         Tiler::Bind(data->tiles[i].code);
     296        data->tiles[i].tileset->Bind();
    294297
    295298        /* Bind vertex, color and texture coordinate buffers */
  • trunk/src/scene.h

    r748 r790  
    1919#include <stdint.h>
    2020
     21#include "tileset.h"
     22
    2123namespace lol
    2224{
     
    3335    static void Reset();
    3436
    35     void AddTile(uint32_t code, int x, int y, int z, int o);
     37    void AddTile(TileSet *tileset, int id, int x, int y, int z, int o);
    3638    void Render();
    3739
  • trunk/src/tiler.cpp

    r787 r790  
    2828public:
    2929    TilerData()
    30 #if !LOL_RELEASE
    31       : lasterror(-1)
    32 #endif
    3330    { }
    3431
    3532private:
    3633    Dict tilesets;
    37 #if !LOL_RELEASE
    38     int lasterror;
    39 #endif
    4034}
    4135tilerdata;
     
    4741 */
    4842
    49 int Tiler::Register(char const *path, vec2i size, vec2i count, float dilate)
     43TileSet *Tiler::Register(char const *path, vec2i size, vec2i count,
     44                         float dilate)
    5045{
    5146    int id = data->tilesets.MakeSlot(path);
     47    TileSet *tileset = (TileSet *)data->tilesets.GetEntity(id);
    5248
    53     if (!data->tilesets.GetEntity(id))
     49    if (!tileset)
    5450    {
    55         TileSet *tileset = new TileSet(path, size, count, dilate);
     51        tileset = new TileSet(path, size, count, dilate);
    5652        data->tilesets.SetEntity(id, tileset);
    57 #if !LOL_RELEASE
    58         if (id == data->lasterror)
    59             data->lasterror = -1;
    60 #endif
    6153    }
    6254
    63     return id + 1; /* ID 0 is for the empty tileset */
     55    return tileset;
    6456}
    6557
    66 void Tiler::Deregister(int id)
     58void Tiler::Deregister(TileSet *tileset)
    6759{
    68     data->tilesets.RemoveSlot(id - 1); /* ID 0 is for the empty tileset */
    69 }
    70 
    71 vec2i Tiler::GetCount(int id)
    72 {
    73     TileSet *tileset = (TileSet *)data->tilesets.GetEntity(id - 1);
    74 #if !LOL_RELEASE
    75     if (!tileset)
    76     {
    77         Log::Error("getting count for null tiler #%i\n", id);
    78         return 0;
    79     }
    80 #endif
    81     return tileset->GetCount();
    82 }
    83 
    84 vec2i Tiler::GetSize(int id, int tileid)
    85 {
    86     TileSet *tileset = (TileSet *)data->tilesets.GetEntity(id - 1);
    87 #if !LOL_RELEASE
    88     if (!tileset)
    89     {
    90         Log::Error("getting size for null tiler #%i\n", id);
    91         return 0;
    92     }
    93 #endif
    94     return tileset->GetSize(tileid);
    95 }
    96 
    97 void Tiler::Bind(uint32_t code)
    98 {
    99     int id = (code >> 16) - 1; /* ID 0 is for the empty tileset */
    100 
    101     TileSet *tileset = (TileSet *)data->tilesets.GetEntity(id);
    102 #if !LOL_RELEASE
    103     if (!tileset)
    104     {
    105         if (id != data->lasterror)
    106             Log::Error("binding null tiler #%i\n", id);
    107         data->lasterror = id;
    108         return;
    109     }
    110 #endif
    111     tileset->Bind();
    112 }
    113 
    114 void Tiler::BlitTile(uint32_t code, int x, int y, int z, int o,
    115                      float *vertex, float *texture)
    116 {
    117     int id = (code >> 16) - 1; /* ID 0 is for the empty tileset */
    118 
    119     TileSet *tileset = (TileSet *)data->tilesets.GetEntity(id);
    120 #if !LOL_RELEASE
    121     if (!tileset)
    122     {
    123         if (id != data->lasterror)
    124             Log::Error("blitting to null tiler #%i\n", id);
    125         data->lasterror = id;
    126         return;
    127     }
    128 #endif
    129     tileset->BlitTile(code & 0xffff, x, y, z, o, vertex, texture);
     60    data->tilesets.RemoveSlot(tileset);
    13061}
    13162
  • trunk/src/tiler.h

    r787 r790  
    2020#include <stdint.h>
    2121
     22#include "tileset.h"
     23
    2224namespace lol
    2325{
     
    2628{
    2729public:
    28     static int Register(char const *path, vec2i size, vec2i count,
     30    static TileSet *Register(char const *path, vec2i size, vec2i count,
    2931                        float dilate);
    30     static void Deregister(int id);
    31 
    32     static vec2i GetCount(int id);
    33     static vec2i GetSize(int id, int tileid);
    34     static void Bind(uint32_t code);
    35     static void BlitTile(uint32_t code, int x, int y, int z, int o,
    36                          float *vertex, float *texture);
     32    static void Deregister(TileSet *);
    3733};
    3834
Note: See TracChangeset for help on using the changeset viewer.