share/hedgewars/Data/Scripts/Multiplayer/Racer.lua
changeset 12967 e32fff07b8d7
parent 12965 21eda4fe383c
child 13024 a568bc16a99a
--- a/share/hedgewars/Data/Scripts/Multiplayer/Racer.lua	Sat Feb 10 22:02:08 2018 +0100
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Racer.lua	Sat Feb 10 23:13:23 2018 +0100
@@ -166,10 +166,72 @@
 local boostY = 0
 local boostValue = 1
 
+-- themes with bright background
+local brightThemes = {
+	Bath = true,
+	Bamboo = true,
+	Beach = true,
+	Blox = true,
+	Compost = true,
+	Desert = true,
+	Fruit = true,
+	Golf = true,
+	Hoggywood = true,
+	Jungle = true,
+	Olympics = true,
+	Sheep = true,
+}
+-- themes with medium or heavily mixed brightness.
+-- only add themes here if both bright and dark waypoint
+-- colors fail otherwise.
+local mediumThemes = {
+	Halloween = true,
+}
+-- All themes not explicitly listed above are assumed to
+-- be "dark" and work with the default bright waypoints.
+
+-- Waypoint colors in 3 color themes!
+-- We do this so the waypoints are easy on the eyes,
+-- at least in each of the default themes.
+
+-- Bright waypoints (default)
+local waypointColourBright = 0xFFFFFFFF -- Primary colour of inactive waypoints
+local waypointColourBrightAtPlacement = 0xAAAAAAFF -- Colour of non-highlighted waypoints while placing
+-- Medium bright waypoints
+local waypointColourMedium = 0x606060FF
+local waypointColourMediumAtPlacement = 0x404040FF
+-- Dark waypoints
+local waypointColourDark = 0x000000FF
+local waypointColourDarkAtPlacement = 0x303030FF
+
+-- Waypoints touched by the players assume the clan color, which is unchanged.
+-- Touched waypoints are not important to be visible.
+
+-- Default waypoint colors (only use these color variables in the code below)
+local waypointColour = waypointColourBright
+local waypointColourAtPlacement = waypointColourBrightAtPlacement
+
 -------------------
 -- general methods
 -------------------
 
+-- Returns brightness level of background from 1-3.
+-- 1 = brightest
+function GetBackgroundBrightness()
+	-- This just looks at the theme names above.
+	-- This code will fail for bright unofficial themes.
+	-- TODO: Change how this thing works.
+	-- Consider adding a function into the Lua API which looks
+	-- up the theme's sky color, so we could use thit instead.
+	if brightThemes[Theme] then
+		return 1
+	elseif mediumThemes[Theme] then
+		return 2
+	else
+		return 3
+	end
+end
+
 --[[
 Parameters syntax:
 
@@ -602,6 +664,16 @@
         lastRound = TotalRounds
         RoundHasChanged = false
 
+	if GetBackgroundBrightness() == 1 then
+		-- Dark waypoint colour theme
+		waypointColour = waypointColourDark
+		waypointColourAtPlacement = waypointColourDarkAtPlacement
+	elseif GetBackgroundBrightness() == 2 then
+		-- Medium waypoint colour theme
+		waypointColour = waypointColourMedium
+		waypointColourAtPlacement = waypointColourMediumAtPlacement
+	end
+
         for i = 0, (specialPointsCount-1) do
                 PlaceWayPoint(specialPointsX[i], specialPointsY[i], false)
         end
@@ -635,7 +707,7 @@
 
             wpX[wpCount] = x
             wpY[wpCount] = y
-            wpCol[wpCount] = 0xffffffff
+            wpCol[wpCount] = waypointColour
             wpCirc[wpCount] = AddVisualGear(wpX[wpCount],wpY[wpCount],vgtCircle,0,true)
 
             local flashing, minO, maxO
@@ -650,9 +722,8 @@
             end
             SetVisualGearValues(wpCirc[wpCount], wpX[wpCount], wpY[wpCount], minO, maxO, 1, flashing, 0, wpRad, 5, wpCol[wpCount])
 
-            -- Make last waypoint white while making all previous ones light gray.
-            -- Note the last waypoint can be deleted with Precise.
-            SetVisualGearValues(wpCirc[wpCount-1], nil, nil, nil, nil, nil, nil, nil, nil, nil, 0xaaaaaaff)
+            -- Use alternate waypoint color for all waypoints but the last one. This gives a subtle “highlighting” effect.
+            SetVisualGearValues(wpCirc[wpCount-1], nil, nil, nil, nil, nil, nil, nil, nil, nil, waypointColourAtPlacement)
 
             wpCount = wpCount + 1
 
@@ -677,7 +748,7 @@
         wpCol[wpCount] = nil
         DeleteVisualGear(wpCirc[wpCount])
         wpCirc[wpCount] = nil
-        SetVisualGearValues(wpCirc[wpCount-1], nil, nil, nil, nil, nil, nil, nil, nil, nil, 0xffffffff)
+        SetVisualGearValues(wpCirc[wpCount-1], nil, nil, nil, nil, nil, nil, nil, nil, nil, waypointColour)
         AddCaption(string.format(loc("Waypoint removed. Available points: %d"), wpLimit-wpCount))
     else
         PlaySound(sndDenied)
@@ -743,7 +814,7 @@
         if gameBegun and not gameOver then
                 for i = 0,(wpCount-1) do
                         wpActive[i] = false
-                        wpCol[i] = 0xffffffff
+                        wpCol[i] = waypointColour
                         local flashing, minO, maxO
                         if i == 0 then
                             -- Make first waypoint flash very noticably