Changeset 238
- Timestamp:
- Jan 19, 2011, 9:33:25 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/monsterz/board.cpp
r234 r238 34 34 int screen, board, tiles; 35 35 Piece *pieces[8][8]; 36 Piece *grabbed; 37 38 Int2 mouse; 39 Int3 buttons; 36 40 float nextblink; 41 42 enum 43 { 44 IDLE, 45 BADCLICK, 46 GRAB, 47 } 48 state; 37 49 }; 38 50 … … 54 66 { 55 67 int id = (35 + i + (i ^ (j + 13)) * (2 * j + 711)) % 9; 56 data->pieces[ j][i] = new Piece(game, i, j, 25 + 5 * id);57 Ticker::Ref(data->pieces[ j][i]);68 data->pieces[i][j] = new Piece(game, i, j, 25 + 5 * id); 69 Ticker::Ref(data->pieces[i][j]); 58 70 } 59 71 60 72 data->nextblink = 0.0f; 73 data->state = BoardData::IDLE; 61 74 } 62 75 63 76 void Board::TickGame(float deltams) 64 77 { 78 Entity::TickGame(deltams); 79 80 Int2 mouse = Input::GetMousePos(); 81 Int3 buttons = Input::GetMouseButtons(); 82 83 /* If possible, make a random monster blink */ 65 84 if ((data->nextblink -= deltams) < 0.0f) 66 85 { … … 68 87 data->nextblink = (float)(200 + rand() % 500); 69 88 } 70 Entity::TickGame(deltams); 89 90 /* Should we start dragging something? */ 91 switch (data->state) 92 { 93 case BoardData::IDLE: 94 if (buttons[0] && !data->buttons[0]) 95 { 96 int x = mouse.x - 24; 97 int y = mouse.y - 72; 98 if (x >= 0 && x < 8 * 48 && y >= 0 && y < 8 * 48) 99 { 100 if (data->pieces[x / 48][y / 48]->Grab(Int2(0, 0))) 101 { 102 data->grabbed = data->pieces[x / 48][y / 48]; 103 data->state = BoardData::GRAB; 104 } 105 else 106 data->state = BoardData::BADCLICK; 107 } 108 else 109 data->state = BoardData::BADCLICK; 110 } 111 break; 112 case BoardData::GRAB: 113 if (mouse.x >= 0 && mouse.y >= 0) 114 data->grabbed->Grab(mouse - data->mouse); 115 if (!buttons[0] || mouse.x < 0 || mouse.y < 0) 116 { 117 data->grabbed->Ungrab(); 118 data->state = BoardData::IDLE; 119 } 120 break; 121 case BoardData::BADCLICK: 122 if (!buttons[0]) 123 data->state = BoardData::IDLE; 124 break; 125 } 126 127 data->mouse = mouse; 128 data->buttons = buttons; 71 129 } 72 130 … … 78 136 data->game->GetScene()->AddTile((data->board << 16) | 0, 24, 912, 1, 0); 79 137 80 Int2 tmp = Input::GetMousePos(); 81 if (tmp.x >= 0 && tmp.y >= 0) 82 data->game->GetScene()->AddTile((data->tiles << 16) | 4, tmp.x, 536 - tmp.y, 10, 0); 138 if (data->mouse.x >= 0 && data->mouse.y >= 0) 139 { 140 int x = data->mouse.x - 2; 141 int y = data->mouse.y + 59; 142 data->game->GetScene()->AddTile((data->tiles << 16) | 9, x, y, 10, 0); 143 } 83 144 } 84 145 … … 88 149 for (int j = 0; j < 8; j++) 89 150 for (int i = 0; i < 8; i++) 90 Ticker::Unref(data->pieces[ j][i]);151 Ticker::Unref(data->pieces[i][j]); 91 152 Tiler::Deregister(data->board); 92 153 Tiler::Deregister(data->screen); -
trunk/monsterz/piece.cpp
r230 r238 31 31 Game *game; 32 32 int tiler; 33 int i, j, id ;33 int i, j, id, x, y; 34 34 float timer; 35 35 … … 38 38 IDLE, 39 39 BLINK, 40 GRAB, 41 UNGRAB, 40 42 } 41 43 state; … … 54 56 data->i = i; 55 57 data->j = j; 58 data->x = i * 48; 59 data->y = j * 48; 56 60 data->id = id; 57 61 data->state = PieceData::IDLE; 58 62 } 59 63 60 voidPiece::Blink()64 int Piece::Blink() 61 65 { 62 if (data->state == PieceData::IDLE)66 switch (data->state) 63 67 { 68 case PieceData::IDLE: 64 69 data->state = PieceData::BLINK; 65 70 data->timer = 400.0f; 71 return 1; 72 default: 73 return 0; 74 } 75 } 76 77 int 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 93 int 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; 66 102 } 67 103 } … … 78 114 data->state = PieceData::IDLE; 79 115 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; 80 128 } 81 129 Entity::TickGame(deltams); … … 87 135 88 136 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; 91 140 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); 95 148 } 96 149 -
trunk/monsterz/piece.h
r230 r238 23 23 virtual ~Piece(); 24 24 25 void Blink(); 25 int Blink(); 26 int Grab(Int2 dir); 27 int Ungrab(); 26 28 27 29 protected: -
trunk/src/sdlinput.cpp
r236 r238 51 51 Int2 mouse; 52 52 if (SDL_GetAppState() & SDL_APPMOUSEFOCUS) 53 { 53 54 SDL_GetMouseState(&mouse.x, &mouse.y); 55 mouse.y = Video::GetHeight() - 1 - mouse.y; 56 } 54 57 else 55 58 mouse.x = mouse.y = -1;
Note: See TracChangeset
for help on using the changeset viewer.