Changeset 261


Ignore:
Timestamp:
Jan 22, 2011, 9:18:49 PM (10 years ago)
Author:
sam
Message:

Use a different speed when pieces are swapped and when they fall.

Location:
trunk/monsterz
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/monsterz/board.cpp

    r260 r261  
    2121#include "board.h"
    2222#include "piece.h"
     23#include "mash.h"
    2324#include "monsterz.h"
    2425
     
    3738    Piece *pieces[8][8];
    3839    Piece *grabbed;
     40    Mash *mashes;
    3941    Int2 src_cell, dst_cell;
    4042
     
    8688    }
    8789
     90    data->mashes = NULL;
    8891    data->nextblink = 0.0f;
    8992    data->state = BoardData::IDLE;
     
    145148                if (data->dst_cell != Int2(-1))
    146149                    data->pieces[data->dst_cell.i]
    147                                 [data->dst_cell.j]->Goto(data->dst_cell * 48);
     150                                [data->dst_cell.j]->Goto(data->dst_cell * 48,
     151                                                         0.3f);
    148152                if (cur_cell != Int2(-1))
    149153                    data->pieces[cur_cell.i]
    150                                 [cur_cell.j]->Goto(data->src_cell * 48);
     154                                [cur_cell.j]->Goto(data->src_cell * 48, 0.3f);
    151155                data->dst_cell = cur_cell;
    152156            }
     
    202206        data->pieces[cell_a.i][cell_a.j] = a;
    203207        data->pieces[cell_b.i][cell_b.j] = b;
    204         a->Goto(cell_a * 48);
    205         b->Goto(cell_b * 48);
     208        a->Goto(cell_a * 48, 0.3f);
     209        b->Goto(cell_b * 48, 0.3f);
    206210        return;
    207211    }
     
    209213    /* Perform the swap */
    210214    a->SetCell(cell_b);
    211     a->Goto(cell_b * 48);
     215    a->Goto(cell_b * 48, 0.3f);
    212216    b->SetCell(cell_a);
    213     b->Goto(cell_a * 48);
     217    b->Goto(cell_a * 48, 0.3f);
    214218
    215219    /* Remove matching tiles */
     
    223227                data->pieces[i][j2 - 1] = data->pieces[i][j2];
    224228                data->pieces[i][j2 - 1]->SetCell(Int2(i, j2 - 1));
    225                 data->pieces[i][j2 - 1]->Goto(Int2(i, j2 - 1) * 48);
     229                data->pieces[i][j2 - 1]->Goto(Int2(i, j2 - 1) * 48, 0.1f);
    226230                list[i][j2 - 1] = list[i][j2];
    227231            }
  • trunk/monsterz/piece.cpp

    r259 r261  
    3333    Int2 cell, pos, src, dst;
    3434    int id;
    35     float timer;
     35    float speed, timer;
    3636
    3737    enum
     
    4141        GRAB,
    4242        UNGRAB,
    43         PUSH,
     43        MOVE,
    4444    }
    4545    state;
     
    100100    {
    101101    case PieceData::UNGRAB:
    102     case PieceData::PUSH:
     102    case PieceData::MOVE:
     103        /* Only allow swaps when piece is close enough to its target cell. */
    103104        if ((data->cell * 48 - data->pos).sqlen() > 24 * 24)
    104105            return 0;
     
    121122    case PieceData::GRAB:
    122123        data->state = PieceData::UNGRAB;
     124        data->speed = 0.3f;
    123125        data->timer = 0.0f;
    124126        data->src = data->pos;
     
    130132}
    131133
    132 int Piece::Goto(Int2 pos)
    133 {
    134     switch (data->state)
    135     {
    136     case PieceData::IDLE:
    137     case PieceData::BLINK:
    138     case PieceData::UNGRAB:
    139     case PieceData::PUSH:
    140         data->state = PieceData::PUSH;
     134int Piece::Goto(Int2 pos, float speed)
     135{
     136    switch (data->state)
     137    {
     138    case PieceData::IDLE:
     139    case PieceData::BLINK:
     140    case PieceData::UNGRAB:
     141    case PieceData::MOVE:
     142        data->state = PieceData::MOVE;
    141143        data->timer = 0.0f;
    142144        data->src = data->pos;
    143145        data->dst = pos;
     146        data->speed = speed;
    144147        return 1;
    145148    case PieceData::GRAB:
     
    163166        break;
    164167    case PieceData::UNGRAB:
    165     case PieceData::PUSH:
     168    case PieceData::MOVE:
    166169        data->timer += deltams;
    167170        Int2 trip = data->dst - data->src;
    168         float moving_time = trip.len() / 0.3f; /* Moving speed */
     171        float moving_time = trip.len() / data->speed;
    169172        float t = moving_time ? data->timer / moving_time : 1.0f;
    170173        if (t >= 1.0f)
     
    206209        z = 4;
    207210        break;
    208     case PieceData::PUSH:
     211    case PieceData::MOVE:
    209212        z = 3;
    210213        break;
  • trunk/monsterz/piece.h

    r258 r261  
    3131    int Grab(Int2 dir);
    3232    int Ungrab();
    33     int Goto(Int2 dir);
     33    int Goto(Int2 dir, float speed);
    3434
    3535protected:
Note: See TracChangeset for help on using the changeset viewer.