# HG changeset patch # User nemo # Date 1421619277 18000 # Node ID df39aa3f6d4dfd9067890306071d79e600c9331f # Parent 089e43d01f74e05f066ae9504db48f5533c3bbf1# Parent e56db5d988ef28e580211d82b45e9b04376b501c merge 0.9.21, hopefully without screwing anything up due to this having been left for a while + parallel commits that occurred... diff -r 089e43d01f74 -r df39aa3f6d4d CMakeLists.txt diff -r 089e43d01f74 -r df39aa3f6d4d QTfrontend/hedgewars.qrc --- a/QTfrontend/hedgewars.qrc Sun Jan 18 16:57:32 2015 -0500 +++ b/QTfrontend/hedgewars.qrc Sun Jan 18 17:14:37 2015 -0500 @@ -124,7 +124,11 @@ res/iconHealth.png res/iconSuddenDeath.png res/iconDamage.png + res/iconDamageLockG.png + res/iconDamageLockR.png res/iconTime.png + res/iconTimeLockG.png + res/iconTimeLockR.png res/iconMine.png res/iconDud.png res/iconRope.png diff -r 089e43d01f74 -r df39aa3f6d4d QTfrontend/hwform.cpp diff -r 089e43d01f74 -r df39aa3f6d4d QTfrontend/model/ammoSchemeModel.cpp diff -r 089e43d01f74 -r df39aa3f6d4d QTfrontend/model/ammoSchemeModel.h diff -r 089e43d01f74 -r df39aa3f6d4d QTfrontend/model/roomslistmodel.cpp --- a/QTfrontend/model/roomslistmodel.cpp Sun Jan 18 16:57:32 2015 -0500 +++ b/QTfrontend/model/roomslistmodel.cpp Sun Jan 18 17:14:37 2015 -0500 @@ -108,22 +108,38 @@ if (role == Qt::DecorationRole) { const QIcon roomBusyIcon(":/res/iconDamage.png"); + const QIcon roomBusyIconGreen(":/res/iconDamageLockG.png"); + const QIcon roomBusyIconRed(":/res/iconDamageLockR.png"); const QIcon roomWaitingIcon(":/res/iconTime.png"); + const QIcon roomWaitingIconGreen(":/res/iconTimeLockG.png"); + const QIcon roomWaitingIconRed(":/res/iconTimeLockR.png"); + + QString flags = m_data.at(row).at(StateColumn); - if (m_data.at(row).at(0).isEmpty()) - return QVariant(roomWaitingIcon); + if (flags.contains("g")) + { + if (flags.contains("j")) + return QVariant(roomBusyIconRed); + else if (flags.contains("p")) + return QVariant(roomBusyIconGreen); + else + return QVariant(roomBusyIcon); + } else - return QVariant(roomBusyIcon); + { + if (flags.contains("j")) + return QVariant(roomWaitingIconRed); + else if (flags.contains("p")) + return QVariant(roomWaitingIconGreen); + else + return QVariant(roomWaitingIcon); + } } QString content = m_data.at(row).at(column); if (role == Qt::DisplayRole) { - // supply in progress flag as bool - if (column == 0) - return QVariant(QString(!content.isEmpty())); - // display room names if (column == 5) { @@ -190,7 +206,7 @@ l.append(rooms[i + t]); } - m_data.append(roomInfo2RoomRecord(l)); + m_data.append(l); } endResetModel(); @@ -201,7 +217,7 @@ { beginInsertRows(QModelIndex(), 0, 0); - m_data.prepend(roomInfo2RoomRecord(info)); + m_data.prepend(info); endInsertRows(); } @@ -250,25 +266,7 @@ if (i < 0) return; - m_data[i] = roomInfo2RoomRecord(info); + m_data[i] = info; emit dataChanged(index(i, 0), index(i, columnCount(QModelIndex()) - 1)); } - - -QStringList RoomsListModel::roomInfo2RoomRecord(const QStringList & info) -{ - QStringList result; - - result = info; - - QString flags = info[StateColumn]; - // for matters of less memory usage and quicker access store - // the boolean string as either "t" or empty - if (flags.contains('g')) - result[StateColumn] = "t"; - else - result[StateColumn] = QString(); - - return result; -} diff -r 089e43d01f74 -r df39aa3f6d4d QTfrontend/model/roomslistmodel.h --- a/QTfrontend/model/roomslistmodel.h Sun Jan 18 16:57:32 2015 -0500 +++ b/QTfrontend/model/roomslistmodel.h Sun Jan 18 17:14:37 2015 -0500 @@ -66,8 +66,6 @@ QStringList m_headerData; MapModel * m_staticMapModel; MapModel * m_missionMapModel; - - QStringList roomInfo2RoomRecord(const QStringList & info); }; #endif // HEDGEWARS_ROOMSLISTMODEL_H diff -r 089e43d01f74 -r df39aa3f6d4d QTfrontend/net/newnetclient.h diff -r 089e43d01f74 -r df39aa3f6d4d QTfrontend/res/html/about.html diff -r 089e43d01f74 -r df39aa3f6d4d QTfrontend/res/iconDamageLockG.png Binary file QTfrontend/res/iconDamageLockG.png has changed diff -r 089e43d01f74 -r df39aa3f6d4d QTfrontend/res/iconDamageLockR.png Binary file QTfrontend/res/iconDamageLockR.png has changed diff -r 089e43d01f74 -r df39aa3f6d4d QTfrontend/res/iconTimeLockG.png Binary file QTfrontend/res/iconTimeLockG.png has changed diff -r 089e43d01f74 -r df39aa3f6d4d QTfrontend/res/iconTimeLockR.png Binary file QTfrontend/res/iconTimeLockR.png has changed diff -r 089e43d01f74 -r df39aa3f6d4d QTfrontend/res/locks.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QTfrontend/res/locks.svg Sun Jan 18 17:14:37 2015 -0500 @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + Openclipart + + + Open and closed lock + 2013-11-07T10:50:32 + Set of 2 locks, one opened and one closed. + https://openclipart.org/detail/188421/open-and-closed-lock-by-iyo-188421 + + + Iyo + + + + + closed + lock + locks + open + pic + pictogram + sign + + + + + + + + + + + diff -r 089e43d01f74 -r df39aa3f6d4d QTfrontend/ui/page/pageroomslist.cpp --- a/QTfrontend/ui/page/pageroomslist.cpp Sun Jan 18 16:57:32 2015 -0500 +++ b/QTfrontend/ui/page/pageroomslist.cpp Sun Jan 18 17:14:37 2015 -0500 @@ -77,8 +77,16 @@ showGamesInProgress = new QAction(QAction::tr("Show games in-progress"), stateMenu); showGamesInProgress->setCheckable(true); showGamesInProgress->setChecked(true); + showPassword = new QAction(QAction::tr("Show password protected"), stateMenu); + showPassword->setCheckable(true); + showPassword->setChecked(true); + showJoinRestricted = new QAction(QAction::tr("Show join restricted"), stateMenu); + showJoinRestricted->setCheckable(true); + showJoinRestricted->setChecked(true); stateMenu->addAction(showGamesInLobby); stateMenu->addAction(showGamesInProgress); + stateMenu->addAction(showPassword); + stateMenu->addAction(showJoinRestricted); btnState->setMenu(stateMenu); // Help/prompt message at top @@ -186,6 +194,8 @@ connect(roomsList, SIGNAL(clicked (const QModelIndex &)), searchText, SLOT(setFocus())); connect(showGamesInLobby, SIGNAL(triggered()), this, SLOT(onFilterChanged())); connect(showGamesInProgress, SIGNAL(triggered()), this, SLOT(onFilterChanged())); + connect(showPassword, SIGNAL(triggered()), this, SLOT(onFilterChanged())); + connect(showJoinRestricted, SIGNAL(triggered()), this, SLOT(onFilterChanged())); connect(searchText, SIGNAL(textChanged (const QString &)), this, SLOT(onFilterChanged())); connect(this, SIGNAL(askJoinConfirmation (const QString &)), this, SLOT(onJoinConfirmation(const QString &)), Qt::QueuedConnection); @@ -630,13 +640,29 @@ bool stateLobby = showGamesInLobby->isChecked(); bool stateProgress = showGamesInProgress->isChecked(); + bool statePassword = showPassword->isChecked(); + bool stateJoinRestricted = showJoinRestricted->isChecked(); - if (stateLobby && stateProgress) - stateFilteredModel->setFilterFixedString(QString()); // "any" - else if (stateLobby != stateProgress) - stateFilteredModel->setFilterFixedString(QString(stateProgress)); + QString filter; + if (!stateLobby && !stateProgress) + filter = "O_o"; + else if (stateLobby && stateProgress && statePassword && stateJoinRestricted) + filter = ""; else - stateFilteredModel->setFilterFixedString(QString("none")); // Basically, none. + { + QString exclude = "[^"; + if (!stateProgress) exclude += "g"; + if (!statePassword) exclude += "p"; + if (!stateJoinRestricted) exclude += "j"; + exclude += "]*"; + if (stateProgress && statePassword && stateJoinRestricted) exclude = ".*"; + filter = "^" + exclude; + if (!stateLobby) filter += "g" + exclude; + filter += "$"; + } + //qDebug() << filter; + + stateFilteredModel->setFilterRegExp(filter); } void PageRoomsList::setSettings(QSettings *settings) diff -r 089e43d01f74 -r df39aa3f6d4d QTfrontend/ui/page/pageroomslist.h --- a/QTfrontend/ui/page/pageroomslist.h Sun Jan 18 16:57:32 2015 -0500 +++ b/QTfrontend/ui/page/pageroomslist.h Sun Jan 18 17:14:37 2015 -0500 @@ -96,6 +96,8 @@ QSortFilterProxyModel * stateFilteredModel; QAction * showGamesInLobby; QAction * showGamesInProgress; + QAction * showPassword; + QAction * showJoinRestricted; QSplitter * m_splitter; AmmoSchemeModel * ammoSchemeModel; diff -r 089e43d01f74 -r df39aa3f6d4d hedgewars/CMakeLists.txt diff -r 089e43d01f74 -r df39aa3f6d4d hedgewars/uChat.pas --- a/hedgewars/uChat.pas Sun Jan 18 16:57:32 2015 -0500 +++ b/hedgewars/uChat.pas Sun Jan 18 17:14:37 2015 -0500 @@ -32,7 +32,7 @@ procedure SendHogSpeech(s: shortstring); implementation -uses SDLh, uInputHandler, uTypes, uVariables, uCommands, uUtils, uTextures, uRender, uIO, uScript; +uses SDLh, uInputHandler, uTypes, uVariables, uCommands, uUtils, uTextures, uRender, uIO, uScript, uRenderUtils; const MaxStrIndex = 27; @@ -91,8 +91,6 @@ dstrect : TSDL_Rect; // destination rectangle for blitting font : THWFont; const - shadowcolor: TSDL_Color = (r:$00; g:$00; b:$00; a:$FF); - //shadowcolor: TSDL_Color = (r:$00; g:$00; b:$00; a:$80); shadowint = $80 shl AShift; begin @@ -117,23 +115,11 @@ // draw background SDL_FillRect(resSurface, @dstrect, shadowint); -dstrect.x:= Padding + 1; -dstrect.y:= Padding + 1; -// doesn't matter if .w and .h still include padding, SDL_UpperBlit will clip - - -// create and blit text shadow -strSurface:= TTF_RenderUTF8_Solid(Fontz[font].Handle, Str2PChar(str), shadowcolor); -SDL_UpperBlit(strSurface, nil, resSurface, @dstrect); -SDL_FreeSurface(strSurface); - -// non-shadow text starts at padding -dstrect.x:= Padding; -dstrect.y:= Padding; // create and blit text strSurface:= TTF_RenderUTF8_Blended(Fontz[font].Handle, Str2PChar(str), cl.color); -SDL_UpperBlit(strSurface, nil, resSurface, @dstrect); +//SDL_UpperBlit(strSurface, nil, resSurface, @dstrect); +if strSurface <> nil then copyTOXY(strSurface, resSurface, Padding, Padding); SDL_FreeSurface(strSurface); cl.Tex:= Surface2Tex(resSurface, false); diff -r 089e43d01f74 -r df39aa3f6d4d hedgewars/uVisualGearsHandlers.pas --- a/hedgewars/uVisualGearsHandlers.pas Sun Jan 18 16:57:32 2015 -0500 +++ b/hedgewars/uVisualGearsHandlers.pas Sun Jan 18 17:14:37 2015 -0500 @@ -125,7 +125,7 @@ if (round(X) >= cLeftScreenBorder) and (round(X) <= cRightScreenBorder) - and (round(Y) - 75 <= LAND_HEIGHT) + and (round(Y) - 250 <= LAND_HEIGHT) and (Timer > 0) and (Timer-Steps > 0) then begin if tdX > 0 then @@ -152,23 +152,31 @@ X:= X + cScreenSpace; moved:= true end - else - if round(X) > cRightScreenBorder then - begin - X:= X - cScreenSpace; - moved:= true - end; + else if round(X) > cRightScreenBorder then + begin + X:= X - cScreenSpace; + moved:= true + end; // if round(Y) < (LAND_HEIGHT - 1024 - 75) then Y:= Y + 25.0; // For if flag is set for flakes rising upwards? - if (Gear^.Layer = 2) and (round(Y) - 225 > LAND_HEIGHT) then + if (Gear^.Layer = 2) and (round(Y) - 400 > LAND_HEIGHT) and (cGravityf >= 0) then begin X:= cLeftScreenBorder + random(cScreenSpace); - Y:= Y - (1024 + 250 + random(50)); // TODO - configure in theme (jellies for example could use limited range) + Y:= Y-(1024 + 400 + random(50)); // TODO - configure in theme (jellies for example could use limited range) moved:= true end - else if (Gear^.Layer <> 2) and (round(Y) + 50 > LAND_HEIGHT) then + else if (Gear^.Layer <> 2) and (round(Y) - 150 > LAND_HEIGHT) and (cGravityf >= 0) then begin X:= cLeftScreenBorder + random(cScreenSpace); - Y:= Y - (1024 + random(25)); + Y:= Y-(1024 + 200 + random(50)); + moved:= true + end + else if (round(Y) < LAND_HEIGHT-1200) and (cGravityf < 0) then // gravity can make flakes move upwards + begin + X:= cLeftScreenBorder + random(cScreenSpace); + if Gear^.Layer = 2 then + Y:= Y+(1024 + 150 + random(100)) + else + Y:= Y+(1024 + random(50)); moved:= true end; if moved then diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_ar.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_bg.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_cs.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_da.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_de.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_el.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_en.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_es.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_fi.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_fr.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_gl.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_hu.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_it.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_ja.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_ko.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_lt.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_ms.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_nl.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_pl.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_pt_BR.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_pt_PT.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_ro.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_ru.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_sk.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_sv.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_tr_TR.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_uk.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_zh_CN.ts diff -r 089e43d01f74 -r df39aa3f6d4d share/hedgewars/Data/Locale/hedgewars_zh_TW.ts