# 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 @@
+
+
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