GUI Scripting: Named Events: Difference between revisions

From The DarkMod Wiki
Jump to navigationJump to search
mNo edit summary
(revise start)
Line 1: Line 1:
''This page is part of a series. See [[GUI Scripting Language]] for overview.''
''This page is part of a series. See [[GUI Scripting Language]] for overview.''
==The onNameEvent Command==
As mentioned in [[GUI Scripting: Event Handlers]], a windowDef can contain:
onNamedEvent myEvent {...} // No double-quotes here around myEvent
This is a global command, meaning it should be put exclusively inside a top-level windowDef, not a child guiDef (says [[GUI Scripting: References & Resources | says HMart in Ref 10]]).
==Calling Custom Named Events from a .Script==
==Calling Custom Named Events from a .Script==
Mappers will find this method of particular use. If in your GUI script you have an event handler like
Mappers will find this method of particular use. Call ''onNamedEvent myEvent'' from an associated .script function thusly:
onNamedEvent myEvent {...}
you can call it from an associated .script function thusly:
  void myFunction(entity me) {
  void myFunction(entity me) {
  ...
  ...

Revision as of 02:48, 20 July 2022

This page is part of a series. See GUI Scripting Language for overview.

The onNameEvent Command

As mentioned in GUI Scripting: Event Handlers, a windowDef can contain:

onNamedEvent myEvent {...} // No double-quotes here around myEvent

This is a global command, meaning it should be put exclusively inside a top-level windowDef, not a child guiDef (says says HMart in Ref 10).

Calling Custom Named Events from a .Script

Mappers will find this method of particular use. Call onNamedEvent myEvent from an associated .script function thusly:

void myFunction(entity me) {
...
me.callGui(1, "myEvent");  // or use "self.callGui" if function is part of script object
...
}

where the first parameter is the handle number, 1.

If you need to pass parameters, do that before callGui. See GUI Scripting: GUI:: Parameters.

Subscribing to Existing Standard Named Events

Events are as of TDM 2.10

If you are extending or over-riding standard GUIs (e.g., for the HUD, objectives, main menu system, or pop-up messages), you may be able to tie into existing named-event notifications, generated by the C++ code. Within engine code, a named event can be raised and sent just to a particular GUI:

m_gui->HandleNamedEvent(eventName);

Or, perhaps of more interest to mappers, raised and broadcast to all GUIs, e.g.:

m_overlays.broadcastNamedEvent("inventorySelectionChange");

In either case, you use the same onNamedEvent method to catch the event in your GUI.

Standard Broadcast Events

It’s relatively hard to depart from the original purpose of these events. An exception, where the key bindings associated with inventory events are re-purposed, is given in GUI Scripting: Number Wheel Example and also used for zooming the spyglass.

The broadcast events - all raised in Player.cpp - are as follows:

Body Shouldering

  • OnStartShoulderingBody
  • OnStopShoulderingBody

Weapons

  • nextWeapon
  • prevWeapon

Inventory

  • inventoryPrevItem
  • inventoryNextItem
  • inventoryPrevGroup
  • inventoryNextGroup
  • inventoryDropItem
  • inventoryUseItem
  • inventorySelectionChange

The inventoryUseItem event is also involved in setting up the closure of a readable.

Also, if you try to use an inventory item, it will give positive (green glow) or negative (red glow) visual feedback whether that is possible, and raise one of these events:

  • onInvPositiveFeedback
  • onInvNegativeFeedback

Spyglass and Peek Overlays

Both the spyglass and peek system (through keyholes or cracks) have multiple overlays, for different screen aspect ratios.

  • initBackground_4x3 // format 0
  • initBackground_16x9 // format 1 or 4
  • initBackground_16x10 // format 2
  • initBackground_5x4 // format 3
  • initBackground_21x9 // format 5

Other Standard Events, Sent to Particular Core System GUIs

Listed by GUI. Includes broadcast events mentioned above.

"MainMenu" GUIs

  • mainmenu_briefing_video.gui: CinematicEnd, LoadVideoDefinitions, OnBriefingVideoPartChanged, OnBriefingVideoFinished, LoadVideoDefinitions
  • mainmenu_debriefing_video.gui: CinematicEnd, LoadVideoDefinitions, OnDebriefingVideoPartChanged, OnDebriefingVideoFinished, LoadDebriefingVideoDefinitions
  • mainmenu_download.gui: QueueDownloadableMissionListRefresh, onStartDownloadingNextScreenshot, onStartFadeToNextScreenshot, onFailedToDownloadScreenshot, onDownloadableMissionDetailsLoaded, onDownloadableMissionDetailsDownloadFailed, onAvailableMissionsRefreshed
  • mainmenu_loadsave.gui: saveGameOverwrite
  • mainmenu_message.gui: OnGameError
  • mainmenu_music.gui: OnMenuMusicSettingChanged
  • mainmenu_newgame.gui: OnModInstallationFinished, OnModInstallationFailed, OnModUninstallFinished, OnRequiredVersionCheckFail, OnNewMissionsFound, onMissionDetailsLoaded
  • mainmenu_objectives.gui: GetObjectivesInfo, ObjMenuShowDifficultyOptions, ObjMenuHideDifficultyOptions, UpdateObjective1 ... UpdateObjective9
  • mainmenu_settings_gameplay.gui: UpdateAutoParryOption
  • mainmenu_shop.gui: SkipShop, UpdateItemColours
  • mainmenu_success.gui: SuccessProceedToNextMission, SuccessGoBackToMainMenu
  • mainmenu_utils.gui: ShowPostMissionScreen, HideSuccessScreen

Other Core GUIs

  • msg.gui: Prompt
  • numberwheel_handler.gui: prevWeapon, nextWeapon, inventoryPrevItem, inventoryNextItem, inventoryPrevGroup, inventoryNextGroup. See also GUI Scripting: Number Wheel Example
  • tdm_crack.gui: initBackground_4x3, initBackground_5x4, initBackground_16x9, initBackground_16x10
  • tdm_hud.gui: updateArmorHealthAir, OnStartShoulderingBody, OnStopShoulderingBody, DisplayMessage, SetupMessageSystem
  • tdm_inv.gui: onInventoryCategoryChanged, onInvNegativeFeedback, onInvPositiveFeedback, DisplayInventoryPickUpMessage, SetupInventoryPickUpMessageSystem, OnStartShoulderingBody, OnStopShoulderingBody
  • tdm_invgrid.gui; tdm_invgrid_brown.gui; tdm_invgrid_parchment.gui : InitInventoryGridGUI, prevWeapon, nextWeapon, inventoryPrevGroup, inventoryNextGroup, inventoryPrevItem, inventoryNextItem, clearGrid
  • tdm_keyhole.gui: initBackground_4x3, initBackground_5x4, initBackground_16x9, initBackground_16x10, initBackground_21x9
  • tdm_lockpick.gui: OnLockPickProcess, OnAttackButtonPress, onInventoryCategoryChanged, onInvNegativeFeedback, onInvPositiveFeedback
  • tdm_objectives_core.gui:, GetObjectivesInfo, InitObjectivesGUI, prevWeapon, nextWeapon, inventoryPrevGroup, inventoryPrevItem, inventoryNextGroup:, inventoryNextItem, UpdateObjective1 ... UpdateObjective9
  • map\loading.gui: loadBackground_4x3, loadBackground_5x4, loadBackground_16x9, loadBackground_16x9tv, loadBackground_16x10, loadBackground_21x9
  • playertools\flashbomb.gui: doFullblind, doHalfblind
  • playertools\spyglass.gui: initBackground_4x3, initBackground_5x4, initBackground_16x9, initBackground_16x10, prevWeapon, nextWeapon, inventoryPrevItem, inventoryNextItem, inventoryPrevGroup, inventoryNextGroup, inventorySelectionChange
  • prologue.gui; tdm_message.gui; tdm_message_no_art.gui; tdm_message_no_art_secret.gui: doFadeOut