void updatePlayer(PLAYER* player) { int8_t dx = 0; int8_t dy = 0; uint8_t row_top = 0; uint8_t row_bottom = 0; uint8_t column_left = 0; uint8_t column_right = 0; uint16_t right = player->x_position + PLAYER_WIDTH - 1; uint16_t left = player->x_position; uint16_t top = player->y_position; uint16_t bottom = player->y_position + PLAYER_HEIGHT - 1; row_bottom = getCurrentRow (bottom); column_left = getCurrentColumn (left); column_right = getCurrentColumn (right); if (player->left) { dx -= player->speed; column_left = getCurrentColumn (left + dx); row_bottom = getCurrentRow (bottom); row_top = getCurrentRow (top + dy); if (map[row_top][column_left] == BLOCKED || map[row_bottom][column_left] == BLOCKED) { dx = -(dx + ((left - dx) % CELL_WIDTH)); } } if (player->right) { dx += player->speed; column_right = getCurrentColumn (right + dx); row_bottom = getCurrentRow (bottom); row_top = getCurrentRow (top + dy); if (map[row_top][column_right] == BLOCKED || map[row_bottom][column_right] == BLOCKED) { dx = dx - ((left + dx) % CELL_WIDTH); } } row_bottom = getCurrentRow (bottom); column_left = getCurrentColumn (left + dx); column_right = getCurrentColumn (right + dx); if (player->jumping) { dy -= player->jump_speed; player->current_jump_height += player->jump_speed; if (player->current_jump_height > MAX_JUMP_HEIGHT) { player->jumping = 0; player->falling = 1; player->current_jump_height = 0; } row_top = getCurrentRow (top + dy); column_left = getCurrentColumn (left + dx); column_right = getCurrentColumn (right + dx); if (map[row_top][column_left] == BLOCKED || map[row_top][column_right] == BLOCKED) { dy = -(dy + ((player->y_position - dy) % CELL_HEIGHT)); player->jumping = 0; player->falling = 1; player->current_jump_height = 0; } } else if (map[row_bottom][column_left] == AIR && map[row_bottom][column_right] == AIR) { player->falling = 1; dy += GRAVITY; row_bottom = getCurrentRow (bottom + dy); column_left = getCurrentColumn (left + dx); column_right = getCurrentColumn (right + dx); if (map[row_bottom][column_left] == BLOCKED || map[row_bottom][column_right] == BLOCKED) { dy = dy - ((player->y_position + dy) % CELL_HEIGHT); player->falling = 0; } } player->x_position += dx; player->y_position += dy; }
int TApp::getCurrentImageType() { /*-- 現在のセルの種類に関係無く、Splineを選択中はベクタを編集できるようにする * --*/ if (getCurrentObject()->isSpline()) return TImage::VECTOR; TXshSimpleLevel *sl = 0; if (getCurrentFrame()->isEditingScene()) { int row = getCurrentFrame()->getFrame(); int col = getCurrentColumn()->getColumnIndex(); if (col < 0) #ifdef LINETEST return TImage::RASTER; #else { int levelType = Preferences::instance()->getDefLevelType(); return (levelType == PLI_XSHLEVEL) ? TImage::VECTOR : // RASTER image type includes both TZI_XSHLEVEL (levelType == TZP_XSHLEVEL) ? TImage::TOONZ_RASTER : TImage::RASTER; // and OVL_XSHLEVEL level types } #endif TXsheet *xsh = getCurrentXsheet()->getXsheet(); TXshCell cell = xsh->getCell(row, col); if (cell.isEmpty()) { int r0, r1; xsh->getCellRange(col, r0, r1); if (0 <= r0 && r0 <= r1) { /*-- Columnに格納されている一番上のLevelのTypeに合わせる--*/ cell = xsh->getCell(r0, col); } else /*-- Columnが空の場合 --*/ { #ifdef LINETEST return TImage::RASTER; #else int levelType = Preferences::instance()->getDefLevelType(); return (levelType == PLI_XSHLEVEL) ? TImage::VECTOR : (levelType == TZP_XSHLEVEL) ? TImage::TOONZ_RASTER : TImage::RASTER; #endif } } sl = cell.getSimpleLevel(); } else if (getCurrentFrame()->isEditingLevel()) sl = getCurrentLevel()->getSimpleLevel(); if (sl) { switch (sl->getType()) { case TZP_XSHLEVEL: return TImage::TOONZ_RASTER; case OVL_XSHLEVEL: return TImage::RASTER; case PLI_XSHLEVEL: default: return TImage::VECTOR; case MESH_XSHLEVEL: return TImage::MESH; } } return TImage::VECTOR; }