# HG changeset patch # User Wuzzy # Date 1479166964 -3600 # Node ID 2eac7a96b3425d8866c167a3a01c74d44553c625 # Parent c6eafb6f273591dca844fb3fcf5b3af2d6f17b8f Lua API: Add GetVisualGearType, onVisualGearAdd, onVisualGearDelete Fixes #99 and #122. diff -r c6eafb6f2735 -r 2eac7a96b342 ChangeLog.txt --- a/ChangeLog.txt Tue Nov 15 00:17:31 2016 +0100 +++ b/ChangeLog.txt Tue Nov 15 00:42:44 2016 +0100 @@ -60,6 +60,9 @@ Lua-API: + New call: SetCinematicMode(enable) -- e.g. for cutscenes etc. + New call: GetAmmoName(ammoType) -- returns the localized name for the specified ammoType + + New call: GetVisualGearType(vgUid) -- returns the visual gear type + + New hook: onVisualGearAdd(vgUid) -- called when a visual gear is added + + New hook: onVisualGearDelete(vgUid) -- called when a visual gear is deleted + New variable: WorldEdge -- World edge type (weNone, weWrap, weBounce, weSea) 0.9.21 -> 0.9.22 diff -r c6eafb6f2735 -r 2eac7a96b342 hedgewars/uScript.pas --- a/hedgewars/uScript.pas Tue Nov 15 00:17:31 2016 +0100 +++ b/hedgewars/uScript.pas Tue Nov 15 00:42:44 2016 +0100 @@ -843,6 +843,23 @@ lc_deletevisualgear:= 1 end; +function lc_getvisualgeartype(L : Plua_State) : LongInt; Cdecl; +var vg : PVisualGear; +begin + if CheckLuaParamCount(L, 1, 'GetVisualGearType', 'vgUid') then + begin + vg := VisualGearByUID(lua_tointeger(L, 1)); + if vg <> nil then + lua_pushinteger(L, ord(vg^.Kind)) + else + lua_pushnil(L); + end + else + lua_pushnil(L); // return value on stack (nil) + lc_getvisualgeartype:= 1 +end; + + function lc_getvisualgearvalues(L : Plua_State) : LongInt; Cdecl; var vg: PVisualGear; begin @@ -3306,6 +3323,7 @@ lua_register(luaState, _P'DeleteGear', @lc_deletegear); lua_register(luaState, _P'AddVisualGear', @lc_addvisualgear); lua_register(luaState, _P'DeleteVisualGear', @lc_deletevisualgear); +lua_register(luaState, _P'GetVisualGearType', @lc_getvisualgeartype); lua_register(luaState, _P'GetVisualGearValues', @lc_getvisualgearvalues); lua_register(luaState, _P'SetVisualGearValues', @lc_setvisualgearvalues); lua_register(luaState, _P'GetGearValues', @lc_getgearvalues); diff -r c6eafb6f2735 -r 2eac7a96b342 hedgewars/uVisualGearsList.pas --- a/hedgewars/uVisualGearsList.pas Tue Nov 15 00:17:31 2016 +0100 +++ b/hedgewars/uVisualGearsList.pas Tue Nov 15 00:42:44 2016 +0100 @@ -36,7 +36,7 @@ VisualGearLayers: array[0..6] of PVisualGear; implementation -uses uCollisions, uFloat, uVariables, uConsts, uTextures, uVisualGearsHandlers; +uses uCollisions, uFloat, uVariables, uConsts, uTextures, uVisualGearsHandlers, uScript; function AddVisualGear(X, Y: LongInt; Kind: TVisualGearType): PVisualGear; inline; begin @@ -437,10 +437,12 @@ VisualGearLayers[gear^.Layer]:= gear; AddVisualGear:= gear; +ScriptCall('onVisualGearAdd', gear^.uid); end; procedure DeleteVisualGear(Gear: PVisualGear); begin + ScriptCall('onVisualGearDelete', Gear^.uid); FreeAndNilTexture(Gear^.Tex); if Gear^.NextGear <> nil then