--- a/hedgewars/CMakeLists.txt Sun Dec 07 22:22:39 2014 +0300
+++ b/hedgewars/CMakeLists.txt Thu Dec 18 00:03:53 2014 +0300
@@ -104,6 +104,7 @@
uFLGameConfig.pas
uFLIPC.pas
uFLScripts.pas
+ uFLSchemes.pas
uFLTeams.pas
uFLTypes.pas
uFLUtils.pas
--- a/hedgewars/hwLibrary.pas Sun Dec 07 22:22:39 2014 +0300
+++ b/hedgewars/hwLibrary.pas Thu Dec 18 00:03:53 2014 +0300
@@ -45,6 +45,7 @@
, uFLData
, uFLTeams
, uFLScripts
+ , uFLSchemes
;
{$INCLUDE "config.inc"}
@@ -161,6 +162,7 @@
freeThemesList,
getThemeIcon,
getScriptsList,
+ getSchemesList,
getTeamsList,
tryAddTeam,
tryRemoveTeam,
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hedgewars/uFLSchemes.pas Thu Dec 18 00:03:53 2014 +0300
@@ -0,0 +1,155 @@
+unit uFLSchemes;
+interface
+uses uFLTypes;
+
+function getSchemesList: PPChar; cdecl;
+procedure freeSchemesList;
+
+implementation
+uses uFLUtils, uFLIPC, uPhysFSLayer, uFLData;
+
+const MAX_SCHEME_NAMES = 64;
+type
+ TScheme = record
+ schemeName: shortstring;
+ end;
+ PScheme = ^TScheme;
+ TSchemeArray = array [0..0] of TScheme;
+ PSchemeArray = ^TSchemeArray;
+var
+ schemesList: PScheme;
+ schemesNumber: LongInt;
+ listOfSchemeNames: array[0..MAX_SCHEME_NAMES] of PChar;
+
+procedure loadSchemes;
+var f: PFSFile;
+ scheme: PScheme;
+ schemes: PSchemeArray;
+ s: shortstring;
+ l, i: Longword;
+begin
+ f:= pfsOpenRead('/Config/schemes.ini');
+ schemesNumber:= 0;
+
+ if f <> nil then
+ begin
+ while (not pfsEOF(f)) and (schemesNumber = 0) do
+ begin
+ pfsReadLn(f, s);
+
+ if copy(s, 1, 5) = 'size=' then
+ schemesNumber:= strToInt(midStr(s, 6));
+ end;
+
+ //inc(schemesNumber); // add some default schemes
+
+ schemesList:= GetMem(sizeof(schemesList^) * (schemesNumber + 1));
+ schemes:= PSchemeArray(schemesList);
+
+ while (not pfsEOF(f)) do
+ begin
+ pfsReadLn(f, s);
+
+ i:= 1;
+ while(i <= length(s)) and (s[i] <> '\') do inc(i);
+
+ if i < length(s) then
+ begin
+ l:= strToInt(copy(s, 1, i - 1));
+
+ if (l < schemesNumber) and (l > 0) then
+ begin
+ scheme:= @schemes^[l - 1];
+
+ if copy(s, i + 1, 5) = 'name=' then
+ scheme^. schemeName:= midStr(s, i + 6);
+ end;
+ end;
+ end;
+
+ pfsClose(f)
+ end;
+{
+name=AI TEST
+fortsmode=false
+divteams=false
+solidland=false
+border=false
+lowgrav=false
+laser=false
+invulnerability=false
+mines=true
+damagefactor=100
+turntime=40
+health=100
+suddendeath=0
+caseprobability=5
+vampiric=false
+karma=false
+artillery=false
+minestime=0
+landadds=4
+randomorder=true
+king=false
+placehog=false
+sharedammo=false
+disablegirders=false
+minedudpct=100
+explosives=40
+disablelandobjects=true
+aisurvival=true
+resethealth=false
+infattack=true
+resetweps=true
+perhogammo=false
+minesnum=0
+healthprobability=100
+healthcaseamount=50
+waterrise=0
+healthdecrease=0
+disablewind=false
+morewind=false
+ropepct=100
+tagteam=false
+getawaytime=100
+bottomborder=false
+worldedge=1
+scriptparam=@Invalid()
+}
+end;
+
+
+function getSchemesList: PPChar; cdecl;
+var i, t, l: Longword;
+ scheme: PScheme;
+begin
+ if schemesList = nil then
+ loadSchemes;
+
+ t:= schemesNumber;
+ if t >= MAX_SCHEME_NAMES then
+ t:= MAX_SCHEME_NAMES;
+
+ scheme:= schemesList;
+ for i:= 0 to Pred(t) do
+ begin
+ l:= length(scheme^.schemeName);
+ if l >= 255 then l:= 254;
+ scheme^.schemeName[l + 1]:= #0;
+ listOfSchemeNames[i]:= @scheme^.schemeName[1];
+ inc(scheme)
+ end;
+
+ listOfSchemeNames[t]:= nil;
+
+ getSchemesList:= listOfSchemeNames
+end;
+
+
+procedure freeSchemesList;
+begin
+ if schemesList <> nil then
+ FreeMem(schemesList, sizeof(schemesList^) * schemesNumber)
+end;
+
+end.
--- a/hedgewars/uFLUtils.pas Sun Dec 07 22:22:39 2014 +0300
+++ b/hedgewars/uFLUtils.pas Thu Dec 18 00:03:53 2014 +0300
@@ -3,6 +3,7 @@
function str2PChar(const s: shortstring): PChar;
function intToStr(n: LongInt): shortstring;
+function strToInt(s: shortstring): LongInt;
function midStr(s: shortstring; pos: byte): shortstring;
procedure underScore2Space(var s: shortstring);
@@ -27,6 +28,11 @@
str(n, intToStr)
end;
+function strToInt(s: shortstring): LongInt;
+begin
+val(s, strToInt);
+end;
+
function midStr(s: shortstring; pos: byte): shortstring;
begin
midStr:= copy(s, pos, length(s) - pos + 1)
--- a/qmlFrontend/flib.h Sun Dec 07 22:22:39 2014 +0300
+++ b/qmlFrontend/flib.h Thu Dec 18 00:03:53 2014 +0300
@@ -45,6 +45,7 @@
typedef uint32_t getThemeIcon_t(char * theme, char * buffer, uint32_t size);
typedef char **getScriptsList_t();
+typedef char **getSchemesList_t();
typedef char **getTeamsList_t();
typedef void tryAddTeam_t(const char * teamName);
--- a/qmlFrontend/hwengine.cpp Sun Dec 07 22:22:39 2014 +0300
+++ b/qmlFrontend/hwengine.cpp Thu Dec 18 00:03:53 2014 +0300
@@ -25,6 +25,7 @@
freeThemesList_t *flibFreeThemesList;
getThemeIcon_t *flibGetThemeIcon;
getScriptsList_t *flibGetScriptsList;
+ getSchemesList_t *flibGetSchemesList;
getTeamsList_t *flibGetTeamsList;
tryAddTeam_t * flibTryAddTeam;
tryRemoveTeam_t * flibTryRemoveTeam;
@@ -62,6 +63,7 @@
flibGetThemeIcon = (getThemeIcon_t*) hwlib.resolve("getThemeIcon");
flibGetScriptsList = (getScriptsList_t*) hwlib.resolve("getScriptsList");
+ flibGetSchemesList = (getSchemesList_t*) hwlib.resolve("getSchemesList");
flibResetGameConfig = (resetGameConfig_t*) hwlib.resolve("resetGameConfig");
flibGetTeamsList = (getTeamsList_t*) hwlib.resolve("getTeamsList");
@@ -171,25 +173,25 @@
QStringList resultModel;
char ** themes = flibGetThemesList();
- for (char **i = themes; *i != NULL; i++) {
- QString theme = QString::fromUtf8(*i);
-
- resultModel << theme;
- }
+ for (char **i = themes; *i != NULL; i++)
+ resultModel << QString::fromUtf8(*i);
flibFreeThemesList(themes);
m_engine->rootContext()->setContextProperty("themesModel", QVariant::fromValue(resultModel));
+ // scripts model
resultModel.clear();
- char ** scripts = flibGetScriptsList();
-
- for (char **i = scripts; *i != NULL; i++) {
- QString script = QString::fromUtf8(*i);
-
- resultModel << script;
- }
+ for (char **i = flibGetScriptsList(); *i != NULL; i++)
+ resultModel << QString::fromUtf8(*i);
m_engine->rootContext()->setContextProperty("scriptsModel", QVariant::fromValue(resultModel));
+
+ // schemes model
+ resultModel.clear();
+ for (char **i = flibGetSchemesList(); *i != NULL; i++)
+ resultModel << QString::fromUtf8(*i);
+
+ m_engine->rootContext()->setContextProperty("schemesModel", QVariant::fromValue(resultModel));
}
void HWEngine::getTeamsList()
--- a/qmlFrontend/qml/qmlFrontend/GameConfig.qml Sun Dec 07 22:22:39 2014 +0300
+++ b/qmlFrontend/qml/qmlFrontend/GameConfig.qml Thu Dec 18 00:03:53 2014 +0300
@@ -101,6 +101,38 @@
}
}
+ HWComboBox {
+ id: cbScheme
+ x: 50
+ y: 336
+ width: 256
+ height: 64
+
+ model: schemesModel
+ delegate: Rectangle {
+ height: 25
+ width: 100
+ color: "transparent"
+
+ property string itemIconSource: ""
+ property alias itemText: schemeName.text
+
+ Row {
+ //Image {id: themeIcon; width: height; height: parent.height; source: "image://theme/" + modelData}
+ Text {id: schemeName; text: modelData }
+ }
+
+ MouseArea {
+ z: 1
+ anchors.fill: parent
+ onClicked: {
+ cbScheme.currentIndex = index
+ //HWEngine.setScheme(schemeName.text)
+ }
+ }
+ }
+ }
+
ListView {
id: playingTeamsList