xxxxxxxxxx
152
// Global Variables
let assetLoader;
let gameStateManager;
let soundProcessor;
let faceTracker;
let dataManager;
let soundManager;
let configMenu;
let assets;
// Global Variables for face detection
let video;
let faces;
let faceMesh;
let options = { maxFaces: 1, refineLandmarks: false, flipHorizontal: true };
// A global game object to track overall game state and instances
let game = {
score: 0,
player: null,
objects: [],
enemies: [],
laserBeams: [],
};
// Preload function to load all assets before setup()
function preload() {
assetLoader = new AssetLoader();
assetLoader.loadModels();
assetLoader.loadTextures();
assetLoader.loadSounds();
assetLoader.loadFonts();
// Initializes the FaceMesh model.
faceMesh = ml5.faceMesh(options);
}
// Setup function initializes game components after assets are loaded
function setup() {
createCanvas(windowWidth, windowHeight, WEBGL);
noStroke();
// Initializes the video capture and hide it
video = createCapture(VIDEO);
video.size(640, 480);
video.hide();
// Start detecting faces from the webcam video
faceMesh.detectStart(video, gotFaces);
// Assign assetLoader to global assets variable
assets = assetLoader;
// Verify that critical assets are loaded
if (
!assets.models.playerShip1 ||
!assets.textures.background1 ||
!assets.sounds.backgroundMusic
) {
console.error("Critical assets failed to load. Please check asset paths.");
noLoop(); // Stop the sketch if assets are missing
return;
} else {
console.log('Assets successfully loaded!');
}
// Initialize Sound Manager with loaded sounds
soundManager = new SoundManager();
soundManager.loadSounds(assets);
// Initialize Data Manager and load existing game data
dataManager = new DataManager();
dataManager.loadGameData();
// Initialize Face Tracker for head movement detection
faceTracker = new FaceTracker();
faceTracker.init();
// Initialize Sound Processor for ambient sound detection
soundProcessor = new SoundProcessor();
soundProcessor.init();
// Initialize Game State Manager to handle game flow
gameStateManager = new GameStateManager();
// Access ConfigMenu instance for spaceship and background selections
configMenu = gameStateManager.states.ConfigMenu;
// Initialize HUD (Heads-Up Display)
gameStateManager.states.Gameplay.hud = new HUD();
gameStateManager.states.Gameplay.hud.init();
}
function draw() {
// Continuously update and render the current game state
gameStateManager.update();
gameStateManager.render();
}
// Handle key presses for navigating game states
function keyPressed() {
if (gameStateManager.currentState instanceof StartScreen) {
gameStateManager.handleInput('keyPressed');
} else if (gameStateManager.currentState instanceof ConfigMenu) {
// Handle spaceship selection
if (key === '1') {
gameStateManager.states.ConfigMenu.handleInput('1');
} else if (key === '2') {
gameStateManager.states.ConfigMenu.handleInput('2');
}
// Handle background selection
else if (key === 'a') {
gameStateManager.states.ConfigMenu.handleInput('a');
} else if (key === 'b') {
gameStateManager.states.ConfigMenu.handleInput('b');
} else if (key === 'c') {
gameStateManager.states.ConfigMenu.handleInput('c');
} else if (key === 'd') {
gameStateManager.states.ConfigMenu.handleInput('d');
}
// Start game
else if (key === 'S' || key === 's') {
gameStateManager.states.ConfigMenu.handleInput('S');
}
} else if (gameStateManager.currentState instanceof Gameplay) {
if (key === 'Q' || key === 'q') {
gameStateManager.handleInput('Q');
}
} else if (gameStateManager.currentState instanceof EndScreen) {
if (key === 'R' || key === 'r') {
gameStateManager.handleInput('R');
} else if (key === 'C' || key === 'c') {
gameStateManager.handleInput('C');
}
}
}
// Handle mouse presses if necessary
function mousePressed() {
// Implement mouse interactions for UI elements or gameplay
}
// Adjust canvas size when the window is resized
function windowResized() {
resizeCanvas(windowWidth, windowHeight);
}
// Callback function for when faceMesh outputs data
function gotFaces(results) {
// Save the output to the faces variable
faces = results;
}