Skip to content

Commit

Permalink
Make script responsible for providing sound buffers
Browse files Browse the repository at this point in the history
  • Loading branch information
ultraq committed Feb 3, 2024
1 parent 56524f5 commit 0dc41bd
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,16 @@ import nz.net.ultraq.redhorizon.engine.scripting.Script
class ImageScript extends Script<Sprite> {

@Delegate
private final Sprite sprite = scriptable
private Sprite applyDelegate() {
return scriptable
}

@Override
void onSceneAdded(Scene scene) {

var width = sprite.imageFile.width
var height = sprite.imageFile.height
sprite
.scaleXY(scene.window.renderResolution.calculateScaleToFit(width, height))
.translate(-width / 2, -height / 2)
var width = imageFile.width
var height = imageFile.height
scaleXY(scene.window.renderResolution.calculateScaleToFit(width, height))
translate(-width / 2, -height / 2)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import nz.net.ultraq.redhorizon.engine.audio.AudioConfiguration
import nz.net.ultraq.redhorizon.engine.graphics.GraphicsConfiguration
import nz.net.ultraq.redhorizon.engine.input.KeyEvent
import nz.net.ultraq.redhorizon.engine.scenegraph.Node
import nz.net.ultraq.redhorizon.engine.scenegraph.nodes.SoundEffect
import nz.net.ultraq.redhorizon.engine.scenegraph.nodes.Sound
import nz.net.ultraq.redhorizon.engine.scenegraph.nodes.Sprite
import nz.net.ultraq.redhorizon.filetypes.ImageFile
import nz.net.ultraq.redhorizon.filetypes.Palette
Expand Down Expand Up @@ -71,7 +71,7 @@ class MediaPlayer extends Application {

var media = switch (mediaFile) {
case ImageFile -> new Sprite(mediaFile).attachScript(new ImageScript())
case SoundFile -> new SoundEffect(mediaFile).attachScript(new SoundPlaybackScript())
case SoundFile -> new Sound(mediaFile).attachScript(new SoundEffectScript())
default -> throw new UnsupportedOperationException("No media script for the associated file class of ${mediaFile}")
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,28 +16,36 @@

package nz.net.ultraq.redhorizon.cli.mediaplayer

import nz.net.ultraq.redhorizon.engine.audio.AudioRequests.BufferRequest
import nz.net.ultraq.redhorizon.engine.input.KeyControl
import nz.net.ultraq.redhorizon.engine.scenegraph.Scene
import nz.net.ultraq.redhorizon.engine.scenegraph.nodes.SoundEffect
import nz.net.ultraq.redhorizon.engine.scenegraph.nodes.Sound
import nz.net.ultraq.redhorizon.engine.scripting.Script

import static org.lwjgl.glfw.GLFW.GLFW_KEY_SPACE

/**
* A script to control playback of a sound effect.
* A script to control playback of a sound effect. This script will load up an
* entire sound into memory before playback.
*
* @author Emanuel Rabina
*/
class SoundPlaybackScript extends Script<SoundEffect> {
class SoundEffectScript extends Script<Sound> {

@Delegate
private final SoundEffect soundEffect = scriptable
private Sound applyDelegate() {
return scriptable
}

@Override
void onSceneAdded(Scene scene) {

buffer = scene
.requestCreateOrGet(new BufferRequest(soundFile.bits, soundFile.channels, soundFile.frequency, soundFile.soundData))
.get()

scene.inputEventStream.addControl(new KeyControl(GLFW_KEY_SPACE, 'Play', { ->
soundEffect.play()
play()
}))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ package nz.net.ultraq.redhorizon.engine.scenegraph.nodes

import nz.net.ultraq.redhorizon.engine.audio.AudioElement
import nz.net.ultraq.redhorizon.engine.audio.AudioRenderer
import nz.net.ultraq.redhorizon.engine.audio.AudioRequests.BufferRequest
import nz.net.ultraq.redhorizon.engine.audio.AudioRequests.SourceRequest
import nz.net.ultraq.redhorizon.engine.audio.Buffer
import nz.net.ultraq.redhorizon.engine.audio.Source
Expand All @@ -30,18 +29,17 @@ import nz.net.ultraq.redhorizon.filetypes.SoundFile
import groovy.transform.TupleConstructor

/**
* A simple piece of short audio that can be loaded entirely into memory for
* multiple playbacks.
* An emitter of sound in the scene.
*
* @author Emanuel Rabina
*/
@TupleConstructor(includes = ['soundFile'])
class SoundEffect implements Node<SoundEffect>, AudioElement, Playable {
class Sound implements Node<Sound>, AudioElement, Playable {

final SoundFile soundFile

private Source source
private Buffer buffer
Buffer buffer

@Override
void delete(AudioRenderer renderer) {
Expand All @@ -57,9 +55,6 @@ class SoundEffect implements Node<SoundEffect>, AudioElement, Playable {
source = scene
.requestCreateOrGet(new SourceRequest())
.get()
buffer = scene
.requestCreateOrGet(new BufferRequest(soundFile.bits, soundFile.channels, soundFile.frequency, soundFile.soundData))
.get()
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import nz.net.ultraq.redhorizon.engine.media.Playable
import nz.net.ultraq.redhorizon.engine.media.SoundTrack
import nz.net.ultraq.redhorizon.engine.scenegraph.Node
import nz.net.ultraq.redhorizon.engine.scenegraph.Scene
import nz.net.ultraq.redhorizon.engine.scenegraph.nodes.SoundEffect
import nz.net.ultraq.redhorizon.engine.scenegraph.nodes.Sound
import nz.net.ultraq.redhorizon.engine.time.GameClock
import nz.net.ultraq.redhorizon.filetypes.SoundFile

Expand Down Expand Up @@ -58,7 +58,7 @@ class SoundLoader extends MediaLoader<SoundFile, Playable> {
@Override
Playable load() {

media = file.forStreaming ? new SoundTrack(file) : new SoundEffect(file)
media = file.forStreaming ? new SoundTrack(file) : new Sound(file)
scene << media

removePlayPauseControl = inputEventStream.addControl(new KeyControl(GLFW_KEY_SPACE, 'Play/Pause', { ->
Expand Down

0 comments on commit 0dc41bd

Please sign in to comment.