share/hedgewars/Data/Scripts/Utils.lua
author nemo
Wed, 27 Mar 2019 09:52:08 -0400
changeset 14745 fbd385a1bcf4
parent 14612 b4089fa16b34
child 14832 d65e25e211d4
permissions -rw-r--r--
Backed out changeset f9f71cccb5c3 - Wuzzy is right, the license is incompatible. I'd misread the wording on https://fontlibrary.org/en/font/symbola The terms on the author's site prevent using it with almost all FOSS projects, and even prevent using it in a merge like this. We'll just have to find some other font to improve coverage.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13665
5664650befcd Move common sprite tint values into Utils Lua library
Wuzzy <Wuzzy2@mail.ru>
parents: 13215
diff changeset
     1
-- Library for miscellaneous utilitiy functions and global helper variables
4873
98dbb9b985e5 add a new lua library with misc tools and removed redundant tracker functions
Henek
parents:
diff changeset
     2
14496
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
     3
HedgewarsScriptLoad("/Scripts/Locale.lua")
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
     4
13665
5664650befcd Move common sprite tint values into Utils Lua library
Wuzzy <Wuzzy2@mail.ru>
parents: 13215
diff changeset
     5
--[[ FUNCTIONS ]]
4873
98dbb9b985e5 add a new lua library with misc tools and removed redundant tracker functions
Henek
parents:
diff changeset
     6
-- Check if a gear is inside a box
98dbb9b985e5 add a new lua library with misc tools and removed redundant tracker functions
Henek
parents:
diff changeset
     7
function gearIsInBox(gear, x, y, w, h)
14252
74bf2d906097 Turn accidental globals to locals in Lua libraries
Wuzzy <Wuzzy2@mail.ru>
parents: 13665
diff changeset
     8
    local gx, gy = GetGearPosition(gear)
4873
98dbb9b985e5 add a new lua library with misc tools and removed redundant tracker functions
Henek
parents:
diff changeset
     9
    if gx >= x and gy >= y and gx <= x + w and gy <= y + h then
98dbb9b985e5 add a new lua library with misc tools and removed redundant tracker functions
Henek
parents:
diff changeset
    10
        return true
98dbb9b985e5 add a new lua library with misc tools and removed redundant tracker functions
Henek
parents:
diff changeset
    11
    end
98dbb9b985e5 add a new lua library with misc tools and removed redundant tracker functions
Henek
parents:
diff changeset
    12
    return false
98dbb9b985e5 add a new lua library with misc tools and removed redundant tracker functions
Henek
parents:
diff changeset
    13
end
98dbb9b985e5 add a new lua library with misc tools and removed redundant tracker functions
Henek
parents:
diff changeset
    14
98dbb9b985e5 add a new lua library with misc tools and removed redundant tracker functions
Henek
parents:
diff changeset
    15
-- Check if a gear is inside a circle
98dbb9b985e5 add a new lua library with misc tools and removed redundant tracker functions
Henek
parents:
diff changeset
    16
function gearIsInCircle(gear, x, y, r, useRadius)
14252
74bf2d906097 Turn accidental globals to locals in Lua libraries
Wuzzy <Wuzzy2@mail.ru>
parents: 13665
diff changeset
    17
    local gx, gy = GetGearPosition(gear)
4873
98dbb9b985e5 add a new lua library with misc tools and removed redundant tracker functions
Henek
parents:
diff changeset
    18
    if useRadius then
98dbb9b985e5 add a new lua library with misc tools and removed redundant tracker functions
Henek
parents:
diff changeset
    19
        r = r + GetGearRadius(gear)
98dbb9b985e5 add a new lua library with misc tools and removed redundant tracker functions
Henek
parents:
diff changeset
    20
    end
98dbb9b985e5 add a new lua library with misc tools and removed redundant tracker functions
Henek
parents:
diff changeset
    21
    if r ^ 2 >= (x - gx) ^ 2 + (y - gy) ^ 2 then
98dbb9b985e5 add a new lua library with misc tools and removed redundant tracker functions
Henek
parents:
diff changeset
    22
        return true
98dbb9b985e5 add a new lua library with misc tools and removed redundant tracker functions
Henek
parents:
diff changeset
    23
    end
98dbb9b985e5 add a new lua library with misc tools and removed redundant tracker functions
Henek
parents:
diff changeset
    24
    return false
98dbb9b985e5 add a new lua library with misc tools and removed redundant tracker functions
Henek
parents:
diff changeset
    25
end
13215
bc95df84395f Clear drawn maps in TechRacer
Wuzzy <Wuzzy2@mail.ru>
parents: 4873
diff changeset
    26
bc95df84395f Clear drawn maps in TechRacer
Wuzzy <Wuzzy2@mail.ru>
parents: 4873
diff changeset
    27
local function drawFullMap(erase, flush)
bc95df84395f Clear drawn maps in TechRacer
Wuzzy <Wuzzy2@mail.ru>
parents: 4873
diff changeset
    28
	for x = 200,4000,600 do
bc95df84395f Clear drawn maps in TechRacer
Wuzzy <Wuzzy2@mail.ru>
parents: 4873
diff changeset
    29
		for y = 100,2000,150 do
bc95df84395f Clear drawn maps in TechRacer
Wuzzy <Wuzzy2@mail.ru>
parents: 4873
diff changeset
    30
			AddPoint(x, y, 63, erase)
bc95df84395f Clear drawn maps in TechRacer
Wuzzy <Wuzzy2@mail.ru>
parents: 4873
diff changeset
    31
		end
bc95df84395f Clear drawn maps in TechRacer
Wuzzy <Wuzzy2@mail.ru>
parents: 4873
diff changeset
    32
	end
bc95df84395f Clear drawn maps in TechRacer
Wuzzy <Wuzzy2@mail.ru>
parents: 4873
diff changeset
    33
	if flush ~= false then
bc95df84395f Clear drawn maps in TechRacer
Wuzzy <Wuzzy2@mail.ru>
parents: 4873
diff changeset
    34
		FlushPoints()
bc95df84395f Clear drawn maps in TechRacer
Wuzzy <Wuzzy2@mail.ru>
parents: 4873
diff changeset
    35
	end
bc95df84395f Clear drawn maps in TechRacer
Wuzzy <Wuzzy2@mail.ru>
parents: 4873
diff changeset
    36
end
bc95df84395f Clear drawn maps in TechRacer
Wuzzy <Wuzzy2@mail.ru>
parents: 4873
diff changeset
    37
14496
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    38
local function challengeRecordToString(recordType, value)
14546
029f40c609b4 Display team records in training menu
Wuzzy <Wuzzy2@mail.ru>
parents: 14496
diff changeset
    39
	if recordType == "TimeRecord" then
029f40c609b4 Display team records in training menu
Wuzzy <Wuzzy2@mail.ru>
parents: 14496
diff changeset
    40
		return string.format(loc("Team's best time: %.3fs"), value/1000)
029f40c609b4 Display team records in training menu
Wuzzy <Wuzzy2@mail.ru>
parents: 14496
diff changeset
    41
	elseif recordType == "TimeRecordHigh" then
029f40c609b4 Display team records in training menu
Wuzzy <Wuzzy2@mail.ru>
parents: 14496
diff changeset
    42
		return string.format(loc("Team's longest time: %.3fs"), value/1000)
14496
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    43
	elseif recordType == "Highscore" then
14546
029f40c609b4 Display team records in training menu
Wuzzy <Wuzzy2@mail.ru>
parents: 14496
diff changeset
    44
		return string.format(loc("Team highscore: %d"), value)
029f40c609b4 Display team records in training menu
Wuzzy <Wuzzy2@mail.ru>
parents: 14496
diff changeset
    45
	elseif recordType == "Lowscore" then
029f40c609b4 Display team records in training menu
Wuzzy <Wuzzy2@mail.ru>
parents: 14496
diff changeset
    46
		return string.format(loc("Team lowscore: %d"), value)
14612
b4089fa16b34 Keep track of accuracy record in target practice challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14546
diff changeset
    47
	elseif recordType == "AccuracyRecord" then
b4089fa16b34 Keep track of accuracy record in target practice challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14546
diff changeset
    48
		return string.format(loc("Team's top accuracy: %d%"), value)
14496
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    49
	end
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    50
end
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    51
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    52
function getReadableChallengeRecord(recordType)
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    53
	local record = tonumber(GetMissionVar(recordType))
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    54
	if type(record) ~= "number" then
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    55
		return ""
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    56
	else
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    57
		return challengeRecordToString(recordType, record)
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    58
	end
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    59
end
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    60
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    61
function updateChallengeRecord(recordType, value, stat)
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    62
	local oldRecord = tonumber(GetMissionVar(recordType))
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    63
	local newRecord = false
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    64
	if stat == nil then
14612
b4089fa16b34 Keep track of accuracy record in target practice challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14546
diff changeset
    65
		stat = recordType ~= "AccuracyRecord"
14496
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    66
	end
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    67
	if type(oldRecord) ~= "number" then
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    68
		newRecord = true
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    69
	else
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    70
		local recordBeaten = false
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    71
		if recordType == "Lowscore" or recordType == "TimeRecord" then
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    72
			if value < oldRecord then
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    73
				recordBeaten = true
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    74
				newRecord = true
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    75
			end
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    76
		else
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    77
			if value > oldRecord then
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    78
				recordBeaten = true
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    79
				newRecord = true
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    80
			end
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    81
		end
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    82
		if stat then
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    83
			if recordBeaten then
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    84
				SendStat(siCustomAchievement, loc("You have beaten the team record, congratulations!"))
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    85
			else
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    86
				SendStat(siCustomAchievement, challengeRecordToString(recordType, oldRecord))
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    87
			end
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    88
		end
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    89
	end
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    90
	if newRecord then
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    91
		SaveMissionVar(recordType, value)
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    92
	end
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    93
end
2113296b7a29 Keep track of singleplayer high scores in challenges
Wuzzy <Wuzzy2@mail.ru>
parents: 14252
diff changeset
    94
13215
bc95df84395f Clear drawn maps in TechRacer
Wuzzy <Wuzzy2@mail.ru>
parents: 4873
diff changeset
    95
-- Completely fill the map with land. Requires MapGen=mgDrawn.
bc95df84395f Clear drawn maps in TechRacer
Wuzzy <Wuzzy2@mail.ru>
parents: 4873
diff changeset
    96
-- If flush is false, FlushPoints() is not called.
bc95df84395f Clear drawn maps in TechRacer
Wuzzy <Wuzzy2@mail.ru>
parents: 4873
diff changeset
    97
function fillMap(flush)
bc95df84395f Clear drawn maps in TechRacer
Wuzzy <Wuzzy2@mail.ru>
parents: 4873
diff changeset
    98
	drawFullMap(false, flush)
bc95df84395f Clear drawn maps in TechRacer
Wuzzy <Wuzzy2@mail.ru>
parents: 4873
diff changeset
    99
end
bc95df84395f Clear drawn maps in TechRacer
Wuzzy <Wuzzy2@mail.ru>
parents: 4873
diff changeset
   100
bc95df84395f Clear drawn maps in TechRacer
Wuzzy <Wuzzy2@mail.ru>
parents: 4873
diff changeset
   101
-- Completely erase all land from drawn maps. Requires MapGen=mgDrawn.
bc95df84395f Clear drawn maps in TechRacer
Wuzzy <Wuzzy2@mail.ru>
parents: 4873
diff changeset
   102
-- If flush is false, FlushPoints() is not called.
bc95df84395f Clear drawn maps in TechRacer
Wuzzy <Wuzzy2@mail.ru>
parents: 4873
diff changeset
   103
function eraseMap(flush)
bc95df84395f Clear drawn maps in TechRacer
Wuzzy <Wuzzy2@mail.ru>
parents: 4873
diff changeset
   104
	drawFullMap(true, flush)
bc95df84395f Clear drawn maps in TechRacer
Wuzzy <Wuzzy2@mail.ru>
parents: 4873
diff changeset
   105
end
bc95df84395f Clear drawn maps in TechRacer
Wuzzy <Wuzzy2@mail.ru>
parents: 4873
diff changeset
   106
13665
5664650befcd Move common sprite tint values into Utils Lua library
Wuzzy <Wuzzy2@mail.ru>
parents: 13215
diff changeset
   107
5664650befcd Move common sprite tint values into Utils Lua library
Wuzzy <Wuzzy2@mail.ru>
parents: 13215
diff changeset
   108
--[[ GLOBAL VARIABLES ]]
5664650befcd Move common sprite tint values into Utils Lua library
Wuzzy <Wuzzy2@mail.ru>
parents: 13215
diff changeset
   109
5664650befcd Move common sprite tint values into Utils Lua library
Wuzzy <Wuzzy2@mail.ru>
parents: 13215
diff changeset
   110
-- Shared common land color values for land sprites.
5664650befcd Move common sprite tint values into Utils Lua library
Wuzzy <Wuzzy2@mail.ru>
parents: 13215
diff changeset
   111
-- These are useful if you want to make the land type visible.
5664650befcd Move common sprite tint values into Utils Lua library
Wuzzy <Wuzzy2@mail.ru>
parents: 13215
diff changeset
   112
-- To be used as tint argument of PlaceSprite.
5664650befcd Move common sprite tint values into Utils Lua library
Wuzzy <Wuzzy2@mail.ru>
parents: 13215
diff changeset
   113
U_LAND_TINT_NORMAL = 0xFFFFFFFF			-- tint for normal land
5664650befcd Move common sprite tint values into Utils Lua library
Wuzzy <Wuzzy2@mail.ru>
parents: 13215
diff changeset
   114
U_LAND_TINT_INDESTRUCTIBLE = 0x960000FF		-- tint for indestructible land
5664650befcd Move common sprite tint values into Utils Lua library
Wuzzy <Wuzzy2@mail.ru>
parents: 13215
diff changeset
   115
U_LAND_TINT_ICE = 0x00FAFAFA			-- tint for icy land
5664650befcd Move common sprite tint values into Utils Lua library
Wuzzy <Wuzzy2@mail.ru>
parents: 13215
diff changeset
   116
U_LAND_TINT_BOUNCY = 0x00FA00FF			-- tint for bouncy land