--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hedgewars/uFLAmmo.pas Sat Apr 11 17:23:56 2015 +0300
@@ -0,0 +1,129 @@
+unit uFLAmmo;
+interface
+uses uFLTypes;
+
+function getAmmosList: PPChar; cdecl;
+procedure freeAmmosList;
+
+function ammoByName(s: shortstring): PAmmo;
+procedure sendAmmoConfig(var ammo: TAmmo);
+
+implementation
+uses uFLUtils, uFLIPC, uPhysFSLayer, uFLData;
+
+const MAX_AMMO_NAMES = 64;
+type
+ TAmmoArray = array [0..0] of TAmmo;
+ PAmmoArray = ^TAmmoArray;
+var
+ ammoList: PAmmo;
+ ammoNumber: LongInt;
+ listOfAmmoNames: array[0..MAX_AMMO_NAMES] of PChar;
+
+procedure loadAmmo;
+var f: PFSFile;
+ ammo: PAmmo;
+ ammos: PAmmoArray;
+ s: ansistring;
+ i: Longword;
+begin
+ f:= pfsOpenRead('/Config/weapons.ini');
+ ammoNumber:= 0;
+
+ if f <> nil then
+ begin
+ while (not pfsEOF(f)) do
+ begin
+ pfsReadLnA(f, s);
+
+ if (length(s) > 0) and (s[1] <> '[') then
+ inc(ammoNumber);
+ end;
+
+ //inc(ammoNumber); // add some default ammo
+
+ ammoList:= GetMem(sizeof(ammoList^) * (ammoNumber + 1));
+ ammo:= PAmmo(ammoList);
+ pfsSeek(f, 0);
+
+ while (not pfsEOF(f)) do
+ begin
+ pfsReadLnA(f, s);
+
+ i:= 1;
+ while(i <= length(s)) and (s[i] <> '=') do inc(i);
+
+ if i < length(s) then
+ begin
+ ammo^.ammoName:= copy(s, 1, i - 1);
+ delete(s, 1, i);
+ // TODO: split into 4 shortstrings
+ ammo^.ammoStr:= s;
+ inc(ammo)
+ end;
+ end;
+
+ pfsClose(f)
+ end;
+end;
+
+
+function getAmmosList: PPChar; cdecl;
+var i, t, l: Longword;
+ ammo: PAmmo;
+begin
+ if ammoList = nil then
+ loadAmmo;
+
+ t:= ammoNumber;
+ if t >= MAX_AMMO_NAMES then
+ t:= MAX_AMMO_NAMES;
+
+ ammo:= ammoList;
+ for i:= 0 to Pred(t) do
+ begin
+ l:= length(ammo^.ammoName);
+ if l >= 255 then l:= 254;
+ ammo^.ammoName[l + 1]:= #0;
+ listOfAmmoNames[i]:= @ammo^.ammoName[1];
+ inc(ammo)
+ end;
+
+ listOfAmmoNames[t]:= nil;
+
+ getAmmosList:= listOfAmmoNames
+end;
+
+function ammoByName(s: shortstring): PAmmo;
+var i: Longword;
+ ammo: PAmmo;
+begin
+ ammo:= ammoList;
+ i:= 0;
+ while (i < ammoNumber) and (ammo^.ammoName <> s) do
+ begin
+ inc(ammo);
+ inc(i)
+ end;
+
+ if i < ammoNumber then ammoByName:= ammo else ammoByName:= nil
+end;
+
+procedure freeAmmosList;
+begin
+ if ammoList <> nil then
+ FreeMem(ammoList, sizeof(ammoList^) * (ammoNumber + 1))
+end;
+
+
+procedure sendAmmoConfig(var ammo: TAmmo);
+var i: Longword;
+begin
+ with ammo do
+ begin
+ //ipcToEngine('e$turntime ' + inttostr(ammo.turntime * 1000));
+ //ipcToEngine('e$minesnum ' + inttostr(ammo.minesnum));
+ end
+end;
+
+end.