Skip to content

Commit 484ff3d

Browse files
committed
fix several bugs in new music engine
1 parent 7045010 commit 484ff3d

File tree

5 files changed

+57
-23
lines changed

5 files changed

+57
-23
lines changed

blade-engine/src/com/bladecoder/engine/actions/MusicAction.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,21 +27,25 @@ public class MusicAction implements Action {
2727
@ActionPropertyDescription("The music filename to play. If empty, the current music will be stopped.")
2828
private String filename;
2929

30-
@ActionProperty(required = true)
30+
@ActionProperty(required = true, defaultValue = "false")
3131
@ActionPropertyDescription("Music Loop")
3232
private boolean loop = false;
3333

34-
@ActionProperty(required = true)
34+
@ActionProperty(required = true, defaultValue = "0")
3535
@ActionPropertyDescription("The music starts to play after the delay.")
3636
private float initialDelay = 0;
3737

38-
@ActionProperty(required = true)
38+
@ActionProperty(required = true, defaultValue = "-1")
3939
@ActionPropertyDescription("Time for repeating the music when no looping. -1 for no repeat.")
4040
private float repeatDelay = -1;
4141

42-
@ActionProperty(required = true)
42+
@ActionProperty(required = true, defaultValue = "true")
4343
@ActionPropertyDescription("Stops the music when leaving the current scene.")
4444
private boolean stopWhenLeaving = true;
45+
46+
@ActionProperty(required = true, defaultValue = "1.0")
47+
@ActionPropertyDescription("Volume of the music [0-1].")
48+
private float volume = 1.0f;
4549

4650
@Override
4751
public boolean run(VerbRunner cb) {
@@ -57,6 +61,7 @@ public boolean run(VerbRunner cb) {
5761
md.setInitialDelay(initialDelay);
5862
md.setRepeatDelay(repeatDelay);
5963
md.setStopWhenLeaving(stopWhenLeaving);
64+
md.setVolume(volume);
6065

6166
musicEngine.setMusic(md);
6267
}

blade-engine/src/com/bladecoder/engine/model/InteractiveActor.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,13 @@ public void read(Json json, JsonValue jsonData) {
280280
layer = json.readValue("layer", String.class, jsonData);
281281
} else {
282282
playingSound = json.readValue("playingSound", String.class, jsonData);
283+
284+
if(playingSound != null && (sounds == null || sounds.get(playingSound) == null)) {
285+
EngineLogger.debug("Playing sound not found: " + playingSound);
286+
playingSound = null;
287+
}
288+
289+
283290
playerInside = json.readValue("playerInside", boolean.class, false, jsonData);
284291
String newLayer = json.readValue("layer", String.class, jsonData);
285292

blade-engine/src/com/bladecoder/engine/model/MusicDesc.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ public class MusicDesc {
2727
*/
2828
private boolean stopWhenLeaving = true;
2929

30+
private float volume = 1.0f;
31+
3032
public MusicDesc() {
3133

3234
}
@@ -37,6 +39,7 @@ public MusicDesc(MusicDesc md) {
3739
initialDelay = md.getInitialDelay();
3840
repeatDelay = md.getRepeatDelay();
3941
stopWhenLeaving = md.isStopWhenLeaving();
42+
volume = md.getVolume();
4043
}
4144

4245
public String getFilename() {
@@ -78,4 +81,12 @@ public boolean isStopWhenLeaving() {
7881
public void setStopWhenLeaving(boolean stopWhenLeaving) {
7982
this.stopWhenLeaving = stopWhenLeaving;
8083
}
84+
85+
public float getVolume() {
86+
return volume;
87+
}
88+
89+
public void setVolume(float volume) {
90+
this.volume = volume;
91+
}
8192
}

blade-engine/src/com/bladecoder/engine/model/MusicEngine.java

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -55,36 +55,35 @@ public void stopMusic() {
5555
public void setMusic(MusicDesc d) {
5656
stopMusic();
5757
currentMusicDelay = 0;
58-
58+
5959
if (d != null) {
60-
if(!d.getFilename().equals(desc.getFilename())) {
60+
if (desc != null)
6161
dispose();
62-
63-
desc = new MusicDesc(d);
64-
65-
loadAssets();
66-
EngineAssetManager.getInstance().finishLoading();
67-
music = EngineAssetManager.getInstance().getMusic(desc.getFilename());
68-
} else {
69-
// Don't dispose if is the same music file.
70-
desc = new MusicDesc(d);
71-
}
62+
63+
desc = new MusicDesc(d);
64+
65+
retrieveAssets();
7266
} else {
7367
dispose();
7468
desc = null;
7569
}
7670
}
77-
71+
7872
public void leaveScene(MusicDesc newMusicDesc) {
79-
if(newMusicDesc != null) {
73+
74+
if (desc != null && !desc.isStopWhenLeaving() &&
75+
(newMusicDesc == null || newMusicDesc.getFilename().equals(desc.getFilename())))
76+
return;
77+
78+
if (desc != null) {
8079
currentMusicDelay = 0;
8180
stopMusic();
8281
dispose();
82+
}
83+
84+
if (newMusicDesc != null) {
8385
desc = new MusicDesc(newMusicDesc);
84-
} else if(music != null && desc.isStopWhenLeaving()) {
85-
currentMusicDelay = 0;
86-
stopMusic();
87-
dispose();
86+
} else {
8887
desc = null;
8988
}
9089
}
@@ -113,7 +112,7 @@ public void update(float delta) {
113112

114113
@Override
115114
public void dispose() {
116-
if ( music != null) {
115+
if (music != null) {
117116
EngineLogger.debug("DISPOSING MUSIC: " + desc.getFilename());
118117
EngineAssetManager.getInstance().disposeMusic(desc.getFilename());
119118
music = null;
@@ -132,8 +131,17 @@ public void loadAssets() {
132131
@Override
133132
public void retrieveAssets() {
134133
if (music == null && desc != null) {
134+
135+
if(!EngineAssetManager.getInstance().isLoaded(desc.getFilename())) {
136+
loadAssets();
137+
EngineAssetManager.getInstance().finishLoading();
138+
}
139+
135140
EngineLogger.debug("RETRIEVING MUSIC: " + desc.getFilename());
141+
136142
music = EngineAssetManager.getInstance().getMusic(desc.getFilename());
143+
music.setVolume(desc.getVolume());
144+
137145
if (isPlayingSer) {
138146
if (music != null) {
139147
music.setPosition(musicPosSer);

blade-engine/src/com/bladecoder/engine/model/World.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -977,6 +977,9 @@ public void read(Json json, JsonValue jsonData) {
977977

978978
transition = json.readValue("transition", Transition.class, jsonData);
979979
musicEngine = json.readValue("musicEngine", MusicEngine.class, jsonData);
980+
981+
if(musicEngine == null)
982+
musicEngine = new MusicEngine();
980983

981984
ActionCallbackQueue.read(json, jsonData);
982985

0 commit comments

Comments
 (0)