Changeset 266


Ignore:
Timestamp:
Jan 23, 2011, 5:47:21 PM (10 years ago)
Author:
sam
Message:

Add the pop animation frame to disappearing monsterz.

Location:
trunk/monsterz
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/monsterz/board.cpp

    r264 r266  
    110110    for (Mash **it = &data->mashes; *it; )
    111111    {
    112         if ((*it)->IsFinished())
     112        if ((*it)->IsDead())
    113113        {
    114114            Ticker::Unref(*it);
     
    303303        for (int i = 0; i < 8; i++)
    304304            Ticker::Unref(data->pieces[i][j]);
     305    while (data->mashes)
     306    {
     307        Ticker::Unref(data->mashes);
     308        data->mashes = data->mashes->nextmash;
     309    }
    305310    Tiler::Deregister(data->board);
    306311    Tiler::Deregister(data->screen);
  • trunk/monsterz/mash.cpp

    r265 r266  
    3333    Piece *pieces[8 * 8];
    3434    Int2 cells[8 * 8];
    35     int npieces, finished;
     35    int npieces;
     36
     37    enum
     38    {
     39        WAIT,
     40        POP,
     41        DEAD,
     42    }
     43    state;
    3644};
    3745
     
    4755    Ticker::Ref(game);
    4856    data->npieces = 0;
    49     data->finished = 0;
     57    data->state = MashData::WAIT;
    5058}
    5159
     
    5765}
    5866
    59 int Mash::IsFinished() const
     67int Mash::IsDead() const
    6068{
    61     return data->finished;
     69    return data->state == MashData::DEAD;
    6270}
    6371
     
    6674    Entity::TickGame(deltams);
    6775
    68     if (data->finished)
    69         return;
     76    switch (data->state)
     77    {
     78    case MashData::WAIT:
     79    {
     80        int inplace = 1;
     81        for (int n = 0; n < data->npieces && inplace; n++)
     82        {
     83            Int2 dest = data->pieces[n]->GetCell() * 48;
     84            Int2 cur = data->pieces[n]->GetPos();
    7085
    71     int inplace = 1;
    72     for (int n = 0; n < data->npieces && inplace; n++)
     86            /* If piece is still too high, don't start the animation */
     87            if (cur.y - dest.y > 2)
     88                inplace = 0;
     89        }
     90
     91        if (inplace)
     92        {
     93            for (int n = 0; n < data->npieces; n++)
     94                data->pieces[n]->Pop();
     95            data->state = MashData::POP;
     96        }
     97        break;
     98    }
     99    case MashData::POP:
    73100    {
    74         Int2 dest = data->pieces[n]->GetCell() * 48;
    75         Int2 cur = data->pieces[n]->GetPos();
    76 
    77         /* If piece is still too high, don't start the animation */
    78         if (cur.y - dest.y > 12)
    79             inplace = 0;
     101        int alldead = 1;
     102        for (int n = 0; n < data->npieces && alldead; n++)
     103            if (!data->pieces[n]->IsDead())
     104                alldead = 0;
     105        if (alldead)
     106        {
     107            for (int n = 0; n < data->npieces; n++)
     108                Ticker::Unref(data->pieces[n]);
     109            data->npieces = 0;
     110            data->state = MashData::DEAD;
     111        }
     112        break;
    80113    }
    81 
    82     if (inplace)
    83     {
    84         for (int n = 0; n < data->npieces; n++)
    85             Ticker::Unref(data->pieces[n]);
    86         data->finished = 1;
     114    case MashData::DEAD:
     115        break;
    87116    }
    88117}
     
    95124Mash::~Mash()
    96125{
     126    for (int n = 0; n < data->npieces; n++)
     127        Ticker::Unref(data->pieces[n]);
    97128    Ticker::Unref(data->game);
    98129    delete data;
  • trunk/monsterz/mash.h

    r264 r266  
    2525
    2626    void AddPiece(Piece *piece);
    27     int IsFinished() const;
     27    int IsDead() const;
    2828
    2929protected:
  • trunk/monsterz/piece.cpp

    r263 r266  
    4242        UNGRAB,
    4343        MOVE,
     44        POP,
     45        DEAD,
    4446    }
    4547    state;
     
    8789}
    8890
     91int Piece::IsDead() const
     92{
     93    return data->state == PieceData::DEAD;
     94}
     95
    8996int Piece::Blink()
    9097{
     
    102109int Piece::Pop()
    103110{
    104     return 0;
     111    switch (data->state)
     112    {
     113    case PieceData::IDLE:
     114    case PieceData::BLINK:
     115    case PieceData::GRAB:
     116    case PieceData::UNGRAB:
     117    case PieceData::MOVE:
     118    case PieceData::POP:
     119        data->state = PieceData::POP;
     120        data->timer = 400.0f;
     121        return 1;
     122    default:
     123        return 0;
     124    }
    105125}
    106126
     
    177197    case PieceData::UNGRAB:
    178198    case PieceData::MOVE:
     199    {
    179200        data->timer += deltams;
    180201        Int2 trip = data->dst - data->src;
     
    190211        break;
    191212    }
     213    case PieceData::POP:
     214        data->timer -= deltams;
     215        if (data->timer < 0.0f)
     216            data->state = PieceData::DEAD;
     217        break;
     218    case PieceData::DEAD:
     219        break;
     220    }
    192221    Entity::TickGame(deltams);
    193222}
     
    222251        z = 3;
    223252        break;
    224     }
    225 
    226     data->game->GetScene()->AddTile((data->tiler << 16) | id, x, y, z, 0);
     253    case PieceData::POP:
     254        id = data->id + 4;
     255        break;
     256    case PieceData::DEAD:
     257        break;
     258    }
     259
     260    if (data->state != PieceData::DEAD)
     261        data->game->GetScene()->AddTile((data->tiler << 16) | id, x, y, z, 0);
    227262
    228263    if (data->state == PieceData::GRAB)
  • trunk/monsterz/piece.h

    r263 r266  
    2929    int GetId() const;
    3030
     31    int IsDead() const;
     32
    3133    int Blink();
    3234    int Pop();
Note: See TracChangeset for help on using the changeset viewer.