# HG changeset patch # User unc0rr # Date 1428525558 -10800 # Node ID a04e04aaf599592dd352050d740ab6fd1f02e392 # Parent 99273b7afbffd48b993c4b3d1554b65eec891ce2 Ammo schemes list, almost works diff -r 99273b7afbff -r a04e04aaf599 hedgewars/CMakeLists.txt --- a/hedgewars/CMakeLists.txt Thu Apr 02 21:09:56 2015 +0300 +++ b/hedgewars/CMakeLists.txt Wed Apr 08 23:39:18 2015 +0300 @@ -104,6 +104,7 @@ uGearsUtils.pas uTeams.pas + uFLAmmo.pas uFLData.pas uFLGameConfig.pas uFLIPC.pas diff -r 99273b7afbff -r a04e04aaf599 hedgewars/hwLibrary.pas --- a/hedgewars/hwLibrary.pas Thu Apr 02 21:09:56 2015 +0300 +++ b/hedgewars/hwLibrary.pas Wed Apr 08 23:39:18 2015 +0300 @@ -46,6 +46,7 @@ , uFLTeams , uFLScripts , uFLSchemes + , uFLAmmo ; {$INCLUDE "config.inc"} @@ -159,11 +160,13 @@ setTheme, setScript, setScheme, + setAmmo, getThemesList, freeThemesList, getThemeIcon, getScriptsList, getSchemesList, + getAmmosList, getTeamsList, tryAddTeam, tryRemoveTeam, diff -r 99273b7afbff -r a04e04aaf599 hedgewars/uFLGameConfig.pas --- a/hedgewars/uFLGameConfig.pas Thu Apr 02 21:09:56 2015 +0300 +++ b/hedgewars/uFLGameConfig.pas Wed Apr 08 23:39:18 2015 +0300 @@ -14,13 +14,14 @@ procedure setTheme(themeName: PChar); cdecl; procedure setScript(scriptName: PChar); cdecl; procedure setScheme(schemeName: PChar); cdecl; +procedure setAmmo(ammoName: PChar); cdecl; procedure tryAddTeam(teamName: PChar); cdecl; procedure tryRemoveTeam(teamName: PChar); cdecl; procedure changeTeamColor(teamName: PChar; dir: LongInt); cdecl; implementation -uses uFLIPC, hwengine, uFLUtils, uFLTeams, uFLData, uFLSChemes; +uses uFLIPC, hwengine, uFLUtils, uFLTeams, uFLData, uFLSChemes, uFLAmmo; var guiCallbackPointer: pointer; guiCallbackFunction: TGUICallback; @@ -35,6 +36,7 @@ theme: shortstring; script: shortstring; scheme: TScheme; + ammo: ansistring; mapgen: Longint; gameType: TGameType; teams: array[0..7] of TTeam; @@ -336,4 +338,13 @@ currentConfig.scheme:= scheme^ end; +procedure setAmmo(ammoName: PChar); cdecl; +var ammo: PAmmo; +begin + ammo:= ammoByName(ammoName); + + if ammo <> nil then + currentConfig.ammo:= ammo^.ammoStr +end; + end. diff -r 99273b7afbff -r a04e04aaf599 hedgewars/uFLScripts.pas --- a/hedgewars/uFLScripts.pas Thu Apr 02 21:09:56 2015 +0300 +++ b/hedgewars/uFLScripts.pas Wed Apr 08 23:39:18 2015 +0300 @@ -60,7 +60,6 @@ while tmp^ <> nil do begin s:= shortstring(tmp^); - writeln(stderr, '> ', s); l:= length(s); if (l > 4) and (copy(s, l - 3, 4) = '.lua') then inc(scriptsNumber); inc(tmp) diff -r 99273b7afbff -r a04e04aaf599 hedgewars/uFLTypes.pas --- a/hedgewars/uFLTypes.pas Thu Apr 02 21:09:56 2015 +0300 +++ b/hedgewars/uFLTypes.pas Wed Apr 08 23:39:18 2015 +0300 @@ -75,6 +75,11 @@ , worldedge: LongInt end; PScheme = ^TScheme; + TAmmo = record + ammoName: shortstring; + ammoStr: shortstring; + end; + PAmmo = ^TAmmo; implementation diff -r 99273b7afbff -r a04e04aaf599 hedgewars/uPhysFSLayer.pas --- a/hedgewars/uPhysFSLayer.pas Thu Apr 02 21:09:56 2015 +0300 +++ b/hedgewars/uPhysFSLayer.pas Wed Apr 08 23:39:18 2015 +0300 @@ -23,6 +23,7 @@ function pfsOpenRead(fname: shortstring): PFSFile; function pfsClose(f: PFSFile): boolean; +function pfsSeek(f: PFSFile; pos: QWord): boolean; procedure pfsReadLn(f: PFSFile; var s: shortstring); procedure pfsReadLnA(f: PFSFile; var s: ansistring); @@ -50,6 +51,7 @@ function PHYSFS_openRead(fname: PChar): PFSFile; cdecl; external PhysfsLibName; function PHYSFS_eof(f: PFSFile): LongBool; cdecl; external PhysfsLibName; function PHYSFS_readBytes(f: PFSFile; buffer: pointer; len: Int64): Int64; cdecl; external PhysfsLibName; +function PHYSFS_seek(f: PFSFile; pos: QWord): LongBool; cdecl; external PhysfsLibName; function PHYSFS_close(f: PFSFile): LongBool; cdecl; external PhysfsLibName; function PHYSFS_exists(fname: PChar): LongBool; cdecl; external PhysfsLibName; function PHYSFS_getLastError(): PChar; cdecl; external PhysfsLibName; @@ -87,6 +89,11 @@ exit(PHYSFS_close(f)) end; +function pfsSeek(f: PFSFile; pos: QWord): boolean; +begin + exit(PHYSFS_seek(f, 0)); +end; + function pfsExists(fname: shortstring): boolean; begin exit(PHYSFS_exists(Str2PChar(fname))) diff -r 99273b7afbff -r a04e04aaf599 qmlFrontend/flib.h --- a/qmlFrontend/flib.h Thu Apr 02 21:09:56 2015 +0300 +++ b/qmlFrontend/flib.h Wed Apr 08 23:39:18 2015 +0300 @@ -38,6 +38,7 @@ typedef void setTheme_t(const char * themeName); typedef void setScript_t(const char * scriptName); typedef void setScheme_t(const char * schemeName); +typedef void setAmmo_t(const char * ammoName); typedef void flibInit_t(const char * localPrefix, const char * userPrefix); typedef void flibFree_t(); @@ -47,6 +48,7 @@ typedef char **getScriptsList_t(); typedef char **getSchemesList_t(); +typedef char **getAmmosList_t(); typedef char **getTeamsList_t(); typedef void tryAddTeam_t(const char * teamName); diff -r 99273b7afbff -r a04e04aaf599 qmlFrontend/hwengine.cpp --- a/qmlFrontend/hwengine.cpp Thu Apr 02 21:09:56 2015 +0300 +++ b/qmlFrontend/hwengine.cpp Wed Apr 08 23:39:18 2015 +0300 @@ -16,6 +16,7 @@ setTheme_t *flibSetTheme; setScript_t *flibSetScript; setScheme_t *flibSetScheme; + setAmmo_t *flibSetAmmo; getPreview_t *flibGetPreview; runQuickGame_t *flibRunQuickGame; runLocalGame_t *flibRunLocalGame; @@ -27,6 +28,7 @@ getThemeIcon_t *flibGetThemeIcon; getScriptsList_t *flibGetScriptsList; getSchemesList_t *flibGetSchemesList; + getAmmosList_t *flibGetAmmosList; getTeamsList_t *flibGetTeamsList; tryAddTeam_t * flibTryAddTeam; tryRemoveTeam_t * flibTryRemoveTeam; @@ -59,6 +61,7 @@ flibSetTheme = (setTheme_t*) hwlib.resolve("setTheme"); flibSetScript = (setScript_t*) hwlib.resolve("setScript"); flibSetScheme = (setScheme_t*) hwlib.resolve("setScheme"); + flibSetAmmo = (setAmmo_t*) hwlib.resolve("setAmmo"); flibGetThemesList = (getThemesList_t*) hwlib.resolve("getThemesList"); flibFreeThemesList = (freeThemesList_t*) hwlib.resolve("freeThemesList"); @@ -66,6 +69,7 @@ flibGetScriptsList = (getScriptsList_t*) hwlib.resolve("getScriptsList"); flibGetSchemesList = (getSchemesList_t*) hwlib.resolve("getSchemesList"); + flibGetAmmosList = (getAmmosList_t*) hwlib.resolve("getAmmosList"); flibResetGameConfig = (resetGameConfig_t*) hwlib.resolve("resetGameConfig"); flibGetTeamsList = (getTeamsList_t*) hwlib.resolve("getTeamsList"); @@ -194,6 +198,13 @@ resultModel << QString::fromUtf8(*i); m_engine->rootContext()->setContextProperty("schemesModel", QVariant::fromValue(resultModel)); + + // ammos model + resultModel.clear(); + for (char **i = flibGetAmmosList(); *i != NULL; i++) + resultModel << QString::fromUtf8(*i); + + m_engine->rootContext()->setContextProperty("ammosModel", QVariant::fromValue(resultModel)); } void HWEngine::getTeamsList() @@ -240,3 +251,8 @@ { flibSetScheme(scheme.toUtf8().constData()); } + +void HWEngine::setAmmo(const QString &ammo) +{ + flibSetAmmo(ammo.toUtf8().constData()); +} diff -r 99273b7afbff -r a04e04aaf599 qmlFrontend/hwengine.h --- a/qmlFrontend/hwengine.h Thu Apr 02 21:09:56 2015 +0300 +++ b/qmlFrontend/hwengine.h Wed Apr 08 23:39:18 2015 +0300 @@ -28,6 +28,7 @@ Q_INVOKABLE void setTheme(const QString & theme); Q_INVOKABLE void setScript(const QString & script); Q_INVOKABLE void setScheme(const QString & scheme); + Q_INVOKABLE void setAmmo(const QString & ammo); Q_INVOKABLE void tryAddTeam(const QString & teamName); Q_INVOKABLE void tryRemoveTeam(const QString & teamName); diff -r 99273b7afbff -r a04e04aaf599 qmlFrontend/qml/qmlFrontend/GameConfig.qml --- a/qmlFrontend/qml/qmlFrontend/GameConfig.qml Thu Apr 02 21:09:56 2015 +0300 +++ b/qmlFrontend/qml/qmlFrontend/GameConfig.qml Wed Apr 08 23:39:18 2015 +0300 @@ -141,7 +141,7 @@ width: 256 height: 64 - model: ammoModel + model: ammosModel delegate: Rectangle { height: 25 width: 100