Files
novafarma/MASTER_DESIGN_RECOVERY/MasterGameSystemsManager.js
2026-01-16 02:43:46 +01:00

447 lines
15 KiB
JavaScript

/**
* MASTER GAME SYSTEMS MANAGER
* Centralized coordinator for all game systems
* Created: January 4, 2026
*
* Integrates:
* - Sleep System
* - Crafting Tables System
* - Bakery Shop System
* - Barber Shop System
* - Lawyer Office System
* - Zombie Miner Automation System
* - Town Growth System
* - NPC Privacy System
* - Existing Mining System
*/
class MasterGameSystemsManager {
constructor(game) {
this.game = game;
this.scene = game.scene;
console.log('🎮 Initializing Master Game Systems Manager...');
// Initialize all systems
this.initializeSystems();
// Set up cross-system event listeners
this.setupEventListeners();
console.log('✅ Master Game Systems Manager initialized!');
}
/**
* Initialize all game systems
*/
initializeSystems() {
// HOME & SLEEP
this.sleepSystem = new SleepSystem(this.game);
console.log(' ✓ Sleep System');
// CRAFTING
this.craftingSystem = new CraftingTablesSystem(this.game);
console.log(' ✓ Crafting Tables System');
// TOWN BUILDINGS
this.bakerySystem = new BakeryShopSystem(this.game);
console.log(' ✓ Bakery Shop System');
this.barberSystem = new BarberShopSystem(this.game);
console.log(' ✓ Barber Shop System');
this.lawyerSystem = new LawyerOfficeSystem(this.game);
console.log(' ✓ Lawyer Office System');
// MINING & AUTOMATION
this.zombieMinerSystem = new ZombieMinerAutomationSystem(this.game);
console.log(' ✓ Zombie Miner Automation System');
// TOWN GROWTH
this.townGrowthSystem = new TownGrowthSystem(this.game);
console.log(' ✓ Town Growth System');
// NPC SYSTEMS
this.npcPrivacySystem = new NPCPrivacySystem(this.game);
console.log(' ✓ NPC Privacy System');
// Register all systems globally
this.registerSystems();
}
/**
* Register systems to game registry
*/
registerSystems() {
this.game.registry.set('sleepSystem', this.sleepSystem);
this.game.registry.set('craftingSystem', this.craftingSystem);
this.game.registry.set('bakerySystem', this.bakerySystem);
this.game.registry.set('barberSystem', this.barberSystem);
this.game.registry.set('lawyerSystem', this.lawyerSystem);
this.game.registry.set('zombieMinerSystem', this.zombieMinerSystem);
this.game.registry.set('townGrowthSystem', this.townGrowthSystem);
this.game.registry.set('npcPrivacySystem', this.npcPrivacySystem);
console.log(' ✓ All systems registered to game registry');
}
/**
* Set up cross-system event listeners
*/
setupEventListeners() {
// TOWN GROWTH → SERVICES
this.game.events.on('serviceUnlocked', (data) => {
this.onServiceUnlocked(data);
});
// MARRIAGE → LAWYER AUTO-UNLOCK
this.game.events.on('marriageComplete', () => {
this.lawyerSystem.checkAutoUnlock();
});
// RELATIONSHIP CHANGE → LAWYER AUTO-UNLOCK
this.game.events.on('relationshipChanged', (data) => {
if (data.hearts <= 3) {
this.lawyerSystem.checkAutoUnlock();
}
});
// BUILDING UNLOCKED → TOWN GROWTH
this.game.events.on('buildingUnlocked', (data) => {
this.townGrowthSystem.checkPopulationUnlocks();
});
// ZOMBIE HIRED → TOWN GROWTH CHECK
this.game.events.on('zombieWorkerHired', () => {
this.townGrowthSystem.checkPopulationUnlocks();
});
// SLEEP → ZOMBIE LOYALTY DECAY PAUSE
this.game.events.on('sleepStarted', () => {
this.pauseZombieLoyaltyDecay = true;
});
this.game.events.on('wakeUp', () => {
this.pauseZombieLoyaltyDecay = false;
});
console.log(' ✓ Cross-system event listeners configured');
}
/**
* Handle service unlock
*/
onServiceUnlocked(data) {
const { serviceId, population } = data;
console.log(`🏛️ Service unlocked: ${serviceId} at pop ${population}`);
// Trigger service-specific initialization
switch (serviceId) {
case 'market':
this.initializeMarket();
break;
case 'hospital':
this.initializeHospital();
break;
case 'school':
this.initializeSchool();
break;
case 'bank':
this.initializeBank();
break;
case 'museum':
this.initializeMuseum();
break;
case 'theater':
this.initializeTheater();
break;
}
}
/**
* Service initializers (placeholders for future implementation)
*/
initializeMarket() {
console.log(' → Market initialized');
// TODO: Implement market system
}
initializeHospital() {
console.log(' → Hospital initialized');
// TODO: Implement hospital system
}
initializeSchool() {
console.log(' → School initialized');
// TODO: Implement school system
}
initializeBank() {
console.log(' → Bank initialized');
// TODO: Implement bank system
}
initializeMuseum() {
console.log(' → Museum initialized');
// TODO: Implement museum system
}
initializeTheater() {
console.log(' → Theater initialized');
// TODO: Implement theater system
}
/**
* Update all systems (called every frame)
*/
update(time, delta) {
const deltaSeconds = delta / 1000;
// Update systems that need per-frame updates
this.sleepSystem.update(deltaSeconds);
this.craftingSystem.update(deltaSeconds);
// Update zombie miners (if not paused by sleep)
if (!this.pauseZombieLoyaltyDecay) {
this.zombieMinerSystem.update(deltaSeconds);
}
}
/**
* Hourly update (called when game hour changes)
*/
onHourChange(hour) {
// Update time-sensitive systems
this.bakerySystem.update();
this.townGrowthSystem.update();
// Check for automation collection reminders
if (hour % 4 === 0) { // Every 4 hours
this.checkAutomationReminders();
}
}
/**
* Check automation reminders
*/
checkAutomationReminders() {
// Zombie miner automation
if (this.zombieMinerSystem.automationActive) {
const hours = this.zombieMinerSystem.getHoursSinceLastCollection();
if (hours >= 8) {
this.game.showNotification({
title: '⛏️ Automation Ready',
text: `${hours.toFixed(0)}h of mining ready to collect!`,
icon: '⛏️'
});
}
}
}
/**
* Daily update (called at midnight)
*/
onDayChange(day) {
console.log(`📅 Day ${day} - Running daily system updates...`);
// Town growth check
this.townGrowthSystem.update();
// Restock shops
this.bakerySystem.restockInventory();
// Birthday cake deliveries
this.bakerySystem.checkBirthdayCakeDeliveries();
}
/**
* Save all systems state
*/
saveAllSystems() {
return {
version: '1.0',
timestamp: Date.now(),
systems: {
sleep: {
playerBed: this.sleepSystem.playerBed,
unlockedBeds: Object.entries(this.sleepSystem.bedTypes)
.filter(([_, bed]) => bed.unlocked)
.map(([key, _]) => key)
},
crafting: {
currentTable: this.craftingSystem.currentTable.id,
unlockedRecipes: this.craftingSystem.unlockedRecipes,
largeTableUnlocked: this.craftingSystem.tables.LARGE.unlocked
},
bakery: {
isUnlocked: this.bakerySystem.isUnlocked,
inventory: this.bakerySystem.inventory,
birthdayOrders: this.bakerySystem.birthdayCakeOrders
},
barber: {
isUnlocked: this.barberSystem.isUnlocked,
playerAppearance: this.barberSystem.playerAppearance,
savedLooks: this.barberSystem.savedLooks,
visitCount: this.barberSystem.visitCount
},
lawyer: {
isUnlocked: this.lawyerSystem.isUnlocked,
hasPrenup: this.lawyerSystem.hasPrenup,
divorceHistory: this.lawyerSystem.divorceHistory,
counselingInProgress: this.lawyerSystem.counselingInProgress
},
zombieMiners: {
miners: this.zombieMinerSystem.zombieMiners,
equipment: this.zombieMinerSystem.zombieEquipment,
lastCollectionTime: this.zombieMinerSystem.lastCollectionTime
},
townGrowth: {
population: this.townGrowthSystem.population,
populationSlots: this.townGrowthSystem.populationSlots,
villages: this.townGrowthSystem.villages,
services: this.townGrowthSystem.services
},
npcPrivacy: {
npcHomes: this.npcPrivacySystem.npcHomes,
visitHistory: this.npcPrivacySystem.visitHistory,
lastVisitTimes: this.npcPrivacySystem.lastVisitTimes
}
}
};
}
/**
* Load all systems state
*/
loadAllSystems(saveData) {
if (!saveData || !saveData.systems) {
console.warn('No save data to load');
return false;
}
try {
const systems = saveData.systems;
// Load sleep system
if (systems.sleep) {
systems.sleep.unlockedBeds.forEach(bedKey => {
this.sleepSystem.bedTypes[bedKey].unlocked = true;
});
}
// Load crafting system
if (systems.crafting) {
this.craftingSystem.tables.LARGE.unlocked = systems.crafting.largeTableUnlocked;
this.craftingSystem.unlockedRecipes = systems.crafting.unlockedRecipes || [];
}
// Load bakery
if (systems.bakery) {
this.bakerySystem.isUnlocked = systems.bakery.isUnlocked;
this.bakerySystem.birthdayCakeOrders = systems.bakery.birthdayOrders || [];
}
// Load barber
if (systems.barber) {
this.barberSystem.isUnlocked = systems.barber.isUnlocked;
this.barberSystem.playerAppearance = systems.barber.playerAppearance;
this.barberSystem.savedLooks = systems.barber.savedLooks || [];
this.barberSystem.visitCount = systems.barber.visitCount || 0;
}
// Load lawyer
if (systems.lawyer) {
this.lawyerSystem.isUnlocked = systems.lawyer.isUnlocked;
this.lawyerSystem.hasPrenup = systems.lawyer.hasPrenup || false;
this.lawyerSystem.divorceHistory = systems.lawyer.divorceHistory || [];
this.lawyerSystem.counselingInProgress = systems.lawyer.counselingInProgress || false;
}
// Load zombie miners
if (systems.zombieMiners) {
this.zombieMinerSystem.zombieMiners = systems.zombieMiners.miners || [];
this.zombieMinerSystem.zombieEquipment = systems.zombieMiners.equipment || {};
this.zombieMinerSystem.lastCollectionTime = systems.zombieMiners.lastCollectionTime;
this.zombieMinerSystem.updateAutomationYield();
}
// Load town growth
if (systems.townGrowth) {
this.townGrowthSystem.population = systems.townGrowth.population;
this.townGrowthSystem.populationSlots = systems.townGrowth.populationSlots;
this.townGrowthSystem.villages = systems.townGrowth.villages || [];
this.townGrowthSystem.services = systems.townGrowth.services || {};
}
// Load NPC privacy
if (systems.npcPrivacy) {
this.npcPrivacySystem.npcHomes = systems.npcPrivacy.npcHomes || {};
this.npcPrivacySystem.visitHistory = systems.npcPrivacy.visitHistory || {};
this.npcPrivacySystem.lastVisitTimes = systems.npcPrivacy.lastVisitTimes || {};
}
console.log('✅ All systems loaded from save data');
return true;
} catch (error) {
console.error('❌ Error loading systems:', error);
return false;
}
}
/**
* Get all systems status (for debug/admin panel)
*/
getAllSystemsStatus() {
return {
sleep: {
active: true,
currentBed: this.sleepSystem.playerBed.name,
isSleeping: this.sleepSystem.isSleeping
},
crafting: {
active: true,
currentTable: this.craftingSystem.currentTable.name,
isCrafting: this.craftingSystem.isCrafting,
queueLength: this.craftingSystem.craftingQueue.length
},
bakery: {
active: this.bakerySystem.isUnlocked,
isOpen: this.bakerySystem.isOpen,
stockLevel: Object.values(this.bakerySystem.inventory)
.reduce((sum, item) => sum + item.stock, 0)
},
barber: {
active: this.barberSystem.isUnlocked,
isOpen: this.barberSystem.isOpen,
currentStyle: this.barberSystem.playerAppearance.hairstyle
},
lawyer: {
active: this.lawyerSystem.isUnlocked,
counselingActive: this.lawyerSystem.counselingInProgress,
hasPrenup: this.lawyerSystem.hasPrenup
},
zombieMiners: {
active: this.zombieMinerSystem.automationActive,
minerCount: this.zombieMinerSystem.zombieMiners.length,
yieldPerHour: this.zombieMinerSystem.totalYieldPerHour
},
townGrowth: {
active: true,
population: this.townGrowthSystem.population,
maxPopulation: this.townGrowthSystem.maxPopulation,
status: this.townGrowthSystem.getTownStatus()
},
npcPrivacy: {
active: true,
homesGenerated: Object.keys(this.npcPrivacySystem.npcHomes).length
}
};
}
}