Changeset 274


Ignore:
Timestamp:
Jan 24, 2011, 2:45:36 AM (10 years ago)
Author:
sam
Message:

Implement above/below pieces.

Location:
trunk/monsterz
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/monsterz/board.cpp

    r273 r274  
    7676            int id = rand() % 7;
    7777            data->pieces[i][j] = new Piece(game, Int2(i, j), 25 + 5 * id);
     78            if (j)
     79                data->pieces[i][j]->SetBelow(data->pieces[i][j - 1]);
    7880            Ticker::Ref(data->pieces[i][j]);
    7981        }
     
    8486        for (int j = 0; j < 8; j++)
    8587            for (int i = 0; i < 8; i++)
     88            {
     89                data->pieces[i][j]->SetBelow(NULL);
    8690                Ticker::Unref(data->pieces[i][j]);
     91            }
    8792        goto restart;
    8893    }
     
    244249            mash->AddPiece(data->pieces[i][j]);
    245250
    246             Int2 newpos = Int2(i * 48, data->pieces[i][7]->GetPos().y + 48);
     251            Piece *below = data->pieces[i][7];
    247252
    248253            for (int j2 = j + 1; j2 < 8; j2++)
     
    253258                list[i][j2 - 1] = list[i][j2];
    254259            }
     260            Int2 newpos = Int2(i * 48, below->GetPos().y + 48);
    255261            data->pieces[i][7] = new Piece(data->game, Int2(i, 7), 25 + 5 * (rand() % 7));
     262            data->pieces[i][7]->SetBelow(below);
    256263            data->pieces[i][7]->SetPos(newpos);
    257264            data->pieces[i][7]->Goto(Int2(i, 7) * 48, 0.1f);
     
    302309    for (int j = 0; j < 8; j++)
    303310        for (int i = 0; i < 8; i++)
     311        {
     312            data->pieces[i][j]->SetBelow(NULL);
    304313            Ticker::Unref(data->pieces[i][j]);
     314        }
    305315    while (data->mashes)
    306316    {
  • trunk/monsterz/mash.cpp

    r266 r274  
    106106        {
    107107            for (int n = 0; n < data->npieces; n++)
     108            {
     109                /* Remove links for this piece */
     110                Piece *above = data->pieces[n]->GetAbove();
     111                Piece *below = data->pieces[n]->GetBelow();
     112                data->pieces[n]->SetAbove(NULL);
     113                data->pieces[n]->SetBelow(NULL);
     114                /* If there is a new link to create, create it */
     115                if (above && below)
     116                    above->SetBelow(below);
     117                /* Give away references to this piece */
    108118                Ticker::Unref(data->pieces[n]);
     119            }
    109120            data->npieces = 0;
    110121            data->state = MashData::DEAD;
  • trunk/monsterz/piece.cpp

    r271 r274  
    3030private:
    3131    Game *game;
     32    Piece *above, *below;
    3233    int tiler;
    3334    Int2 cell, pos, src, dst;
     
    5758    data->game = game;
    5859    Ticker::Ref(game);
     60    data->above = NULL;
     61    data->below = NULL;
    5962    data->tiler = Tiler::Register(PNG_TILES, 48, 48, 1.0f);
    6063    data->cell = cell;
     
    8790{
    8891    return data->id;
     92}
     93
     94void Piece::SetAbove(Piece *above)
     95{
     96    Piece *old = data->above;
     97
     98    if (above == old)
     99        return;
     100
     101    if (old)
     102        Ticker::Unref(old);
     103    data->above = above;
     104    if (above)
     105        Ticker::Ref(above);
     106
     107    if (old)
     108        old->SetBelow(NULL);
     109    if (above)
     110        above->SetBelow(this);
     111}
     112
     113Piece *Piece::GetAbove() const
     114{
     115    return data->above;
     116}
     117
     118void Piece::SetBelow(Piece *below)
     119{
     120    Piece *old = data->below;
     121
     122    if (below == old)
     123        return;
     124
     125    if (old)
     126        Ticker::Unref(old);
     127    data->below = below;
     128    if (below)
     129        Ticker::Ref(below);
     130
     131    if (old)
     132        old->SetAbove(NULL);
     133    if (below)
     134        below->SetAbove(this);
     135}
     136
     137Piece *Piece::GetBelow() const
     138{
     139    return data->below;
    89140}
    90141
     
    265316Piece::~Piece()
    266317{
     318    if (data->above)
     319        Ticker::Unref(data->above);
     320    if (data->below)
     321        Ticker::Unref(data->below);
    267322    Ticker::Unref(data->game);
    268323    Tiler::Deregister(data->tiler);
  • trunk/monsterz/piece.h

    r266 r274  
    2929    int GetId() const;
    3030
     31    void SetAbove(Piece *below);
     32    Piece *GetAbove() const;
     33    void SetBelow(Piece *below);
     34    Piece *GetBelow() const;
     35
    3136    int IsDead() const;
    3237
Note: See TracChangeset for help on using the changeset viewer.