# HG changeset patch # User Wuzzy # Date 1518785868 -3600 # Node ID 0248cf0da8345fa5aef46ef9e418570312b6574c # Parent e2e40700c5cf9f6392dc792ef343ed131ce76989 Add SetTeamLabel to Lua API, can set arbitrary string as team label diff -r e2e40700c5cf -r 0248cf0da834 ChangeLog.txt --- a/ChangeLog.txt Fri Feb 16 12:38:30 2018 +0100 +++ b/ChangeLog.txt Fri Feb 16 13:57:48 2018 +0100 @@ -64,6 +64,7 @@ + New call: GetTeamName(teamIdx): Returns name of team with given index (starts at 0) + New call: SpawnSupplyCrate(x, y, content, [, amount]): Spawn ammo or utility crate, depending on content + New call: HealHog(gearUid, healthBoost[, showMessage[, tint]]): Heal hedgehog with graphical effects and message + + New call: SetTeamLabel(teamname[, label]): Set an arbitrary label for a team, will be displayed next to the team bar + New callback: onEndTurn(): Called at the end of a turn (when gears have settled) * AddAmmo now automatically unselects weapon if it would remove current ammo from current hedgehog * Fix call: SetWeapon(amNothing) now unselects weapon diff -r e2e40700c5cf -r 0248cf0da834 hedgewars/uScript.pas --- a/hedgewars/uScript.pas Fri Feb 16 12:38:30 2018 +0100 +++ b/hedgewars/uScript.pas Fri Feb 16 13:57:48 2018 +0100 @@ -2108,6 +2108,48 @@ lc_addteam:= 0;//1; end; +function lc_setteamlabel(L : Plua_State) : LongInt; Cdecl; +var teamValue: ansistring; + i, n: LongInt; + success: boolean; +begin + if CheckAndFetchParamCount(L, 1, 2, 'SetTeamLabel', 'teamname[, label]', n) then + begin + success:= false; + // fetch team + if TeamsCount > 0 then + for i:= 0 to Pred(TeamsCount) do + begin + // skip teams that don't have matching name + if TeamsArray[i]^.TeamName <> lua_tostring(L, 1) then + continue; + + // value of type nil? Then let's clear the team value + if (n < 2) or lua_isnil(L, 2) then + begin + FreeAndNilTexture(TeamsArray[i]^.LuaTeamValueTex); + TeamsArray[i]^.hasLuaTeamValue:= false; + success:= true; + end + // value of type string? Then let's set the team value + else if (lua_isstring(L, 2)) then + begin + teamValue:= lua_tostring(L, 2); + TeamsArray[i]^.LuaTeamValue:= teamValue; + FreeAndNilTexture(TeamsArray[i]^.LuaTeamValueTex); + TeamsArray[i]^.LuaTeamValueTex := RenderStringTex(teamValue, TeamsArray[i]^.Clan^.Color, fnt16); + TeamsArray[i]^.hasLuaTeamValue:= true; + success:= true; + end; + // don't change more than one team + break; + end; + end; + // return true if operation was successful, false otherwise + lua_pushboolean(L, success); + lc_setteamlabel:= 1; +end; + function lc_getteamname(L : Plua_State) : LongInt; Cdecl; var t: LongInt; begin @@ -3712,6 +3754,7 @@ lua_register(luaState, _P'PlaySound', @lc_playsound); lua_register(luaState, _P'GetTeamName', @lc_getteamname); lua_register(luaState, _P'AddTeam', @lc_addteam); +lua_register(luaState, _P'SetTeamLabel', @lc_setteamlabel); lua_register(luaState, _P'AddHog', @lc_addhog); lua_register(luaState, _P'AddAmmo', @lc_addammo); lua_register(luaState, _P'GetAmmoCount', @lc_getammocount); diff -r e2e40700c5cf -r 0248cf0da834 hedgewars/uStore.pas --- a/hedgewars/uStore.pas Fri Feb 16 12:38:30 2018 +0100 +++ b/hedgewars/uStore.pas Fri Feb 16 13:57:48 2018 +0100 @@ -261,6 +261,7 @@ if not allOK then exit; AIKillsTex := RenderStringTex(ansistring(inttostr(stats.AIKills)), Clan^.Color, fnt16); + LuaTeamValueTex := RenderStringTex(LuaTeamValue, Clan^.Color, fnt16); dec(drY, r.h + 2); DrawHealthY:= drY; diff -r e2e40700c5cf -r 0248cf0da834 hedgewars/uTeams.pas --- a/hedgewars/uTeams.pas Fri Feb 16 12:38:30 2018 +0100 +++ b/hedgewars/uTeams.pas Fri Feb 16 13:57:48 2018 +0100 @@ -891,6 +891,7 @@ FreeAndNilTexture(OwnerTex); FreeAndNilTexture(GraveTex); FreeAndNilTexture(AIKillsTex); + FreeAndNilTexture(LuaTeamValueTex); FreeAndNilTexture(FlagTex); end; diff -r e2e40700c5cf -r 0248cf0da834 hedgewars/uTypes.pas --- a/hedgewars/uTypes.pas Fri Feb 16 12:38:30 2018 +0100 +++ b/hedgewars/uTypes.pas Fri Feb 16 13:57:48 2018 +0100 @@ -405,6 +405,7 @@ OwnerTex, GraveTex, AIKillsTex, + LuaTeamValueTex, FlagTex: PTexture; Flag: shortstring; GraveName: shortstring; @@ -421,6 +422,8 @@ hasGone: boolean; skippedTurns: Longword; isGoneFlagPendingToBeSet, isGoneFlagPendingToBeUnset: boolean; + luaTeamValue: ansistring; + hasLuaTeamValue: boolean; end; TClan = record diff -r e2e40700c5cf -r 0248cf0da834 hedgewars/uWorld.pas --- a/hedgewars/uWorld.pas Fri Feb 16 12:38:30 2018 +0100 +++ b/hedgewars/uWorld.pas Fri Feb 16 13:57:48 2018 +0100 @@ -1087,11 +1087,12 @@ DrawTexture(15 + h * TeamHealthBarWidth div TeamHealthBarHealth, cScreenHeight + DrawHealthY + smallScreenOffset + 1, SpritesData[sprSlider].Texture); end; - // draw ai kill counter for gfAISurvival - if (GameFlags and gfAISurvival) <> 0 then - begin + // draw Lua value, if set + if (hasLuaTeamValue) then + DrawTexture(TeamHealthBarWidth + 22, cScreenHeight + DrawHealthY + smallScreenOffset, LuaTeamValueTex) + // otherwise, draw AI kill counter for gfAISurvival + else if (GameFlags and gfAISurvival) <> 0 then DrawTexture(TeamHealthBarWidth + 22, cScreenHeight + DrawHealthY + smallScreenOffset, AIKillsTex); - end; // if highlighted, draw flag and other contents again to keep their colors // this approach should be faster than drawing all borders one by one tinted or not @@ -1115,7 +1116,13 @@ DrawTextureFromRect(-OwnerTex^.w - NameTagTex^.w - 16, cScreenHeight + DrawHealthY + smallScreenOffset + 2, @r, OwnerTex) end; - if (GameFlags and gfAISurvival) <> 0 then + if (hasLuaTeamValue) then + begin + r.w:= LuaTeamValueTex^.w - 4; + r.h:= LuaTeamValueTex^.h - 4; + DrawTextureFromRect(TeamHealthBarWidth + 24, cScreenHeight + DrawHealthY + smallScreenOffset + 2, @r, LuaTeamValueTex); + end + else if (GameFlags and gfAISurvival) <> 0 then begin r.w:= AIKillsTex^.w - 4; r.h:= AIKillsTex^.h - 4;