diff -r 41b0a9955c47 -r ddcdedd3330b hedgewars/PascalExports.pas --- a/hedgewars/PascalExports.pas Thu Nov 24 13:44:30 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,365 +0,0 @@ -(* - * Hedgewars, a free turn based strategy game - * Copyright (c) 2004-2011 Andrey Korotaev - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - *) - -{$INCLUDE "options.inc"} - -unit PascalExports; -(* - * If the engine is compiled as library this unit will export functions - * as C declarations for convenient library usage in your application and - * language of choice. - * - * See also: C declarations on wikipedia - * http://en.wikipedia.org/wiki/X86_calling_conventions#cdecl - *) -interface -uses uTypes, uConsts, uVariables, GLunit, uKeys, uSound, uAmmos, uUtils, uCommands; - -{$INCLUDE "config.inc"} -procedure HW_versionInfo(netProto: PLongInt; versionStr: PPChar); cdecl; export; -function HW_getNumberOfWeapons:LongInt; cdecl; export; -function HW_getMaxNumberOfTeams:LongInt; cdecl; export; -function HW_getMaxNumberOfHogs:LongInt; cdecl; export; -procedure HW_terminate(closeFrontend: Boolean); cdecl; export; - -implementation -{$IFDEF HWLIBRARY} -var cZoomVal: GLfloat; - -// retrieve protocol information -procedure HW_versionInfo(netProto: PLongInt; versionStr: PPChar); cdecl; export; -begin - netProto^:= cNetProtoVersion; - versionStr^:= cVersionString; -end; - -// emulate mouse/keyboard input -procedure HW_click; cdecl; export; -begin - leftClick:= true; -end; - -procedure HW_ammoMenu; cdecl; export; -begin - rightClick:= true; -end; - -procedure HW_zoomSet(value: GLfloat); cdecl; export; -begin - cZoomVal:= value; - ZoomValue:= value; -end; - -procedure HW_zoomIn; cdecl; export; -begin - if wheelDown = false then - wheelUp:= true; -end; - -procedure HW_zoomOut; cdecl; export; -begin - if wheelUp = false then - wheelDown:= true; -end; - -procedure HW_zoomReset; cdecl; export; -begin - ZoomValue:= cZoomVal; - // center the camera at current hog - if CurrentHedgehog <> nil then - followGear:= CurrentHedgehog^.Gear; -end; - -function HW_zoomFactor: GLfloat; cdecl; export; -begin - exit( ZoomValue / cDefaultZoomLevel ); -end; - -function HW_zoomLevel: LongInt; cdecl; export; -begin - exit( trunc((ZoomValue - cDefaultZoomLevel) / cZoomDelta) ); -end; - -procedure HW_walkingKeysUp; cdecl; export; -begin - leftKey:= false; - rightKey:= false; - upKey:= false; - downKey:= false; - preciseKey:= false; -end; - -procedure HW_otherKeysUp; cdecl; export; -begin - spaceKey:= false; - enterKey:= false; - backspaceKey:= false; -end; - -procedure HW_allKeysUp; cdecl; export; -begin - // set all keys to released - uKeys.initModule; -end; - -procedure HW_walkLeft; cdecl; export; -begin - leftKey:= true; -end; - -procedure HW_walkRight; cdecl; export; -begin - rightKey:= true; -end; - -procedure HW_preciseSet(status:boolean); cdecl; export; -begin - preciseKey:= status; -end; - -procedure HW_aimUp; cdecl; export; -begin - upKey:= true; -end; - -procedure HW_aimDown; cdecl; export; -begin - downKey:= true; -end; - -procedure HW_shoot; cdecl; export; -begin - spaceKey:= true; -end; - -procedure HW_jump; cdecl; export; -begin - enterKey:= true; -end; - -procedure HW_backjump; cdecl; export; -begin - backspaceKey:= true; -end; - -procedure HW_tab; cdecl; export; -begin - tabKey:= true; -end; - -procedure HW_chat; cdecl; export; -begin - chatAction:= true; -end; - -procedure HW_screenshot; cdecl; export; -begin - flagMakeCapture:= true; -end; - -procedure HW_pause; cdecl; export; -begin - if isPaused = false then - pauseAction:= true; -end; - -procedure HW_pauseToggle; cdecl; export; -begin - pauseAction:= true; -end; - -function HW_isPaused: boolean; cdecl; export; -begin - exit( isPaused ); -end; - -// equivalent to esc+y; when closeFrontend = true the game exits after memory cleanup -procedure HW_terminate(closeFrontend: boolean); cdecl; export; -begin - alsoShutdownFrontend:= closeFrontend; - ParseCommand('forcequit', true); -end; - -function HW_getSDLWindow: pointer; cdecl; export; -begin -{$IFDEF SDL13} - exit( SDLwindow ); -{$ELSE} - exit( nil ); -{$ENDIF} -end; - -// cursor handling -procedure HW_setCursor(x,y: LongInt); cdecl; export; -begin - CursorPoint.X:= x; - CursorPoint.Y:= y; -end; - -procedure HW_getCursor(x,y: PLongInt); cdecl; export; -begin - x^:= CursorPoint.X; - y^:= CursorPoint.Y; -end; - -// ammo menu related functions -function HW_isAmmoMenuOpen: boolean; cdecl; export; -begin - exit( bShowAmmoMenu ); -end; - -function HW_isAmmoMenuNotAllowed: boolean; cdecl; export; -begin; - exit( (TurnTimeLeft = 0) or (not CurrentTeam^.ExtDriven and (((CurAmmoGear = nil) or - ((Ammoz[CurAmmoGear^.AmmoType].Ammo.Propz and ammoprop_AltAttack) = 0)) and hideAmmoMenu)) ); -end; - -function HW_isWeaponRequiringClick: boolean; cdecl; export; -begin - if (CurrentHedgehog <> nil) and (CurrentHedgehog^.Gear <> nil) and (CurrentHedgehog^.BotLevel = 0) then - exit( (CurrentHedgehog^.Gear^.State and gstHHChooseTarget) <> 0 ) - else - exit(false); -end; - -function HW_isWeaponTimerable: boolean; cdecl; export; -begin - if (CurrentHedgehog <> nil) and (CurrentHedgehog^.Ammo <> nil) and (CurrentHedgehog^.BotLevel = 0) then - exit( (Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_Timerable) <> 0) - else - exit(false); -end; - -function HW_isWeaponSwitch: boolean cdecl; export; -begin - if (CurAmmoGear <> nil) and (CurrentHedgehog^.BotLevel = 0) then - exit(CurAmmoGear^.AmmoType = amSwitch) - else - exit(false) -end; - -function HW_isWeaponRope: boolean cdecl; export; -begin - if (CurrentHedgehog <> nil) and (CurrentHedgehog^.Ammo <> nil) and (CurrentHedgehog^.BotLevel = 0) then - exit(CurrentHedgehog^.CurAmmoType = amRope) - else - exit(false); -end; - -procedure HW_setGrenadeTime(time: LongInt); cdecl; export; -begin - ParseCommand('/timer ' + inttostr(time), true); -end; - -procedure HW_setPianoSound(snd: LongInt); cdecl; export; -begin - // this most likely won't work in network game - if (CurrentHedgehog <> nil) and (CurrentHedgehog^.Ammo <> nil) and (CurrentHedgehog^.BotLevel = 0) - and (CurrentHedgehog^.CurAmmoType = amPiano) then - case snd of - 0: PlaySound(sndPiano0); - 1: PlaySound(sndPiano1); - 2: PlaySound(sndPiano2); - 3: PlaySound(sndPiano3); - 4: PlaySound(sndPiano4); - 5: PlaySound(sndPiano5); - 6: PlaySound(sndPiano6); - 7: PlaySound(sndPiano7); - else PlaySound(sndPiano8); - end; -end; - -function HW_getWeaponNameByIndex(whichone: LongInt): PChar; cdecl; export; -begin - exit(str2pchar(trammo[Ammoz[TAmmoType(whichone+1)].NameId])); -end; - -function HW_getWeaponCaptionByIndex(whichone: LongInt): PChar; cdecl; export; -begin - exit(str2pchar(trammoc[Ammoz[TAmmoType(whichone+1)].NameId])); -end; - -function HW_getWeaponDescriptionByIndex(whichone: LongInt): PChar; cdecl; export; -begin - exit(str2pchar(trammod[Ammoz[TAmmoType(whichone+1)].NameId])); -end; - -function HW_getNumberOfWeapons:LongInt; cdecl; export; -begin - exit(ord(high(TAmmoType))); -end; - -procedure HW_setWeapon(whichone: LongInt); cdecl; export; -begin - if (CurrentTeam = nil) then exit; - if (not CurrentTeam^.ExtDriven) and (CurrentTeam^.Hedgehogs[0].BotLevel = 0) then - SetWeapon(TAmmoType(whichone+1)); -end; - -function HW_isWeaponAnEffect(whichone: LongInt): boolean; cdecl; export; -begin - exit(Ammoz[TAmmoType(whichone+1)].Ammo.Propz and ammoprop_Effect <> 0) -end; - -function HW_getAmmoCounts(counts: PLongInt): LongInt; cdecl; export; -var a : PHHAmmo; - slot, index: LongInt; -begin - // nil check - if (CurrentHedgehog = nil) or (CurrentHedgehog^.Ammo = nil) or (CurrentTeam = nil) then - exit(-1); - // hog controlled by opponent (net or ai) - if (CurrentTeam^.ExtDriven) or (CurrentTeam^.Hedgehogs[0].BotLevel <> 0) then - exit(1); - - a:= CurrentHedgehog^.Ammo; - for slot:= 0 to cMaxSlotIndex do - for index:= 0 to cMaxSlotAmmoIndex do - if a^[slot,index].Count <> 0 then // yes, ammomenu is hell - counts[ord(a^[slot,index].AmmoType)-1]:= a^[slot,index].Count; - exit(0); -end; - -procedure HW_getAmmoDelays (skipTurns: PByte); cdecl; export; -var a : TAmmoType; -begin - for a:= Low(TAmmoType) to High(TAmmoType) do - skipTurns[ord(a)-1]:= byte(Ammoz[a].SkipTurns); -end; - -function HW_getTurnsForCurrentTeam: LongInt; cdecl; export; -begin - if (CurrentTeam <> nil) and (CurrentTeam^.Clan <> nil) then - exit(CurrentTeam^.Clan^.TurnNumber) - else - exit(0); -end; - -function HW_getMaxNumberOfHogs: LongInt; cdecl; export; -begin - exit(cMaxHHIndex+1); -end; - -function HW_getMaxNumberOfTeams: LongInt; cdecl; export; -begin - exit(cMaxTeams); -end; -{$ENDIF} - -end. -