forked from arne/asdf-games
Added sound class, removed defect classes (Light)
This commit is contained in:
parent
8aa3215f5f
commit
6d735bdfca
@ -1,24 +0,0 @@
|
|||||||
const Lightsource = require("./Lightsource.js");
|
|
||||||
const Container = require("./Container.js");
|
|
||||||
|
|
||||||
class Lighting extends Container {
|
|
||||||
constructor(x, y, mapW, mapH, sources, style = { start: "rgba(0, 0, 0, 0)", stop: "rgba(0, 0, 0, 0.5)", radius: 75 }) {
|
|
||||||
super();
|
|
||||||
this.pos = { x, y };
|
|
||||||
this.w = mapW;
|
|
||||||
this.h = mapH;
|
|
||||||
|
|
||||||
this.style = style;
|
|
||||||
if (sources.length > 1) {
|
|
||||||
this.style.stop = `rgba(0, 0, 0, ${1 - Math.round(Math.pow(0.25, 1 / sources.length) * 100) / 100})`;
|
|
||||||
console.log(this.style.stop);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let index = 0; index < sources.length; index++) {
|
|
||||||
const element = sources[index];
|
|
||||||
this.children.push(new Lightsource(element.x, element.y, x, y, mapW, mapH, this.style));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = Lighting;
|
|
@ -1,12 +0,0 @@
|
|||||||
class Lightsource {
|
|
||||||
constructor(x, y, mapX, mapY, mapW, mapH, style = { start: "rgba(0, 0, 0, 0)", stop: "rgba(0, 0, 0, 0.5)", radius: 100 }) {
|
|
||||||
this.pos = { mapX, mapY };
|
|
||||||
this.radPos = { x, y };
|
|
||||||
this.mapW = mapW;
|
|
||||||
this.mapH = mapH;
|
|
||||||
this.radius = style.radius;
|
|
||||||
this.style = style;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = Lightsource;
|
|
27
lib/index.d.ts
vendored
27
lib/index.d.ts
vendored
@ -571,6 +571,33 @@ export class Camera extends Container<unknown> {
|
|||||||
update(t: number, dt: number): void;
|
update(t: number, dt: number): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class Sound {
|
||||||
|
|
||||||
|
src: string;
|
||||||
|
options: {
|
||||||
|
loop: boolean,
|
||||||
|
volume: number
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initiates HTML5 audio element for source audio file with control methods
|
||||||
|
* @param src Source audio file
|
||||||
|
* @param options Play settings
|
||||||
|
*/
|
||||||
|
constructor(src: String, options = {});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts playing the audio file
|
||||||
|
* @param overrides sets options for playing the sound using different setting as defined in `constructor()`
|
||||||
|
*/
|
||||||
|
play(overrides = {}): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stops playing the audio file
|
||||||
|
*/
|
||||||
|
stop(): void;
|
||||||
|
}
|
||||||
|
|
||||||
interface NumericalEntity {pos: Coordinates, w: number, h: number}
|
interface NumericalEntity {pos: Coordinates, w: number, h: number}
|
||||||
|
|
||||||
interface NumericalEntityWithHitbox extends NumericalEntity {hitBox: NumericalEntity}
|
interface NumericalEntityWithHitbox extends NumericalEntity {hitBox: NumericalEntity}
|
||||||
|
@ -5,11 +5,9 @@ var AnimManager = require("./AnimManager.js"),
|
|||||||
Game = require("./Game.js"),
|
Game = require("./Game.js"),
|
||||||
math = require("./utilities/math.js"),
|
math = require("./utilities/math.js"),
|
||||||
entity = require("./utilities/entity.js"),
|
entity = require("./utilities/entity.js"),
|
||||||
deadInTracks = require("./movement/deadInTracks.js"),
|
|
||||||
wallslide = require("./movement/wallslide.js"),
|
wallslide = require("./movement/wallslide.js"),
|
||||||
|
Sound = require("./sound/Sound.js"),
|
||||||
Rect = require("./Rect.js"),
|
Rect = require("./Rect.js"),
|
||||||
Lighting = require("./Lighting.js"),
|
|
||||||
Lightsource = require("./Lightsource.js"),
|
|
||||||
KeyControls = require("./controls/KeyControls.js"),
|
KeyControls = require("./controls/KeyControls.js"),
|
||||||
MouseControls = require("./controls/MouseControls.js"),
|
MouseControls = require("./controls/MouseControls.js"),
|
||||||
Sprite = require("./Sprite.js"),
|
Sprite = require("./Sprite.js"),
|
||||||
@ -30,11 +28,9 @@ module.exports = {
|
|||||||
Game,
|
Game,
|
||||||
math,
|
math,
|
||||||
entity,
|
entity,
|
||||||
deadInTracks,
|
|
||||||
wallslide,
|
wallslide,
|
||||||
|
Sound,
|
||||||
Rect,
|
Rect,
|
||||||
Lighting,
|
|
||||||
Lightsource,
|
|
||||||
KeyControls,
|
KeyControls,
|
||||||
MouseControls,
|
MouseControls,
|
||||||
Sprite,
|
Sprite,
|
||||||
|
@ -1,16 +0,0 @@
|
|||||||
const entity = require("../utilities/entity");
|
|
||||||
|
|
||||||
function deadInTracks(ent, map, x = 0, y = 0) {
|
|
||||||
const bounds = entity.bounds(ent);
|
|
||||||
const tiles = map.tilesAtCorners(bounds, x, y);
|
|
||||||
const walks = tiles.map(t => t && t.frame.walkable);
|
|
||||||
const blocked = walks.some(w => !w);
|
|
||||||
if (blocked) {
|
|
||||||
x = 0,
|
|
||||||
y = 0;
|
|
||||||
}
|
|
||||||
return { x, y };
|
|
||||||
}
|
|
||||||
module.exports = {
|
|
||||||
deadInTracks
|
|
||||||
};
|
|
53
lib/sound/Sound.js
Normal file
53
lib/sound/Sound.js
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
class Sound {
|
||||||
|
constructor(src, options = {}) {
|
||||||
|
this.playing = false;
|
||||||
|
this.src = src;
|
||||||
|
this.options = Object.assign({ volume: 1 }, options);
|
||||||
|
|
||||||
|
// Configure audio element
|
||||||
|
const audio = new Audio();
|
||||||
|
audio.src = src;
|
||||||
|
if (options.loop) {
|
||||||
|
audio.loop = true;
|
||||||
|
}
|
||||||
|
audio.addEventListener(
|
||||||
|
"error",
|
||||||
|
() => {
|
||||||
|
throw Error(`Error loading audio: ${src}`);
|
||||||
|
},
|
||||||
|
false
|
||||||
|
);
|
||||||
|
audio.addEventListener(
|
||||||
|
"ended",
|
||||||
|
() => {
|
||||||
|
this.playing = false;
|
||||||
|
},
|
||||||
|
false
|
||||||
|
);
|
||||||
|
this.audio = audio;
|
||||||
|
}
|
||||||
|
|
||||||
|
play(overrides) {
|
||||||
|
const { audio, options } = this;
|
||||||
|
const opts = Object.assign({ time: 0 }, options, overrides);
|
||||||
|
audio.volume = opts.volume;
|
||||||
|
audio.currentTime = opts.time;
|
||||||
|
audio.play();
|
||||||
|
this.playing = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
stop() {
|
||||||
|
this.audio.pause();
|
||||||
|
this.playing = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
get volume() {
|
||||||
|
return this.audio.volume;
|
||||||
|
}
|
||||||
|
|
||||||
|
set volume(volume) {
|
||||||
|
this.options.volume = this.audio.volume = volume;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Sound;
|
Loading…
Reference in New Issue
Block a user