1+ local _wastedTimer , _respawnTimer
2+
13--
24-- startGamemodeClient: initializes the gamemode client
35--
@@ -9,6 +11,8 @@ local function startGamemodeClient()
911 exports .scoreboard :scoreboardSetSortBy (" Rank" )
1012 -- fade out camera
1113 fadeCamera (false , 0 )
14+ -- disable zone name HUD element
15+ setPlayerHudComponentVisible (" area_name" , false )
1216 -- if a game is in progress, apply the loading camera matrix
1317 if getElementData (resourceRoot , " gameState" ) == GAME_IN_PROGRESS then
1418 setCameraMatrix (unpack (calculateLoadingCameraMatrix ()))
@@ -25,6 +29,8 @@ local function stopGamemodeClient()
2529 exports .scoreboard :scoreboardRemoveColumn (" Rank" )
2630 -- hide scoreboard
2731 exports .scoreboard :setScoreboardForced (false )
32+ -- re-enable zone name HUD element
33+ setPlayerHudComponentVisible (" area_name" , true )
2834end
2935addEventHandler (" onClientResourceStop" , resourceRoot , stopGamemodeClient )
3036
@@ -68,10 +74,15 @@ addEventHandler("onClientGamemodeMapStop", resourceRoot, stopGamemodeMap)
6874-- startGamemodeRound: triggered when a round begins
6975--
7076local function startGamemodeRound ()
71- -- attach player wasted handler
72- addEventHandler (" onClientPlayerWasted" , localPlayer , _hud .respawnScreen .startCountdown )
77+ -- attach player spawn and wasted handler
78+ addEventHandler (" onClientPlayerSpawn" , localPlayer , localPlayerSpawn )
79+ addEventHandler (" onClientPlayerWasted" , localPlayer , localPlayerWasted )
7380 -- attach element data change handler
7481 addEventHandler (" onClientElementDataChange" , root , elementDataChange )
82+ -- stop spectating
83+ if isSpectating () then
84+ stopSpectating (true )
85+ end
7586 -- hide end/loading screens and scoreboard
7687 _hud .loadingScreen :setVisible (false )
7788 _hud .endScreen :setVisible (false )
@@ -87,30 +98,73 @@ addEventHandler("onClientGamemodeRoundStart", resourceRoot, startGamemodeRound)
8798-- stopGamemodeRound: triggered when a round ends
8899--
89100local function stopGamemodeRound (winner , draw , aborted )
90- -- remove player wasted handler and hide respawn screen if active
91- removeEventHandler (" onClientPlayerWasted" , localPlayer , _hud . respawnScreen . startCountdown )
92- _hud . respawnScreen . setVisible ( false )
101+ -- remove player spawn & wasted handler and hide respawn screen if active
102+ removeEventHandler (" onClientPlayerWasted" , localPlayer , localPlayerWasted )
103+ removeEventHandler ( " onClientPlayerSpawn " , localPlayer , localPlayerSpawn )
93104 -- remove element data change handler
94105 removeEventHandler (" onClientElementDataChange" , root , elementDataChange )
95106 -- hide score display
96107 _hud .scoreDisplay :setVisible (false )
108+ -- hide wasted screen and cancel the wasted and respawn timers
109+ _hud .wastedScreen :setVisible (false )
110+ if isTimer (_wastedTimer ) then
111+ killTimer (_wastedTimer )
112+ end
113+ if isElement (_respawnTimer ) then
114+ destroyElement (_respawnTimer )
115+ end
97116 -- spectate the winner
98117 if winner and player ~= winner then
99- if winner then
100- setCameraTarget (winner )
118+ startSpectating (winner )
119+ end
120+ -- exit spectate mode and go to black if round was aborted
121+ if aborted then
122+ if isSpectating () then
123+ stopSpectating (true )
101124 end
102- toggleAllControls (true , true , false )
125+ fadeCamera (false , 0 )
126+ else
127+ -- begin fading out the screen
128+ fadeCamera (false , ROUND_START_DELAY / 1000 )
129+ -- show end screen and scoreboard
130+ _hud .endScreen :update (winner , draw , aborted )
131+ _hud .endScreen :setVisible (true )
132+ exports .scoreboard :setScoreboardForced (true )
103133 end
104- -- begin fading out the screen
105- fadeCamera (false , CAMERA_LOAD_DELAY / 1000 )
106- -- show end screen and scoreboard
107- _hud .endScreen :update (winner , draw , aborted )
108- _hud .endScreen :setVisible (true )
109- exports .scoreboard :setScoreboardForced (true )
110134end
111135addEvent (" onClientGamemodeRoundEnd" , true )
112136addEventHandler (" onClientGamemodeRoundEnd" , resourceRoot , stopGamemodeRound )
113137
138+ --
139+ -- localPlayerWasted: triggered when local player is killed
140+ --
141+ function localPlayerWasted ()
142+ -- show the wasted screen
143+ _hud .wastedScreen :setVisible (true )
144+
145+ -- set timer to show the spectate screen
146+ _wastedTimer = setTimer (startSpectating , WASTED_CAMERA_DURATION , 1 )
147+
148+ -- create a respawn timer is repawn is enabled
149+ if _respawnTime > 0 then
150+ _respawnTimer = exports .missionTimer :createMissionTimer (WASTED_CAMERA_DURATION + _respawnTime , true , " You will respawn in %s seconds" , 0.5 , 50 , true , " default-bold" , 1 )
151+ end
152+ end
153+
154+ --
155+ -- localPlayerSpawn: triggered when local player is spawned
156+ --
157+ function localPlayerSpawn ()
158+ -- if we're spectating, stop spectating
159+ if isSpectating () then
160+ stopSpectating ()
161+ end
162+ -- kill the respawn timer if it exists
163+ if isElement (_respawnTimer ) then
164+ destroyElement (_respawnTimer )
165+ end
166+ end
167+
114168--
115169-- elementDataChange: triggered when element data changes - used to track score changes
116170--
0 commit comments