Skip to content
EN

Showcase (sample level)

Showcase is a level included with the plugin. It contains five samples that connect in-game events to Hapbeat Event Map entries. Open a zone Actor’s Details and EM_Showcase to inspect or change the haptic playback settings.

ZoneImplementationHaptic wiring to inspect
Z1 BowlingC++ Actor + collision triggerFires z1_pin_hit when a pin collides.
Z2 Swing DoorBlueprint Event GraphStarts the door Timeline and Play Event (Hapbeat) from the same input branch.
Z3 FishingC++ Actor + Sequence / Parameter BindingConnects hook start / loop / release and fish velocity to loop Gain.
Z4 Stream ConsoleBlueprint Event Graph + Widget BlueprintWires stream start / stop, UI Gain / Pan, ticks, and Address Override.
Z5 Target RangeC++ Actor + collision triggerDirect SDK calls for charge / shot and light / heavy branches for target hits.
  1. Enable Show Plugin Content in Content Browser > Settings.
  2. Open Plugins/HapbeatSDK/Content/HapbeatSamples/Showcase/Maps/Showcase.
  3. Select the target zone Actor in the World Outliner.
  4. Open Content Browser > HapbeatSamples/Showcase/EM_Showcase and edit an entry’s Clip, Gain, Target, or Loop.
Game input / collision / state transition / UI
→ Hapbeat component or zone Actor
→ Event Map entry
→ Hapbeat SDK
Ball hits pin
→ pin HitTrigger
→ Pin Hit Event

Pin Hit Event is the Event Map entry played when one of the six pins collides.

  1. Select Z1_Bowling in Showcase map > World Outliner.
  2. Open Details > Hapbeat > Bowling > Pin Hit.
  3. Change Gain in the z1_pin_hit entry of EM_Showcase.
    • Example: halve the current value.
    • What you can observe: ball and pin collisions remain unchanged; only haptic strength changes.
  4. Change Pin Hit Event.
    • Example: switch from z1_pin_hit to z2_door_slam.
    • What you can observe: the same pin collision fires the haptic selected by that entry.

Choose Tools → Open Visual Studio, then open these SDK files:

Plugins
└ HapbeatSDK
└ Source
└ HapbeatSDKSamples
├ Public
│ └ HapbeatShowcaseZ1BowlingActor.h
└ Private
└ HapbeatShowcaseZ1BowlingActor.cpp

Open Public/HapbeatShowcaseZ1BowlingActor.h first, then the identically named Private/HapbeatShowcaseZ1BowlingActor.cpp.

BuildEventMap resolves the Details values EventMapOverride and PinHitEvent. SetUpPins passes that map and entry to each pin’s HitTrigger.

These two lines in SetUpPins connect the Details selection to the pin-collision trigger:

Pin->HitTrigger->EventMap = EventMap;
Pin->HitTrigger->EntryId = PinHitEntryId;

Z2 Swing Door — fire an event from Blueprint

Section titled “Z2 Swing Door — fire an event from Blueprint”

BP_Z2_Door is a Blueprint-only example: each door-operation branch fires Play Event (Hapbeat).

  1. Start PIE and press Shift + F1.
  2. Select Z2_Door in World Outliner > Play World.
  3. Change Door Slam Event in Details > Hapbeat > Door Events.
    • Example: switch from z2_door_slam to z2_door_close.
    • What you can observe: the G slam Timeline remains the same, while the selected entry’s haptic is fired.

Stop PIE, open HapbeatSamples/Showcase/BP_Z2_Door in the Content Browser, and select Event Graph. Follow the F, G, and L Input Key nodes through Switch on Door State, the applicable action lane, and Play Event (Hapbeat).

F / G / L Pressed
→ Switch on Door State
→ DoorOpen / DoorClose / DoorSlam / DoorRattle / Lock / Unlock
→ Play Event (Hapbeat) for the corresponding z2_door_* entry
→ DoorHinge Timeline

Each lane’s Play Event (Hapbeat) receives Get nodes for Door Event Map and its matching Door … Event. This passes the PIE Details selection into the in-game action. Since the Timeline starts from the same lane, door motion and haptic playback share a start point.

Left mouse press / release
→ Shark.HookSequence
→ z3_hook_start / z3_hook_loop / z3_hook_release
Shark velocity
→ HookVelocityBinding
→ loop Gain

Hook Start / Loop / Release Event on Z3_Fishing are entries played at the start, during, and release of left-click hooking.

  1. Select Z3_Fishing in Showcase map > World Outliner.
  2. Open Details > Hapbeat > Fishing > Hook and inspect the Event Map and three entries.
  3. Change Hook Loop Event.
    • Example: switch from z3_hook_loop to z5_charge_loop.
    • What you can observe: Loop Entry Name in Hook Wiring uses the selected entry and changes the loop while hooked.

Choose Tools → Open Visual Studio, then open:

Plugins
└ HapbeatSDK
└ Source
└ HapbeatSDKSamples
├ Public
│ └ HapbeatShowcaseZ3FishingActor.h
└ Private
└ HapbeatShowcaseZ3FishingActor.cpp

BuildEventMapAndHaptics passes the three selected values to the start / loop / stop entries of HookSequence. SetHooked calls the sequence’s Fire() / Stop(). HookVelocityBinding applies the hooked fish’s velocity to loop-playback Gain.

Z4 Stream Console — loop and runtime parameters

Section titled “Z4 Stream Console — loop and runtime parameters”

BP_Z4_StreamConsole is a Blueprint example that connects loop playback on Space with Gain / Pan updates from sliders.

Space
→ Switch on Loop State
→ Stopped: LoopTrigger.Fire → Loop State = Running
→ Running: LoopTrigger.Stop → Loop State = Stopped
Gain / Pan slider
→ On Gain/Pan Slider Changed
→ BP_Z4_StreamConsole Event Graph
→ Set Binding Input (Hapbeat)
→ Update Stream Parameter (Hapbeat)
→ Fire Tick From Value (Hapbeat)
  1. Start PIE and press Shift + F1.
  2. Select Z4_StreamConsole in World Outliner > Play World.
  3. Select Details component tree > TickEmitter, then change Tick Threshold in Details > Hapbeat > Tick.
    • Example: change 0.1 to 0.2.
    • What you can observe: moving the Gain / Pan slider by the same distance produces half as many ticks.

TickEmitter reads Tick Threshold for every slider input while running, so PIE does not need restarting. If you edit Event Graph nodes or connections, stop PIE, compile, and start PIE again.

Stop PIE, open HapbeatSamples/Showcase/BP_Z4_StreamConsole in the Content Browser, and select Event Graph.

  1. Follow Space Bar to Switch on Loop State. The Stopped Fire Trigger (Hapbeat) starts z4_stream_loop; the Running Stop Trigger (Hapbeat) stops that same loop.
  2. Follow On Gain Slider Changed / On Pan Slider Changed through Set Binding Input (Hapbeat)Update Stream Parameter (Hapbeat). The slider float is placed in GainBinding / PanBinding; both bindings update the Gain / Pan of the LoopTrigger stream while it plays.
  3. The following Fire Tick From Value (Hapbeat) plays z4_slider_tick only when a slider crosses Tick Threshold.

Address Override is a runtime destination selection that sends only to Hapbeats matching Player / Group. It does not change Event Map entries or playback wiring. See Targeting for details.

Z5 Target Range — charge / shot and target hit

Section titled “Z5 Target Range — charge / shot and target hit”
Charge begin / threshold / release
→ z5_charge_* / z5_shot_*
Projectile hits target
→ LightHitTrigger or HeavyHitTrigger
→ z5_tar_hit_light / z5_tar_hit_heavy

The six Event dropdowns on Z5_ChargeShot select the entries played for charge, shot, and target hit.

  1. Select Z5_ChargeShot in Showcase map > World Outliner.
  2. Open Details > Hapbeat > Showcase. Event Map entries are in Haptic Events; charge tuning is in Charge.
  3. Change Heavy Threshold.
    • Example: change 0.7 to 0.4.
    • What you can observe: the threshold entry and heavy shot activate earlier.
  4. Lower the midpoint of Charge Loop Gain Curve.
    • Example: set Gain at ChargeT = 0.5 to 0.2.
    • What you can observe: the charge loop is weaker in the first half and rises more sharply later.
  5. Change Heavy Shot Event.
    • Example: switch from z5_shot_heavy to z1_pin_hit.
    • What you can observe: releasing a heavy charge plays the selected entry.

Choose Tools → Open Visual Studio, then open:

Plugins
└ HapbeatSDK
└ Source
└ HapbeatSDKSamples
├ Public
│ └ HapbeatShowcaseZ5ChargeShotActor.h
└ Private
└ HapbeatShowcaseZ5ChargeShotActor.cpp

BuildEventMap resolves Details values EventMapOverride and six *Event values into entry IDs. Tick evaluates Charge Loop Gain Curve and updates Gain for the playing charge loop. HandleChargeBegin, Tick, and FireShotAfterDelay pass charge / shot IDs to FireOneShotEntry. SetUpTarget passes light / heavy target-hit IDs to collision triggers.

What to changeWhere
Clip, Gain, Target, loopAn entry in EM_Showcase
Z1 pin-hit entryEvent Map / Pin Hit Event on Z1_Bowling
Z5 charge / shot / target-hit entriesHaptic Events on Z5_ChargeShot
Runtime destinationAddress Override

Target is a logical destination filter. Address Override does not change Event Map or Actor wiring. See Targeting for details.

Open the following from Tools → Hapbeat in the Editor toolbar:

  • Hapbeat Settings — edit Port, App Name, Command Unicast, timing, and build-fixed Address Override.
  • Hapbeat Runtime Status — inspect the Address Override stored for this PC, effective Player / Group and socket state during PIE. Values saved outside PIE apply to the next PIE / packaged launch; values saved during PIE apply immediately.

Event Map Test Play resolves the same saved Address Override and build-pinned override before sending. It sends when its button is pressed.