Ignore:
Timestamp:
Jan 19, 2011, 9:33:25 PM (11 years ago)
Author:
sam
Message:

Pieces can now be grabbed around.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/monsterz/piece.cpp

    r230 r238  
    3131    Game *game;
    3232    int tiler;
    33     int i, j, id;
     33    int i, j, id, x, y;
    3434    float timer;
    3535
     
    3838        IDLE,
    3939        BLINK,
     40        GRAB,
     41        UNGRAB,
    4042    }
    4143    state;
     
    5456    data->i = i;
    5557    data->j = j;
     58    data->x = i * 48;
     59    data->y = j * 48;
    5660    data->id = id;
    5761    data->state = PieceData::IDLE;
    5862}
    5963
    60 void Piece::Blink()
     64int Piece::Blink()
    6165{
    62     if (data->state == PieceData::IDLE)
     66    switch (data->state)
    6367    {
     68    case PieceData::IDLE:
    6469        data->state = PieceData::BLINK;
    6570        data->timer = 400.0f;
     71        return 1;
     72    default:
     73        return 0;
     74    }
     75}
     76
     77int Piece::Grab(Int2 dir)
     78{
     79    switch (data->state)
     80    {
     81    case PieceData::IDLE:
     82    case PieceData::BLINK:
     83    case PieceData::GRAB:
     84        data->state = PieceData::GRAB;
     85        data->x += dir.x;
     86        data->y += dir.y;
     87        return 1;
     88    default:
     89        return 0;
     90    }
     91}
     92
     93int Piece::Ungrab()
     94{
     95    switch (data->state)
     96    {
     97    case PieceData::GRAB:
     98        data->state = PieceData::UNGRAB;
     99        return 1;
     100    default:
     101        return 0;
    66102    }
    67103}
     
    78114            data->state = PieceData::IDLE;
    79115        break;
     116    case PieceData::GRAB:
     117        break;
     118    case PieceData::UNGRAB:
     119        int dx = data->i * 48 - data->x;
     120        int dy = data->j * 48 - data->y;
     121        dx = dx + 2 / 3;
     122        dy = dy + 2 / 3;
     123        data->x += dx;
     124        data->y += dy;
     125        if (dx == 0 && dy == 0)
     126            data->state = PieceData::IDLE;
     127        break;
    80128    }
    81129    Entity::TickGame(deltams);
     
    87135
    88136    int id = data->id;
    89     int i = data->i;
    90     int j = data->j;
     137    int x = data->x + 24;
     138    int y = data->y + 177;
     139    int z = 2;
    91140    if (data->state == PieceData::BLINK)
    92         id++;
    93     data->game->GetScene()->AddTile((data->tiler << 16) | id,
    94                                     i * 48 + 24, j * 48 + 177, 2, 0);
     141        id = data->id + 1;
     142    if (data->state == PieceData::GRAB)
     143    {
     144        id = data->id + 1;
     145        z = 4;
     146    }
     147    data->game->GetScene()->AddTile((data->tiler << 16) | id, x, y, z, 0);
    95148}
    96149
Note: See TracChangeset for help on using the changeset viewer.