From 20b7944602626f19a538e976a57d1d344e10f71b Mon Sep 17 00:00:00 2001
From: Logan Hunt
Date: Tue, 19 Apr 2022 16:51:15 -0600
Subject: Add music/sounds; fix a bug where you could attempt to resume a game
when it was won
---
src/systems/collision.js | 5 +++++
src/systems/logic.js | 23 ++++++++++++++++++-----
src/systems/menu.js | 9 ++++++++-
3 files changed, 31 insertions(+), 6 deletions(-)
(limited to 'src/systems')
diff --git a/src/systems/collision.js b/src/systems/collision.js
index 013ae1e..0732c74 100644
--- a/src/systems/collision.js
+++ b/src/systems/collision.js
@@ -11,6 +11,7 @@ game.system.Collision = (entitiesGrid) => {
burnedParticleSpawner.addComponent(game.components.Appearance({width: game.canvas.width / game.config.xDim, height: game.canvas.height / game.config.yDim}));
game.entities[burnedParticleSpawner.id] = burnedParticleSpawner;
entity.removeComponent("alive");
+ game.assets.death.play();
break;
} else if (entity.hasComponent("sinkable") && collided.hasComponent("sink")) {
const sunkParticleSpawner = game.createBorderParticles({colors: ["#16f7c9", "#0d6e5a", "#2fa18a", "#48cfb4", "#58877d", "#178054", "#2cdb92"]});
@@ -19,6 +20,7 @@ game.system.Collision = (entitiesGrid) => {
game.entities[sunkParticleSpawner.id] = sunkParticleSpawner;
entity.removeComponent("alive");
collided.removeComponent("alive");
+ game.assets.death.play();
break;
}
}
@@ -27,6 +29,8 @@ game.system.Collision = (entitiesGrid) => {
if (entity.hasComponent("controllable") && entity.hasComponent("gridPosition")) {
for (let collided of entitiesGrid[entity.components.gridPosition.y][entity.components.gridPosition.x].values()) {
if (collided.hasComponent("win")) {
+ game.assets.win.play();
+ game.win = true;
game.systems.menu.bringUpMenu();
game.systems.menu.setState("levelSelect");
}
@@ -70,6 +74,7 @@ game.system.Collision = (entitiesGrid) => {
if (wall) {
entity.removeComponent("momentum");
} else {
+ game.assets.move.play();
entitiesToPush.map((e) => {
const pushedParticleSpawner = game.createBorderParticles({maxSpeed: 0.1, minAmount: 10, maxAmount: 15});
pushedParticleSpawner.addComponent(game.components.Position(e.components.position));
diff --git a/src/systems/logic.js b/src/systems/logic.js
index 207fbc8..70f2c79 100644
--- a/src/systems/logic.js
+++ b/src/systems/logic.js
@@ -1,7 +1,10 @@
game.system.Logic = (entitiesGrid) => {
"use strict";
let currentVerbRules = [];
- let previousControllableIds = new Set();
+ let previousVerbState = {
+ controllable: new Set(),
+ win: new Set(),
+ };
const isWord = (entity) => entity.hasComponent("gridPosition") && (entity.hasComponent("verb") || entity.hasComponent("noun"));
const getFirstWordEntity = (gridPosition) => {
@@ -50,25 +53,35 @@ game.system.Logic = (entitiesGrid) => {
if (component) {
if (direction == "apply") {
if (verb == "you") {
- if (!previousControllableIds.has(id)) {
+ if (!previousVerbState.controllable.has(id)) {
const newYouParticleSpawner = game.createBorderParticles({colors: ["#ffc0cb", "#ffb6c1", "#ffc1cc", "#ffbcd9", "#ff1493"], minAmount: 80, maxAmount: 150, maxSpeed: 0.5});
newYouParticleSpawner.addComponent(game.components.Position(entity.components.position));
newYouParticleSpawner.addComponent(game.components.Appearance({width: game.canvas.width / game.config.xDim, height: game.canvas.height / game.config.yDim}));
game.entities[newYouParticleSpawner.id] = newYouParticleSpawner;
}
}
+ if (verb == "win") {
+ if (!previousVerbState.win.has(id)) {
+ game.assets.win.play();
+ }
+ }
entity.addComponent(component);
} else if (direction == "deapply") {
if (entity.hasComponent("controllable")) {
- previousControllableIds.add(id);
+ previousVerbState.controllable.add(id);
+ }
+ if (entity.hasComponent("win")) {
+ previousVerbState.win.add(id);
}
entity.removeComponent(component.name);
}
}
}
}
- if (direction == "apply" && changedEntityIds.some((id) => previousControllableIds.has(id))) {
- previousControllableIds = new Set();
+ if (direction == "apply") {
+ if (changedEntityIds.some((id) => previousVerbState.controllable.has(id))) {
+ previousVerbState.controllable = new Set();
+ }
}
}
if (application.hasComponent("noun")) {
diff --git a/src/systems/menu.js b/src/systems/menu.js
index 629a6a3..abd6748 100644
--- a/src/systems/menu.js
+++ b/src/systems/menu.js
@@ -16,6 +16,7 @@ game.system.Menu = () => {
const bringUpMenu = () => {
game.running = false;
+ game.assets.music.pause();
window.addEventListener("keydown", escapeEventListener);
setState("main");
};
@@ -82,6 +83,10 @@ game.system.Menu = () => {
Background is from PinImg.
+ Music is Fluffing A Duck by Kevin MacLeod.
+
+ Other sound effects generated on SFXR.
+
Developed by Logan Hunt, Ethan Payne
@@ -97,7 +102,9 @@ game.system.Menu = () => {
}
`;
}
- menuElement.innerHTML += "";
+ if (!game.win) {
+ menuElement.innerHTML += "";
+ }
if (state !== "main") {
menuElement.innerHTML += "";
}
--
cgit v1.2.3-70-g09d2