Files
novafarma/src/systems/AutomationTierSystem.js
2025-12-13 00:02:38 +01:00

455 lines
14 KiB
JavaScript

/**
* FARM AUTOMATION TIERS SYSTEM
* Progressive automation from manual labor to AI-driven farm
*/
class AutomationTierSystem {
constructor(scene) {
this.scene = scene;
this.enabled = true;
// Current tier
this.currentTier = 1;
// Tier definitions
this.tiers = {
1: {
name: 'Manual Labor',
description: 'Player does everything',
efficiency: 1.0,
automation: 0,
unlockRequirement: null,
features: ['manual_farming', 'manual_crafting', 'manual_building']
},
2: {
name: 'Zombie Workers',
description: 'Basic automation with zombie workers',
efficiency: 0.5,
automation: 0.3,
unlockRequirement: { type: 'tame_zombies', count: 5 },
features: ['zombie_workers', 'simple_tasks', 'task_queue']
},
3: {
name: 'Creature Helpers',
description: 'Specialized automation with creatures',
efficiency: 0.75,
automation: 0.6,
unlockRequirement: { type: 'befriend_creatures', count: 10 },
features: ['creature_workers', 'complex_tasks', 'crafting_automation', 'sorting']
},
4: {
name: 'Mechanical Automation',
description: 'Full automation with machines',
efficiency: 1.0,
automation: 0.9,
unlockRequirement: { type: 'build_all_automation', buildings: ['auto_planter', 'auto_harvester', 'irrigation', 'conveyor', 'silo', 'sorter'] },
features: ['24_7_operation', 'no_management', 'full_automation']
},
5: {
name: 'AI Farm',
description: 'Self-sustaining AI-driven farm',
efficiency: 1.5,
automation: 1.0,
unlockRequirement: { type: 'complete_quest', quest: 'singularity' },
features: ['self_optimizing', 'resource_balancing', 'profit_collection', 'ai_decisions']
}
};
// Tier progress
this.tierProgress = {
zombiesTamed: 0,
creaturesBefriended: 0,
automationBuildings: [],
questsCompleted: []
};
// AI Farm settings (Tier 5)
this.aiSettings = {
optimizationInterval: 60000, // 1 minute
resourceBalanceThreshold: 0.8,
profitCollectionInterval: 300000, // 5 minutes
lastOptimization: 0,
lastProfitCollection: 0
};
this.loadProgress();
this.init();
console.log('✅ Automation Tier System initialized');
}
init() {
console.log(`🤖 Current Tier: ${this.currentTier} - ${this.tiers[this.currentTier].name}`);
}
// ========== TIER MANAGEMENT ==========
checkTierUnlock(tier) {
const tierData = this.tiers[tier];
if (!tierData || !tierData.unlockRequirement) return false;
const req = tierData.unlockRequirement;
switch (req.type) {
case 'tame_zombies':
return this.tierProgress.zombiesTamed >= req.count;
case 'befriend_creatures':
return this.tierProgress.creaturesBefriended >= req.count;
case 'build_all_automation':
return req.buildings.every(b =>
this.tierProgress.automationBuildings.includes(b)
);
case 'complete_quest':
return this.tierProgress.questsCompleted.includes(req.quest);
default:
return false;
}
}
upgradeTier() {
const nextTier = this.currentTier + 1;
if (nextTier > 5) {
console.log('❌ Already at max tier!');
return false;
}
if (!this.checkTierUnlock(nextTier)) {
console.log(`❌ Requirements not met for Tier ${nextTier}`);
this.showTierRequirements(nextTier);
return false;
}
// Upgrade!
this.currentTier = nextTier;
this.applyTierBonuses();
// Visual effect
if (this.scene.visualEnhancements) {
const player = this.scene.player;
if (player) {
const pos = player.getPosition();
this.scene.visualEnhancements.createSparkleEffect(pos.x, pos.y);
this.scene.visualEnhancements.screenFlash(0x00ff00, 500);
}
}
// Achievement
if (this.scene.uiGraphics) {
if (this.currentTier === 5) {
this.scene.uiGraphics.unlockAchievement('ai_farm_master');
}
}
this.saveProgress();
console.log(`🎉 Upgraded to Tier ${this.currentTier}: ${this.tiers[this.currentTier].name}!`);
return true;
}
showTierRequirements(tier) {
const tierData = this.tiers[tier];
const req = tierData.unlockRequirement;
console.log(`📋 Requirements for ${tierData.name}:`);
switch (req.type) {
case 'tame_zombies':
console.log(` - Tame ${req.count} zombies (${this.tierProgress.zombiesTamed}/${req.count})`);
break;
case 'befriend_creatures':
console.log(` - Befriend ${req.count} creatures (${this.tierProgress.creaturesBefriended}/${req.count})`);
break;
case 'build_all_automation':
console.log(` - Build all automation buildings:`);
req.buildings.forEach(b => {
const built = this.tierProgress.automationBuildings.includes(b);
console.log(` ${built ? '✅' : '❌'} ${b}`);
});
break;
case 'complete_quest':
console.log(` - Complete quest: "${req.quest}"`);
break;
}
}
applyTierBonuses() {
const tier = this.tiers[this.currentTier];
// Apply efficiency to all workers
if (this.scene.farmAutomation) {
for (const worker of this.scene.farmAutomation.zombieWorkers) {
worker.efficiency = tier.efficiency;
}
for (const worker of this.scene.farmAutomation.creatureWorkers) {
worker.efficiency = tier.efficiency;
}
}
// Enable features
this.enableTierFeatures(tier.features);
}
enableTierFeatures(features) {
for (const feature of features) {
switch (feature) {
case '24_7_operation':
this.enable24_7Operation();
break;
case 'no_management':
this.enableNoManagement();
break;
case 'self_optimizing':
this.enableSelfOptimizing();
break;
case 'resource_balancing':
this.enableResourceBalancing();
break;
case 'ai_decisions':
this.enableAIDecisions();
break;
}
}
}
// ========== TIER 2: ZOMBIE WORKERS ==========
tameZombie() {
this.tierProgress.zombiesTamed++;
this.checkAutoUpgrade();
this.saveProgress();
console.log(`🧟 Zombie tamed! (${this.tierProgress.zombiesTamed}/5)`);
}
// ========== TIER 3: CREATURE HELPERS ==========
befriendCreature() {
this.tierProgress.creaturesBefriended++;
this.checkAutoUpgrade();
this.saveProgress();
console.log(`🦌 Creature befriended! (${this.tierProgress.creaturesBefriended}/10)`);
}
// ========== TIER 4: MECHANICAL AUTOMATION ==========
buildAutomationBuilding(buildingType) {
if (!this.tierProgress.automationBuildings.includes(buildingType)) {
this.tierProgress.automationBuildings.push(buildingType);
this.checkAutoUpgrade();
this.saveProgress();
console.log(`🏭 Built ${buildingType}! (${this.tierProgress.automationBuildings.length}/6)`);
}
}
enable24_7Operation() {
// Buildings work 24/7 without stopping
if (this.scene.farmAutomation) {
for (const building of this.scene.farmAutomation.automationBuildings.values()) {
building.alwaysActive = true;
}
}
console.log('⚡ 24/7 operation enabled!');
}
enableNoManagement() {
// Workers don't need food/rest
if (this.scene.farmAutomation) {
for (const worker of [...this.scene.farmAutomation.zombieWorkers, ...this.scene.farmAutomation.creatureWorkers]) {
worker.needsManagement = false;
worker.hunger = 100;
worker.fatigue = 0;
}
}
console.log('🤖 No management needed!');
}
// ========== TIER 5: AI FARM ==========
completeQuest(questId) {
if (!this.tierProgress.questsCompleted.includes(questId)) {
this.tierProgress.questsCompleted.push(questId);
this.checkAutoUpgrade();
this.saveProgress();
console.log(`✅ Quest completed: ${questId}`);
}
}
enableSelfOptimizing() {
console.log('🧠 Self-optimizing AI enabled!');
}
enableResourceBalancing() {
console.log('⚖️ Automatic resource balancing enabled!');
}
enableAIDecisions() {
console.log('🤖 AI decision-making enabled!');
}
optimizeFarm() {
if (this.currentTier < 5) return;
// AI analyzes farm and makes decisions
const decisions = [];
// Check resource levels
if (this.scene.inventorySystem) {
const resources = this.scene.inventorySystem.items;
// Low on seeds? Plant more
if (resources.wheat_seeds < 10) {
decisions.push({ action: 'plant_wheat', priority: 'high' });
}
// Too much wood? Craft tools
if (resources.wood > 100) {
decisions.push({ action: 'craft_tools', priority: 'medium' });
}
// Low on food? Harvest crops
if (resources.wheat < 20) {
decisions.push({ action: 'harvest_crops', priority: 'high' });
}
}
// Execute decisions
for (const decision of decisions) {
this.executeAIDecision(decision);
}
this.aiSettings.lastOptimization = Date.now();
}
executeAIDecision(decision) {
console.log(`🤖 AI Decision: ${decision.action} (${decision.priority} priority)`);
// Add task to automation queue
if (this.scene.farmAutomation) {
this.scene.farmAutomation.addToTaskQueue({
type: decision.action,
priority: decision.priority === 'high' ? 3 : decision.priority === 'medium' ? 2 : 1
});
}
}
balanceResources() {
if (this.currentTier < 5) return;
// AI balances resources automatically
// Convert excess resources to needed ones
console.log('⚖️ Balancing resources...');
this.aiSettings.lastProfitCollection = Date.now();
}
collectProfits() {
if (this.currentTier < 5) return;
// Collect all profits from automation
let totalProfit = 0;
if (this.scene.farmAutomation) {
// Calculate profits from all automated systems
totalProfit += this.scene.farmAutomation.zombieWorkers.length * 10;
totalProfit += this.scene.farmAutomation.creatureWorkers.length * 20;
totalProfit += this.scene.farmAutomation.automationBuildings.size * 50;
}
if (this.scene.inventorySystem) {
this.scene.inventorySystem.gold += totalProfit;
}
console.log(`💰 Collected ${totalProfit} gold from automation!`);
}
// ========== AUTO-UPGRADE ==========
checkAutoUpgrade() {
const nextTier = this.currentTier + 1;
if (nextTier <= 5 && this.checkTierUnlock(nextTier)) {
this.upgradeTier();
}
}
// ========== UPDATE ==========
update(delta) {
if (this.currentTier < 5) return;
const now = Date.now();
// Self-optimization
if (now - this.aiSettings.lastOptimization > this.aiSettings.optimizationInterval) {
this.optimizeFarm();
}
// Profit collection
if (now - this.aiSettings.lastProfitCollection > this.aiSettings.profitCollectionInterval) {
this.collectProfits();
this.balanceResources();
}
}
// ========== GETTERS ==========
getTierInfo() {
return {
current: this.currentTier,
name: this.tiers[this.currentTier].name,
description: this.tiers[this.currentTier].description,
efficiency: this.tiers[this.currentTier].efficiency,
automation: this.tiers[this.currentTier].automation,
features: this.tiers[this.currentTier].features
};
}
getProgress() {
return {
zombiesTamed: this.tierProgress.zombiesTamed,
creaturesBefriended: this.tierProgress.creaturesBefriended,
automationBuildings: this.tierProgress.automationBuildings.length,
questsCompleted: this.tierProgress.questsCompleted.length
};
}
// ========== PERSISTENCE ==========
saveProgress() {
const data = {
currentTier: this.currentTier,
tierProgress: this.tierProgress
};
localStorage.setItem('novafarma_automation_tiers', JSON.stringify(data));
}
loadProgress() {
const saved = localStorage.getItem('novafarma_automation_tiers');
if (saved) {
try {
const data = JSON.parse(saved);
this.currentTier = data.currentTier || 1;
this.tierProgress = data.tierProgress || this.tierProgress;
console.log('✅ Automation tier progress loaded');
} catch (error) {
console.error('Failed to load tier progress:', error);
}
}
}
destroy() {
this.saveProgress();
console.log('🤖 Automation Tier System destroyed');
}
}