Skip to content

Commit b3a4aee

Browse files
author
L'In20Cible
committed
Added OnMapEnd listener which, unlike OnLevelShutdown, will never get called more than once.
1 parent c446d74 commit b3a4aee

File tree

1 file changed

+28
-0
lines changed
  • addons/source-python/packages/source-python/listeners

1 file changed

+28
-0
lines changed

addons/source-python/packages/source-python/listeners/__init__.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
'OnEntitySpawned',
8181
'OnLevelInit',
8282
'OnLevelShutdown',
83+
'OnMapEnd',
8384
'OnNetworkidValidated',
8485
'OnPluginLoaded',
8586
'OnPluginUnloaded',
@@ -104,6 +105,7 @@
104105
'on_entity_output_listener_manager',
105106
'on_entity_pre_spawned_listener_manager',
106107
'on_entity_spawned_listener_manager',
108+
'on_map_end_listener_manager',
107109
'on_level_init_listener_manager',
108110
'on_level_shutdown_listener_manager',
109111
'on_network_id_validated_listener_manager',
@@ -126,6 +128,7 @@
126128
on_convar_changed_listener_manager = ListenerManager()
127129
on_plugin_loaded_manager = ListenerManager()
128130
on_plugin_unloaded_manager = ListenerManager()
131+
on_map_end_listener_manager = ListenerManager()
129132

130133
_check_for_update = ConVar(
131134
'sp_check_for_update',
@@ -355,12 +358,23 @@ class OnPluginUnloaded(ListenerManagerDecorator):
355358
manager = on_plugin_unloaded_manager
356359

357360

361+
class OnMapEnd(ListenerManagerDecorator):
362+
"""Register/unregister a map end listener."""
363+
364+
manager = on_map_end_listener_manager
365+
366+
# Guard variable to ensure this listener gets called only once per map.
367+
_level_initialized = False
368+
369+
358370
# =============================================================================
359371
# >> CALLBACKS
360372
# =============================================================================
361373
@OnLevelInit
362374
def _on_level_init(map_name):
363375
"""Called when a new map gets initialized."""
376+
OnMapEnd._level_initialized = True
377+
364378
if not _check_for_update.get_int():
365379
return
366380

@@ -381,6 +395,20 @@ def _on_level_init(map_name):
381395
VERSION, version, is_unversioned())
382396

383397

398+
@OnLevelShutdown
399+
def _on_level_shutdown():
400+
"""Called on level end."""
401+
# Was no map initialized?
402+
if not OnMapEnd._level_initialized:
403+
return
404+
405+
# Notify all registred callbacks
406+
on_map_end_listener_manager.notify()
407+
408+
# Make sure we don't get called more than once per map change
409+
OnMapEnd._level_initialized = False
410+
411+
384412
@PreHook(memory.get_virtual_function(cvar, 'CallGlobalChangeCallbacks'))
385413
def _pre_call_global_change_callbacks(args):
386414
"""Called when a ConVar has been changed."""

0 commit comments

Comments
 (0)