|
63 | 63 | ---@field distanceObjectChangeThreshold number |
64 | 64 | ---@field lineOffset number |
65 | 65 | ---@field playSound boolean |
| 66 | +---@field fillLevelSoundThreshold number |
| 67 | +---@field fillLevelSoundThresholdIsGreater boolean |
| 68 | +---@field fillLevelSample? table |
66 | 69 | --- |
67 | 70 | ---@field canFillOwnVehicle boolean |
68 | 71 | ---@field canDischargeToVehicle boolean |
@@ -123,6 +126,9 @@ function DischargeNode.registerXMLPaths(schema, key) |
123 | 126 | EffectManager.registerEffectXMLPaths(schema, key .. ".effects") |
124 | 127 | SoundManager.registerSampleXMLPaths(schema, key, "dischargeSound") |
125 | 128 | SoundManager.registerSampleXMLPaths(schema, key, "dischargeStateSound(?)") |
| 129 | + SoundManager.registerSampleXMLPaths(schema, key, 'fillLevelSound') |
| 130 | + schema:register(XMLValueType.FLOAT, key .. '.fillLevelSound#threshold', '', 0.5) |
| 131 | + schema:register(XMLValueType.BOOL, key .. '.fillLevelSound#thresholdIsGreater', '', true) |
126 | 132 | schema:register(XMLValueType.BOOL, key .. ".dischargeSound#overwriteSharedSound", "Overwrite shared discharge sound with sound defined in discharge node", false) |
127 | 133 | AnimationManager.registerAnimationNodesXMLPaths(schema, key .. ".animationNodes") |
128 | 134 | AnimationManager.registerAnimationNodesXMLPaths(schema, key .. ".effectAnimationNodes") |
@@ -172,6 +178,7 @@ function DischargeNode:delete() |
172 | 178 | g_effectManager:deleteEffects(self.effects) |
173 | 179 | g_soundManager:deleteSample(self.sample) |
174 | 180 | g_soundManager:deleteSample(self.dischargeSample) |
| 181 | + g_soundManager:deleteSample(self.fillLevelSample) |
175 | 182 | g_soundManager:deleteSamples(self.dischargeStateSamples) |
176 | 183 | g_animationManager:deleteAnimations(self.animationNodes) |
177 | 184 | g_animationManager:deleteAnimations(self.effectAnimationNodes) |
@@ -474,6 +481,7 @@ function DischargeNode:updateTick(dt) |
474 | 481 |
|
475 | 482 | if self.isClient then |
476 | 483 | self:updateDischargeSound(dt) |
| 484 | + self:updateFillLevelSound(dt) |
477 | 485 | end |
478 | 486 |
|
479 | 487 | if self.fillUnitObjectChanges ~= nil then |
@@ -910,6 +918,22 @@ function DischargeNode:updateDischargeInfo(x, y, z) |
910 | 918 | end |
911 | 919 | end |
912 | 920 |
|
| 921 | +function DischargeNode:updateFillLevelSound(dt) |
| 922 | + if self.playSound and self.fillLevelSample == nil then |
| 923 | + return |
| 924 | + end |
| 925 | + |
| 926 | + local fillLevelPct = self:getFillLevelPercentage() |
| 927 | + local playSample = (self.fillLevelSoundThresholdIsGreater and fillLevelPct > self.fillLevelSoundThreshold) or (not self.fillLevelSoundThresholdIsGreater and fillLevelPct < self.fillLevelSoundThreshold) |
| 928 | + local isPlaying = g_soundManager:getIsSamplePlaying(self.fillLevelSample) |
| 929 | + |
| 930 | + if playSample and not isPlaying then |
| 931 | + g_soundManager:playSample(self.fillLevelSample) |
| 932 | + elseif not playSample and isPlaying then |
| 933 | + g_soundManager:stopSample(self.fillLevelSample) |
| 934 | + end |
| 935 | +end |
| 936 | + |
913 | 937 | ---@param dt number |
914 | 938 | function DischargeNode:updateDischargeSound(dt) |
915 | 939 | local fillType = self:getDischargeFillType() |
|
0 commit comments