audio + debounce work
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit

This commit is contained in:
austin 2025-04-25 18:01:46 -04:00
parent 4e7cfe05e7
commit 7b1610d847
11 changed files with 54 additions and 2 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1532,6 +1532,9 @@ ServerWorldData conversion methods are static now
Fix character data serialization only serializing dataType
Potential fix for realm undefined for server terrain physics entity
Fix macro character entities not being assigned ServerCharacterData
Audio on placing blocks
Audio on placing/removing voxels
Debounce item usage activations

View File

@ -2,10 +2,12 @@ package electrosphere.client.interact;
import org.joml.Vector3d;
import electrosphere.audio.VirtualAudioSourceManager.VirtualAudioSourceType;
import electrosphere.client.entity.camera.CameraEntityUtils;
import electrosphere.client.script.ClientScriptUtils;
import electrosphere.collision.CollisionEngine;
import electrosphere.engine.Globals;
import electrosphere.engine.assetmanager.AssetDataStrings;
import electrosphere.entity.Entity;
import electrosphere.entity.state.attack.ClientAttackTree;
import electrosphere.entity.state.attack.ShooterTree;
@ -164,6 +166,11 @@ public class ItemActions {
if(data.getClientSideSecondary() != null){
ClientScriptUtils.fireSignal(data.getClientSideSecondary());
}
if(data.getSecondaryUsage() != null){
if(data.getSecondaryUsage().getBlockId() != null){
Globals.virtualAudioSourceManager.createVirtualAudioSource(AssetDataStrings.INTERACT_SFX_BLOCK_PLACE, VirtualAudioSourceType.CREATURE, false);
}
}
}
}
}

View File

@ -4,10 +4,13 @@ import org.graalvm.polyglot.HostAccess.Export;
import org.joml.Vector3d;
import org.joml.Vector3i;
import electrosphere.audio.VirtualAudioSourceManager.VirtualAudioSourceType;
import electrosphere.audio.movement.MovementAudioService.InteractionType;
import electrosphere.client.entity.camera.CameraEntityUtils;
import electrosphere.client.terrain.editing.TerrainEditing;
import electrosphere.collision.CollisionEngine;
import electrosphere.engine.Globals;
import electrosphere.engine.assetmanager.AssetDataStrings;
import electrosphere.entity.Entity;
import electrosphere.server.physics.terrain.manager.ServerTerrainChunk;
@ -50,6 +53,7 @@ public class ScriptClientVoxelUtils {
}
if(Globals.clientSelectedVoxelType != null){
TerrainEditing.editTerrain(cursorPos, 1.1f, Globals.clientSelectedVoxelType.getId(), EDIT_INCREMENT);
Globals.movementAudioService.getAudioPath(Globals.clientSelectedVoxelType.getId(), InteractionType.STEP_SHOE_REG);
}
}
}
@ -108,6 +112,7 @@ public class ScriptClientVoxelUtils {
cursorPos = new Vector3d(centerPos).add(new Vector3d(eyePos).mul(-CollisionEngine.DEFAULT_INTERACT_DISTANCE));
}
TerrainEditing.removeTerrainGated(cursorPos, 1.1f, REMOVE_INCREMENT);
Globals.virtualAudioSourceManager.createVirtualAudioSource(AssetDataStrings.INTERACT_SFX_DIG, VirtualAudioSourceType.CREATURE, false);
}
}

View File

@ -585,7 +585,7 @@ public class ControlCategoryMainGame {
ItemActions.attemptSecondaryItemAction();
}});
controlMap.get(ITEM_SECONDARY).setOnRepeat(new ControlMethod() {public void execute(MouseState mouseState) {
ItemActions.attemptSecondaryItemAction();
ItemActions.repeatSecondaryItemAction();
}});
controlMap.get(ITEM_SECONDARY).setRepeatTimeout(0.5f * Main.targetFrameRate);
controlMap.get(ITEM_SECONDARY).setOnRelease(new ControlMethod() {public void execute(MouseState mouseState) {

View File

@ -597,6 +597,9 @@ public class Globals {
AssetDataStrings.UI_SFX_ITEM_RELEASE,
AssetDataStrings.UI_SFX_INVENTORY_OPEN,
AssetDataStrings.UI_SFX_INVENTORY_CLOSE,
AssetDataStrings.INTERACT_SFX_BLOCK_PICKUP,
AssetDataStrings.INTERACT_SFX_BLOCK_PLACE,
AssetDataStrings.INTERACT_SFX_DIG,
};
LoggerInterface.loggerStartup.INFO("Loading default audio resources");
for(String path : audioToInit){

View File

@ -82,4 +82,11 @@ public class AssetDataStrings {
public static final String COMPUTE_LIGHT_CLUSTER = "Shaders/core/light/cluster.comp";
public static final String COMPUTE_LIGHT_CULL = "Shaders/core/light/cull.comp";
/**
* Interaction-specific audio
*/
public static final String INTERACT_SFX_DIG = "Audio/interact/Medium Stones Impact C.wav";
public static final String INTERACT_SFX_BLOCK_PICKUP = "Audio/interact/Grab Cloth High A.wav";
public static final String INTERACT_SFX_BLOCK_PLACE = "Audio/interact/High Five A.wav";
}

View File

@ -15,6 +15,11 @@ public class ItemUsage {
*/
Integer blockId;
/**
* Controls whether this usage only fires on mouse down
*/
Boolean onlyOnMouseDown;
/**
* Gets the spawn entity id of the item usage
* @return The spawn entity id
@ -47,6 +52,22 @@ public class ItemUsage {
this.blockId = blockId;
}
/**
* Gets whether this usage only fires on mouse down
* @return if true, the usage only fires on mouse down
*/
public Boolean getOnlyOnMouseDown() {
return onlyOnMouseDown;
}
/**
* Sets whether this usage only fires on mouse down
* @param onlyOnMouseDown true to only fire on mouse down
*/
public void setOnlyOnMouseDown(Boolean onlyOnMouseDown) {
this.onlyOnMouseDown = onlyOnMouseDown;
}

View File

@ -39,6 +39,7 @@ public class PlayerActions {
Entity playerEntity = EntityLookupUtils.getEntityById(connectionHandler.getPlayerEntityId());
if(message.getitemActionCode() == ItemActions.ITEM_ACTION_CODE_SECONDARY){
int itemActionCodeState = message.getitemActionCodeState();
ServerToolbarState serverToolbarState = ServerToolbarState.getServerToolbarState(playerEntity);
if(serverToolbarState != null && serverToolbarState.getRealWorldItem() != null){
Item item = Globals.gameConfigCurrent.getItemMap().getItem(serverToolbarState.getRealWorldItem());
@ -60,7 +61,12 @@ public class PlayerActions {
if(shouldBlock){
PlayerActions.block(playerEntity, message);
} else if(item.getSecondaryUsage() != null){
PlayerActions.secondaryUsage(playerEntity, item, message);
if(
item.getSecondaryUsage().getOnlyOnMouseDown() == null ||
(itemActionCodeState == ItemActions.ITEM_ACTION_CODE_STATE_ON && item.getSecondaryUsage().getOnlyOnMouseDown())
){
PlayerActions.secondaryUsage(playerEntity, item, message);
}
}
}
}