Changeset 245
- Timestamp:
- Jan 20, 2011, 1:02:56 AM (12 years ago)
- Location:
- trunk/monsterz
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/monsterz/board.cpp
r243 r245 35 35 Piece *pieces[8][8]; 36 36 Piece *grabbed; 37 Int2 src_cell, dst_cell; 37 38 38 39 Int2 mouse; … … 101 102 { 102 103 data->grabbed = data->pieces[x / 48][y / 48]; 104 data->src_cell = Int2(x / 48, y / 48); 105 data->dst_cell = Int2(-1); 103 106 data->state = BoardData::GRAB; 104 107 } … … 112 115 case BoardData::GRAB: 113 116 if (mouse.x >= 0 && mouse.y >= 0) 117 { 114 118 data->grabbed->Grab(mouse - data->mouse); 119 Int2 cur_pos = data->grabbed->GetPos(); 120 Int2 cur_cell = (cur_pos + 24) / 48; 121 if (cur_cell.i < 0 || cur_cell.i >= 8 122 || cur_cell.j < 0 || cur_cell.j >= 8 123 || (cur_pos - cur_cell * 48).sqlen() > 24 * 24) 124 cur_cell = Int2(-1); 125 /* If target cell changed, change destinations. */ 126 if (cur_cell != data->dst_cell) 127 { 128 if (data->dst_cell != Int2(-1)) 129 data->pieces[data->dst_cell.i] 130 [data->dst_cell.j]->Goto(data->dst_cell * 48); 131 if (cur_cell != Int2(-1) 132 && (cur_cell - data->src_cell).sqlen() == 1) 133 data->pieces[cur_cell.i] 134 [cur_cell.j]->Goto(data->src_cell * 48); 135 data->dst_cell = cur_cell; 136 } 137 } 115 138 if (!buttons[0] || mouse.x < 0 || mouse.y < 0) 116 139 { 117 140 data->grabbed->Ungrab(); 141 if (data->dst_cell != Int2(-1)) 142 data->pieces[data->dst_cell.i] 143 [data->dst_cell.j]->Goto(data->dst_cell * 48); 118 144 data->state = BoardData::IDLE; 119 145 } -
trunk/monsterz/piece.cpp
r243 r245 31 31 Game *game; 32 32 int tiler; 33 Int2 cell, pos, tmp;33 Int2 cell, pos, src, dst; 34 34 int id; 35 35 float timer; … … 41 41 GRAB, 42 42 UNGRAB, 43 PUSH, 43 44 } 44 45 state; … … 61 62 } 62 63 64 Int2 Piece::GetPos() const 65 { 66 return data->pos; 67 } 68 63 69 int Piece::Blink() 64 70 { … … 79 85 { 80 86 case PieceData::UNGRAB: 87 case PieceData::PUSH: 81 88 if ((data->cell * 48 - data->pos).sqlen() > 24 * 24) 82 89 return 0; … … 100 107 data->state = PieceData::UNGRAB; 101 108 data->timer = 0.0f; 102 data->tmp = data->pos; 103 return 1; 109 data->src = data->pos; 110 data->dst = data->cell * 48; 111 return 1; 112 default: 113 return 0; 114 } 115 } 116 117 int Piece::Goto(Int2 pos) 118 { 119 switch (data->state) 120 { 121 case PieceData::IDLE: 122 case PieceData::BLINK: 123 case PieceData::UNGRAB: 124 case PieceData::PUSH: 125 data->state = PieceData::PUSH; 126 data->timer = 0.0f; 127 data->src = data->pos; 128 data->dst = pos; 129 return 1; 130 case PieceData::GRAB: 104 131 default: 105 132 return 0; … … 121 148 break; 122 149 case PieceData::UNGRAB: 150 case PieceData::PUSH: 123 151 data->timer += deltams; 124 Int2 trip = data-> cell * 48 - data->tmp;125 float moving_time = trip.len() / 0. 8f; /* Moving speed */152 Int2 trip = data->dst - data->src; 153 float moving_time = trip.len() / 0.3f; /* Moving speed */ 126 154 float t = moving_time ? data->timer / moving_time : 1.0f; 127 155 if (t >= 1.0f) … … 129 157 if (data->timer > moving_time + 200.0f) 130 158 data->state = PieceData::IDLE; 131 data->pos = data-> tmp+ (t * trip + 0.5f);159 data->pos = data->src + (t * trip + 0.5f); 132 160 break; 133 161 } … … 157 185 break; 158 186 case PieceData::UNGRAB: 159 if ((data->cell * 48 - data-> tmp).sqlen() > 24 * 24)187 if ((data->cell * 48 - data->src).sqlen() > 24 * 24) 160 188 id = data->id + 2; 161 189 z = 4; 190 break; 191 case PieceData::PUSH: 192 z = 3; 162 193 break; 163 194 } -
trunk/monsterz/piece.h
r243 r245 23 23 virtual ~Piece(); 24 24 25 Int2 GetPos() const; 26 25 27 int Blink(); 26 28 int Grab(Int2 dir); 27 29 int Ungrab(); 30 int Goto(Int2 dir); 28 31 29 32 protected:
Note: See TracChangeset
for help on using the changeset viewer.