From d62da3341f2885b65a69d0a7f9b71576d316487b Mon Sep 17 00:00:00 2001 From: Robbie Antenesse Date: Wed, 20 Apr 2016 16:19:22 -0600 Subject: [PATCH] New OversimplifiedJS version to fix adding objects to room and a new way to add audio. --- Oversimplified.js | 238 +++++++++++++++++++--------------------------- loadAudio.js | 28 +++--- 2 files changed, 111 insertions(+), 155 deletions(-) diff --git a/Oversimplified.js b/Oversimplified.js index 9ee37cd..871325a 100644 --- a/Oversimplified.js +++ b/Oversimplified.js @@ -560,25 +560,27 @@ Oversimplified.Room.prototype.Draw = function () { } // Add a GameObject or PremadeObject to the room. -Oversimplified.Room.prototype.AddObject = function (newObjectName, newObjectOptions) { - newObjectOptions = (typeof newObjectOptions !== 'undefined') ? newObjectOptions : {}; +Oversimplified.Room.prototype.AddObject = function (objectOrNewName, objectOptions) { + objectOptions = (typeof objectOptions !== 'undefined') ? objectOptions : {}; var self = this; - if (newObjectName.type == "GameObject") { //Create from prefabricated object - var newID = Oversimplified.nextID++; - var newName = newObjectName.name + newID.toString(); - self.objects[newName] = Oversimplified.CopyObject(newObjectName, newID, newName, newObjectOptions); + if (objectOrNewName.type == "GameObject") { //Create from prefabricated object + // Overwrite manual id or name, if entered. + objectOptions.id = Oversimplified.nextID++; + objectOptions.name = objectOrNewName.name + objectOptions.id.toString(); + // console.log(objectOptions.name); + self.objects[objectOptions.name] = Oversimplified.CopyObject(objectOrNewName, objectOptions); - return self.objects[newName]; + return self.objects[objectOptions.name]; } else { - if (self.objects[newObjectName]) { - if (Oversimplified.DEBUG.showMessages) console.log("Object with name \"" + newObjectName + "\" already exists in current room!"); + if (self.objects[objectOrNewName]) { + if (Oversimplified.DEBUG.showMessages) console.log("Object with name \"" + objectOrNewName + "\" already exists in current room!"); return false; } - self.objects[newObjectName] = new Oversimplified.GameObject(newObjectName, newObjectOptions); + self.objects[objectOrNewName] = new Oversimplified.GameObject(objectOrNewName, objectOptions); - return self.objects[newObjectName]; + return self.objects[objectOrNewName]; } } @@ -634,8 +636,8 @@ Oversimplified.GameObject = function (name, options) {// x, y, imageSrc, maskIma this.persistent = typeof options.persistent !== 'undefined' ? options.persistent : false; this.x = typeof options.x !== 'undefined' ? options.x : -1; this.y = typeof options.y !== 'undefined' ? options.y : -1; - this.xPrevious = this.x; - this.yPrevious = this.y; + this.xPrevious = this.x; + this.yPrevious = this.y; this.screenX = this.x - Oversimplified.camera.x; this.screenY = this.y - Oversimplified.camera.y; @@ -794,8 +796,8 @@ Oversimplified.GameObject.prototype.Start = function () { Oversimplified.GameObject.prototype.Update = function () { this.screenX = this.x - Oversimplified.camera.x; this.screenY = this.y - Oversimplified.camera.y; - this.xPrevious = this.x; - this.yPrevious = this.y; + this.xPrevious = this.x; + this.yPrevious = this.y; if (!this.doFirstHasRun) { this.DoFirst(); @@ -896,20 +898,20 @@ Oversimplified.GameObject.prototype.IsOverlapping = function (doSimple) { // // Accepts true, false, or no value. Oversimplified.GameObject.prototype.IfOverlappingThenMove = function (doSimple) { - var overlappingObject = this.IsOverlapping(doSimple); - - if (overlappingObject != false) { - if (this.x < overlappingObject.x) + var overlappingObject = this.IsOverlapping(doSimple); + + if (overlappingObject != false) { + if (this.x < overlappingObject.x) this.x--; - if (this.x >= overlappingObject.x) + if (this.x >= overlappingObject.x) this.x++; - if (this.y < overlappingObject.y) + if (this.y < overlappingObject.y) this.y--; - if (this.y >= overlappingObject.y) + if (this.y >= overlappingObject.y) this.y++; return true; - } else { + } else { return false; } } @@ -917,7 +919,7 @@ Oversimplified.GameObject.prototype.IfOverlappingThenMove = function (doSimple) // Prevents the object from moving outside of the room's boundaries. Oversimplified.GameObject.prototype.KeepInsideRoom = function () { var currentRoom = Oversimplified.Rooms[Oversimplified.Rooms.currentRoom] - if (this.x < this.xBound || this.x > currentRoom.width - this.xBound) + if (this.x < this.xBound || this.x > currentRoom.width - this.xBound) { this.x = this.xPrevious; } @@ -1070,7 +1072,7 @@ Oversimplified.GUIs.Add = function (guiName, guiOptions) { Oversimplified.GUIs[guiName] = new Oversimplified.Animation(guiName, guiOptions); return Oversimplified.GUIs[guiName]; } else { - if (Oversimplified.DEBUG.showMessages) console.log("An GUI with the name \"" + guiName + "\" already exists!"); + if (Oversimplified.DEBUG.showMessages) console.log("A GUI with the name \"" + guiName + "\" already exists!"); return false; } } @@ -1116,10 +1118,39 @@ Oversimplified.GUI.prototype.AddElement = function (options) { /* Effects namespace */ Oversimplified.Effects = { - Sounds: [], - Tunes: [], + Sounds: {}, + Tunes: {} } +// Aliases for Sounds and Tunes +Oversimplified.Effects.S = Oversimplified.Effects.Sounds; +Oversimplified.Effects.T = Oversimplified.Effects.Music = Oversimplified.Effects.M = Oversimplified.Effects.Tunes; + +// Alias for Effects +Oversimplified.E = Oversimplified.Effects; + +Oversimplified.Effects.AddSound = function (soundName, soundSources) { + if (typeof Oversimplified.Effects.Sounds[soundName] === 'undefined') { + Oversimplified.Effects.Sounds[soundName] = new Oversimplified.Sound(soundName, soundSources); + return Oversimplified.Effects.Sounds[soundName]; + } else { + if (Oversimplified.DEBUG.showMessages) console.log("A Sound with the name \"" + soundName + "\" already exists!"); + return false; + } +} +Oversimplified.Effects.NewSound = Oversimplified.Effects.AddSound; + +Oversimplified.Effects.AddTune = function (tuneName, tuneSources) { + if (typeof Oversimplified.Effects.Tunes[tuneName] === 'undefined') { + Oversimplified.Effects.Tunes[tuneName] = new Oversimplified.Sound(tuneName, tuneSources); + return Oversimplified.Effects.Tunes[tuneName]; + } else { + if (Oversimplified.DEBUG.showMessages) console.log("A Tune with the name \"" + tuneName + "\" already exists!"); + return false; + } +} +Oversimplified.Effects.AddMusic = Oversimplified.Effects.NewTune = Oversimplified.Effects.NewMusic = Oversimplified.Effects.AddTune; + Oversimplified.Effects.Tunes.CheckLoops = function () { for (var tune in Oversimplified.Effects.Tunes) { if (Oversimplified.Effects.Tunes[tune].type == "Tune" && Oversimplified.Effects.Tunes[tune].IsPlaying()) { @@ -1133,30 +1164,33 @@ Oversimplified.Effects.Tunes.CheckLoops = function () { Plays a sound effect once. Preferably source should be a .wav file and secondarySource should be a .mp3 file. */ -Oversimplified.Sound = function (name, source, secondarySource) { +Oversimplified.Sound = function (name, sourcesObject) { this.id = Oversimplified.nextID++; - secondarySource = typeof secondarySource !== 'undefined' ? secondarySource : false; + sourcesObject = typeof sourcesObject !== 'undefined' ? sourcesObject : {}; this.name = name; - this.source = source; - this.secondarySource = secondarySource; + this.source = { + mp3: (typeof sourcesObject.mp3 !== 'undefined' && sourcesObject.mp3.length > 0) ? sourcesObject.mp3 : false, + wav: (typeof sourcesObject.wav !== 'undefined' && sourcesObject.wav.length > 0) ? sourcesObject.wav : false, + ogg: (typeof sourcesObject.ogg !== 'undefined' && sourcesObject.ogg.length > 0) ? sourcesObject.ogg : false + }; this.audioElement = document.createElement("audio"); this.audioElement.id = this.name + this.id.toString(); + // Alias for this.audioElement + this.element = this.audioElement; - var audioSource = document.createElement("source"); - audioSource.src = this.source; - this.audioElement.appendChild(audioSource); - - if (this.secondarySource != false) { - audioSource.src = this.secondarySource; - this.audioElement.appendChild(audioSource); + for (var type in this.source) { + if (type !== false) { + var audioSource = document.createElement("source"); + audioSource.src = this.source[type]; + this.audioElement.appendChild(audioSource); + } } document.getElementById("audio").appendChild(this.audioElement); this.audioElement.load(); - this.element = this.audioElement; } Oversimplified.Sound.prototype.type = "Sound"; @@ -1178,32 +1212,34 @@ Oversimplified.Sound.prototype.IsPlaying = function () { Preferably source should be a .mp3 file and secondarySource should be a .ogg file. If duration is specified, loop when duration is reached. */ -Oversimplified.Tune = function (name, source, secondarySource, duration) { +Oversimplified.Tune = function (name, tuneOptions) { this.id = Oversimplified.nextID++; - secondarySource = typeof secondarySource !== 'undefined' ? secondarySource : false; - duration = typeof duration !== 'undefined' ? duration : false; + tuneOptions = (typeof tuneOptions !== 'undefined') ? tuneOptions : {}; this.name = name; - this.source = source; - this.secondarySource = secondarySource; - this.duration = duration; + this.source = { + mp3: (typeof tuneOptions.mp3 !== 'undefined' && tuneOptions.mp3.length > 0) ? tuneOptions.mp3 : false, + wav: (typeof tuneOptions.wav !== 'undefined' && tuneOptions.wav.length > 0) ? tuneOptions.wav : false, + ogg: (typeof tuneOptions.ogg !== 'undefined' && tuneOptions.ogg.length > 0) ? tuneOptions.ogg : false + }; + this.duration = (typeof tuneOptions.duration !== 'undefined') ? tuneOptions.duration : false; this.audioElement = document.createElement("audio"); this.audioElement.id = this.name + this.id.toString(); + // Alias for this.audioElement + this.element = this.audioElement; - var audioSource = document.createElement("source"); - audioSource.src = this.source; - this.audioElement.appendChild(audioSource); - - if (this.secondarySource != false) { - audioSource.src = this.secondarySource; - this.audioElement.appendChild(audioSource); + for (var type in this.source) { + if (type !== false) { + var audioSource = document.createElement("source"); + audioSource.src = this.source[type]; + this.audioElement.appendChild(audioSource); + } } document.getElementById("audio").appendChild(this.audioElement); this.audioElement.load(); - this.element = this.audioElement; } Oversimplified.Tune.prototype.type = "Tune"; @@ -1228,56 +1264,11 @@ Oversimplified.Tune.prototype.IsPlaying = function () { return !this.element.paused && !this.element.ended && 0 < this.element.currentTime; } -// Aliases for Sounds and Tunes -Oversimplified.Effects.S = Oversimplified.Effects.Sounds; -Oversimplified.Effects.T = Oversimplified.Effects.Tunes; - -// Alias for "Tunes" in case it's too hard to remember. -Oversimplified.Effects.Music = Oversimplified.Effects.Tunes; -Oversimplified.Effects.M = Oversimplified.Effects.Tunes; - -// Alias for Effects -Oversimplified.E = Oversimplified.Effects; - -// Create a new GameObject inside the current Room and return it. -Oversimplified.CreateObject = function (newObjectName, x, y, imageSrc, maskImageSrc, animationsArray) { - if (newObjectName.type == "GameObject") { //Create from prefabricated object - var newID = Oversimplified.nextID++; - var newName = newObjectName.name + newID.toString(); - Oversimplified.O[newName] = Oversimplified.CopyObject(newObjectName, newID, newName); - - Oversimplified.O[newName].x = x; - Oversimplified.O[newName].y = y; - - return Oversimplified.O[newName]; - } - else { - if (Oversimplified.O[newObjectName]) { - if (Oversimplified.DEBUG.showMessages) console.log("Object with name \"" + newObjectName + "\" already exists in current room!"); - return false; - } - Oversimplified.O[newObjectName] = new Oversimplified.GameObject(newObjectName, x, y, imageSrc, maskImageSrc, animationsArray); - } - - Oversimplified.O[newObjectName].Start(); - - return Oversimplified.O[newObjectName]; -} - /* Copy a GameObject - -newID and newName are optional. If excluded, they are auto-populated with the next id value and the original object's name. -Use "identical" to copy name and id of original object. */ -Oversimplified.CopyObject = function (object, newID, newName, objectOptions) { +Oversimplified.CopyObject = function (object, objectOptions) { var resultingCopy = {}; - if (newID != "identical") { - resultingCopy.id = typeof newID !== 'undefined' ? newID : Oversimplified.nextID++; - resultingCopy.name = typeof newName !== 'undefined' ? newName : object.name + resultingCopy.id.toString(); - } else { //If second argument is "identical" with quotes, then copy id and name, too. - resultingCopy.id = object.id; - resultingCopy.name = object.name; - } + //Copy Oversimplified.GameObject-unique properties if (object.type == 'GameObject') { resultingCopy.self = resultingCopy; @@ -1311,52 +1302,17 @@ Oversimplified.CopyObject = function (object, newID, newName, objectOptions) { } } for (var option in objectOptions) { - //Overwrite any properties. - if (object[option].slice) { // If it's an array, copy its values. - resultingCopy[option] = object[option].slice(); + //Overwrite any extra properties specified in objectOptions. + if (objectOptions[option].slice) { // If it's an array, copy its values. + resultingCopy[option] = objectOptions[option].slice(); } else { resultingCopy[option] = objectOptions[option]; } } - - return resultingCopy; -} -/* Copy any class (needs expanding) - -newID and newName are optional. If excluded, they are auto-populated with the next id value and the original object's name. -Use "identical" to copy the id and name of the original object. -*/ -Oversimplified.Copy = function (object, newID, newName) { - var resultingCopy = {}; - if (newID != "identical") { - resultingCopy.id = typeof newID !== 'undefined' ? newID : Oversimplified.nextID++; - resultingCopy.name = typeof newName !== 'undefined' ? newName : object.name + resultingCopy.id.toString(); - } else { //If second argument is "identical" with quotes, then copy id and name, too. - resultingCopy.id = object.id; - resultingCopy.name = object.name; - } - //Copy Oversimplified.GameObject-unique properties - if (object.type == 'GameObject') { - resultingCopy = Oversimplified.CopyObject(object, newID, newName); - } - if (object.type == 'Room') { - /* resultingCopy.background = new Image(); - resultingCopy.background.loaded = false; - resultingCopy.background.src = object.background.src; - resultingCopy.background.onload = function () { - resultingCopy.loaded = true; - } */ - resultingCopy.objects = {}; - for (var subObject in object.objects) { - resultingCopy.objects[subObject] = Oversimplified.Copy(object.objects[subObject]); - } - } - for (var property in object) { - if (typeof resultingCopy[property] === 'undefined') { - resultingCopy[property] = object[property]; - } - } + // If id and name were not specified in the objectOptions and are therefore not set, set them! + if (typeof resultingCopy.id === 'undefined') resultingCopy.id = Oversimplified.nextID++; + if (typeof resultingCopy.name === 'undefined') resultingCopy.name = object.name + resultingCopy.id.toString(); return resultingCopy; } diff --git a/loadAudio.js b/loadAudio.js index a5fe563..50aa589 100644 --- a/loadAudio.js +++ b/loadAudio.js @@ -1,17 +1,17 @@ -var mus_title = new OS.Tune("Title", "audio/music/title.mp3", "audio/music/title.wav"); -var mus_sail = new OS.Tune("Sailing", "audio/music/ocean.mp3", "audio/music/ocean.wav"); -var mus_trade = new OS.Tune("Trade", "audio/music/trade.mp3", "audio/music/trade.wav"); -var mus_credits = new OS.Tune("Credits", "audio/music/credits.mp3", "audio/music/credits.wav"); +var mus_title = new OS.E.AddTune("Title", {mp3: "audio/music/title.mp3", wav: "audio/music/title.wav"}); +var mus_sail = new OS.E.AddTune("Sailing", {mp3: "audio/music/ocean.mp3", wav: "audio/music/ocean.wav"}); +var mus_trade = new OS.E.AddTune("Trade", {mp3: "audio/music/trade.mp3", wav: "audio/music/trade.wav"}); +var mus_credits = new OS.E.AddTune("Credits", {mp3: "audio/music/credits.mp3", wav: "audio/music/credits.wav"}); -var snd_buy = new OS.Sound("Buy", "audio/sounds/Buy.wav", "audio/sounds/Buy.mp3"); -var snd_cannotbuy = new OS.Sound("Cannot Buy", "audio/sounds/Cannot_Buy.wav", "audio/sounds/Cannot_Buy.mp3"); -var snd_heal = new OS.Sound("Heal", "audio/sounds/Heal.wav", "audio/sounds/Heal.mp3"); -var snd_illness = new OS.Sound("Illness", "audio/sounds/Illness.wav", "audio/sounds/Illness.mp3"); -var snd_cursordown = new OS.Sound("Move Cursor Down", "audio/sounds/Move_Cursor.wav", "audio/sounds/Move_Cursor.mp3"); -var snd_cursorup = new OS.Sound("Move Cursor Up", "audio/sounds/Move_Cursor_Up.wav", "audio/sounds/Move_Cursor_Up.mp3"); -var snd_sailing = new OS.Sound("Sailing", "audio/sounds/Sailing.wav", "audio/sounds/Sailing.mp3"); -var snd_select = new OS.Sound("Select", "audio/sounds/Select.wav", "audio/sounds/Select.mp3"); -var snd_sell = new OS.Sound("Sell", "audio/sounds/Sell.wav", "audio/sounds/Sell.mp3"); -var snd_wave = new OS.Sound("Wave Crash", "audio/sounds/Wave_Crash.wav", "audio/sounds/Wave_Crash.mp3"); +var snd_buy = new OS.E.AddSound("Buy", {wav: "audio/sounds/Buy.wav", mp3: "audio/sounds/Buy.mp3"}); +var snd_cannotbuy = new OS.E.AddSound("Cannot Buy", {wav: "audio/sounds/Cannot_Buy.wav", mp3: "audio/sounds/Cannot_Buy.mp3"}); +var snd_heal = new OS.E.AddSound("Heal", {wav: "audio/sounds/Heal.wav", mp3: "audio/sounds/Heal.mp3"}); +var snd_illness = new OS.E.AddSound("Illness", {wav: "audio/sounds/Illness.wav", mp3: "audio/sounds/Illness.mp3"}); +var snd_cursordown = new OS.E.AddSound("Move Cursor Down", {wav: "audio/sounds/Move_Cursor.wav", mp3: "audio/sounds/Move_Cursor.mp3"}); +var snd_cursorup = new OS.E.AddSound("Move Cursor Up", {wav: "audio/sounds/Move_Cursor_Up.wav", mp3: "audio/sounds/Move_Cursor_Up.mp3"}); +var snd_sailing = new OS.E.AddSound("Sailing", {wav: "audio/sounds/Sailing.wav", mp3: "audio/sounds/Sailing.mp3"}); +var snd_select = new OS.E.AddSound("Select", {wav: "audio/sounds/Select.wav", mp3: "audio/sounds/Select.mp3"}); +var snd_sell = new OS.E.AddSound("Sell", {wav: "audio/sounds/Sell.wav", mp3: "audio/sounds/Sell.mp3"}); +var snd_wave = new OS.E.AddSound("Wave Crash", {wav: "audio/sounds/Wave_Crash.wav", mp3: "audio/sounds/Wave_Crash.mp3"}); function loadAudio() {}