narejeno
This commit is contained in:
444
src/systems/WorkerCreaturesSystem.js
Normal file
444
src/systems/WorkerCreaturesSystem.js
Normal file
@@ -0,0 +1,444 @@
|
||||
/**
|
||||
* WORKER CREATURES SYSTEM
|
||||
* Specialized creature workers with unique abilities
|
||||
*/
|
||||
class WorkerCreaturesSystem {
|
||||
constructor(scene) {
|
||||
this.scene = scene;
|
||||
this.enabled = true;
|
||||
|
||||
// Worker creatures
|
||||
this.workers = new Map();
|
||||
|
||||
// Creature types
|
||||
this.creatureTypes = new Map();
|
||||
|
||||
// Active tasks
|
||||
this.activeTasks = [];
|
||||
|
||||
this.init();
|
||||
console.log('✅ Worker Creatures System initialized');
|
||||
}
|
||||
|
||||
init() {
|
||||
this.defineCreatureTypes();
|
||||
console.log('🦌 Worker creatures ready');
|
||||
}
|
||||
|
||||
// ========== CREATURE TYPES ==========
|
||||
|
||||
defineCreatureTypes() {
|
||||
// Donkey - Transport specialist
|
||||
this.defineCreature('donkey', {
|
||||
name: 'Donkey',
|
||||
specialty: 'transport',
|
||||
efficiency: 0.8,
|
||||
abilities: ['carry_items', 'cart_transport', 'long_distance'],
|
||||
carryCapacity: 50,
|
||||
speed: 1.2,
|
||||
tamingDifficulty: 'easy',
|
||||
cost: { carrot: 10, apple: 5 }
|
||||
});
|
||||
|
||||
// Bigfoot - Forest gathering specialist
|
||||
this.defineCreature('bigfoot', {
|
||||
name: 'Bigfoot',
|
||||
specialty: 'gathering',
|
||||
efficiency: 1.0,
|
||||
abilities: ['tree_chopping', 'berry_picking', 'mushroom_finding', 'forest_navigation'],
|
||||
gatherBonus: 1.5,
|
||||
speed: 0.9,
|
||||
tamingDifficulty: 'medium',
|
||||
cost: { honey: 5, berries: 20 }
|
||||
});
|
||||
|
||||
// Yeti - Snow biome specialist
|
||||
this.defineCreature('yeti', {
|
||||
name: 'Yeti',
|
||||
specialty: 'snow_tasks',
|
||||
efficiency: 1.2,
|
||||
abilities: ['ice_mining', 'snow_clearing', 'cold_resistance', 'ice_fishing'],
|
||||
coldBonus: 2.0,
|
||||
speed: 0.8,
|
||||
tamingDifficulty: 'hard',
|
||||
cost: { frozen_meat: 10, ice_crystal: 3 }
|
||||
});
|
||||
|
||||
// Elf - Crafting specialist
|
||||
this.defineCreature('elf', {
|
||||
name: 'Elf',
|
||||
specialty: 'crafting',
|
||||
efficiency: 1.5,
|
||||
abilities: ['auto_craft', 'enchanting', 'potion_making', 'tool_repair'],
|
||||
craftingSpeed: 2.0,
|
||||
speed: 1.0,
|
||||
tamingDifficulty: 'hard',
|
||||
cost: { magic_dust: 5, golden_apple: 2 }
|
||||
});
|
||||
|
||||
// Gnome - Mining specialist
|
||||
this.defineCreature('gnome', {
|
||||
name: 'Gnome',
|
||||
specialty: 'mining',
|
||||
efficiency: 1.3,
|
||||
abilities: ['ore_detection', 'tunnel_digging', 'gem_finding', 'cave_navigation'],
|
||||
miningBonus: 1.8,
|
||||
speed: 0.7,
|
||||
tamingDifficulty: 'medium',
|
||||
cost: { gold_nugget: 5, diamond: 1 }
|
||||
});
|
||||
|
||||
// Fairy - Plant care specialist
|
||||
this.defineCreature('fairy', {
|
||||
name: 'Fairy',
|
||||
specialty: 'plant_care',
|
||||
efficiency: 1.4,
|
||||
abilities: ['instant_growth', 'disease_cure', 'crop_blessing', 'flower_magic'],
|
||||
growthBonus: 2.5,
|
||||
speed: 1.5,
|
||||
tamingDifficulty: 'very_hard',
|
||||
cost: { rainbow_flower: 3, fairy_dust: 10 }
|
||||
});
|
||||
|
||||
// Golem - Heavy labor specialist
|
||||
this.defineCreature('golem', {
|
||||
name: 'Golem',
|
||||
specialty: 'heavy_labor',
|
||||
efficiency: 0.9,
|
||||
abilities: ['boulder_moving', 'building_construction', 'land_clearing', 'defense'],
|
||||
strengthBonus: 3.0,
|
||||
speed: 0.5,
|
||||
tamingDifficulty: 'very_hard',
|
||||
cost: { stone: 100, iron: 50, magic_core: 1 }
|
||||
});
|
||||
|
||||
// Dragon - Ultimate worker
|
||||
this.defineCreature('dragon', {
|
||||
name: 'Dragon',
|
||||
specialty: 'all',
|
||||
efficiency: 2.0,
|
||||
abilities: ['flight', 'fire_breath', 'treasure_finding', 'all_tasks'],
|
||||
allBonus: 2.0,
|
||||
speed: 2.0,
|
||||
tamingDifficulty: 'legendary',
|
||||
cost: { dragon_egg: 1, legendary_meat: 10, gold: 1000 }
|
||||
});
|
||||
}
|
||||
|
||||
defineCreature(id, data) {
|
||||
this.creatureTypes.set(id, {
|
||||
id,
|
||||
...data
|
||||
});
|
||||
}
|
||||
|
||||
// ========== TAMING ==========
|
||||
|
||||
canTame(creatureType) {
|
||||
const creature = this.creatureTypes.get(creatureType);
|
||||
if (!creature) return false;
|
||||
|
||||
// Check if player has required items
|
||||
if (!this.scene.inventorySystem) return false;
|
||||
|
||||
for (const [item, amount] of Object.entries(creature.cost)) {
|
||||
const has = this.scene.inventorySystem.getItemCount(item);
|
||||
if (has < amount) {
|
||||
console.log(`❌ Missing ${item}: ${has}/${amount}`);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
tameCreature(creatureType, x, y) {
|
||||
if (!this.canTame(creatureType)) return false;
|
||||
|
||||
const creatureData = this.creatureTypes.get(creatureType);
|
||||
|
||||
// Consume taming items
|
||||
for (const [item, amount] of Object.entries(creatureData.cost)) {
|
||||
this.scene.inventorySystem.removeItem(item, amount);
|
||||
}
|
||||
|
||||
// Create worker
|
||||
const worker = {
|
||||
id: `worker_${creatureType}_${Date.now()}`,
|
||||
type: creatureType,
|
||||
name: creatureData.name,
|
||||
specialty: creatureData.specialty,
|
||||
efficiency: creatureData.efficiency,
|
||||
abilities: creatureData.abilities,
|
||||
x, y,
|
||||
currentTask: null,
|
||||
level: 1,
|
||||
xp: 0,
|
||||
loyalty: 50,
|
||||
sprite: null
|
||||
};
|
||||
|
||||
this.workers.set(worker.id, worker);
|
||||
|
||||
// Notify automation tier system
|
||||
if (this.scene.automationTiers) {
|
||||
this.scene.automationTiers.befriendCreature();
|
||||
}
|
||||
|
||||
// Visual effect
|
||||
if (this.scene.visualEnhancements) {
|
||||
this.scene.visualEnhancements.createSparkleEffect(x, y);
|
||||
this.scene.visualEnhancements.screenFlash(0x00ff00, 500);
|
||||
}
|
||||
|
||||
console.log(`✅ Tamed ${creatureData.name}!`);
|
||||
return worker;
|
||||
}
|
||||
|
||||
// ========== TASK ASSIGNMENT ==========
|
||||
|
||||
assignTask(workerId, task) {
|
||||
const worker = this.workers.get(workerId);
|
||||
if (!worker) return false;
|
||||
|
||||
const creatureData = this.creatureTypes.get(worker.type);
|
||||
|
||||
// Check if creature can do this task
|
||||
if (!this.canDoTask(worker, task)) {
|
||||
console.log(`❌ ${worker.name} cannot do ${task.type}`);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Assign task
|
||||
worker.currentTask = {
|
||||
...task,
|
||||
startTime: Date.now(),
|
||||
efficiency: this.calculateEfficiency(worker, task)
|
||||
};
|
||||
|
||||
console.log(`📋 ${worker.name} assigned to ${task.type}`);
|
||||
return true;
|
||||
}
|
||||
|
||||
canDoTask(worker, task) {
|
||||
const creatureData = this.creatureTypes.get(worker.type);
|
||||
|
||||
// Dragons can do everything
|
||||
if (worker.type === 'dragon') return true;
|
||||
|
||||
// Check specialty
|
||||
const taskSpecialties = {
|
||||
'transport': ['donkey'],
|
||||
'gather_wood': ['bigfoot'],
|
||||
'gather_berries': ['bigfoot'],
|
||||
'mine_ice': ['yeti'],
|
||||
'ice_fishing': ['yeti'],
|
||||
'craft_item': ['elf'],
|
||||
'enchant_item': ['elf'],
|
||||
'mine_ore': ['gnome'],
|
||||
'find_gems': ['gnome'],
|
||||
'water_crops': ['fairy'],
|
||||
'grow_crops': ['fairy'],
|
||||
'build': ['golem'],
|
||||
'clear_land': ['golem']
|
||||
};
|
||||
|
||||
const validTypes = taskSpecialties[task.type] || [];
|
||||
return validTypes.includes(worker.type);
|
||||
}
|
||||
|
||||
calculateEfficiency(worker, task) {
|
||||
const creatureData = this.creatureTypes.get(worker.type);
|
||||
let efficiency = creatureData.efficiency;
|
||||
|
||||
// Apply specialty bonuses
|
||||
if (task.type.includes('gather') && creatureData.gatherBonus) {
|
||||
efficiency *= creatureData.gatherBonus;
|
||||
}
|
||||
if (task.type.includes('mine') && creatureData.miningBonus) {
|
||||
efficiency *= creatureData.miningBonus;
|
||||
}
|
||||
if (task.type.includes('craft') && creatureData.craftingSpeed) {
|
||||
efficiency *= creatureData.craftingSpeed;
|
||||
}
|
||||
if (task.type.includes('grow') && creatureData.growthBonus) {
|
||||
efficiency *= creatureData.growthBonus;
|
||||
}
|
||||
|
||||
// Apply level bonus
|
||||
efficiency *= (1 + worker.level * 0.1);
|
||||
|
||||
return efficiency;
|
||||
}
|
||||
|
||||
// ========== TASK EXECUTION ==========
|
||||
|
||||
updateWorkers(delta) {
|
||||
for (const worker of this.workers.values()) {
|
||||
if (!worker.currentTask) continue;
|
||||
|
||||
const elapsed = Date.now() - worker.currentTask.startTime;
|
||||
const taskTime = worker.currentTask.duration / worker.currentTask.efficiency;
|
||||
|
||||
if (elapsed >= taskTime) {
|
||||
this.completeTask(worker);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
completeTask(worker) {
|
||||
const task = worker.currentTask;
|
||||
|
||||
// Execute task
|
||||
this.executeTask(worker, task);
|
||||
|
||||
// Grant XP
|
||||
this.addWorkerXP(worker, task.xp || 10);
|
||||
|
||||
// Increase loyalty
|
||||
worker.loyalty = Math.min(100, worker.loyalty + 1);
|
||||
|
||||
// Clear task
|
||||
worker.currentTask = null;
|
||||
|
||||
console.log(`✅ ${worker.name} completed ${task.type}!`);
|
||||
}
|
||||
|
||||
executeTask(worker, task) {
|
||||
switch (task.type) {
|
||||
case 'transport':
|
||||
this.transportItems(worker, task);
|
||||
break;
|
||||
case 'gather_wood':
|
||||
this.gatherResource(worker, 'wood', task.amount);
|
||||
break;
|
||||
case 'gather_berries':
|
||||
this.gatherResource(worker, 'berries', task.amount);
|
||||
break;
|
||||
case 'mine_ore':
|
||||
this.gatherResource(worker, 'ore', task.amount);
|
||||
break;
|
||||
case 'craft_item':
|
||||
this.craftItem(worker, task.item);
|
||||
break;
|
||||
case 'grow_crops':
|
||||
this.growCrops(worker, task.crops);
|
||||
break;
|
||||
default:
|
||||
console.log(`Unknown task: ${task.type}`);
|
||||
}
|
||||
}
|
||||
|
||||
transportItems(worker, task) {
|
||||
// Move items from A to B
|
||||
console.log(`🚚 ${worker.name} transported items`);
|
||||
}
|
||||
|
||||
gatherResource(worker, resource, amount) {
|
||||
// Add resource to inventory
|
||||
if (this.scene.inventorySystem) {
|
||||
const bonus = this.workers.get(worker.id).currentTask.efficiency;
|
||||
const finalAmount = Math.floor(amount * bonus);
|
||||
this.scene.inventorySystem.addItem(resource, finalAmount);
|
||||
console.log(`📦 Gathered ${finalAmount} ${resource}`);
|
||||
}
|
||||
}
|
||||
|
||||
craftItem(worker, item) {
|
||||
// Craft item
|
||||
if (this.scene.inventorySystem) {
|
||||
this.scene.inventorySystem.addItem(item, 1);
|
||||
console.log(`🔨 Crafted ${item}`);
|
||||
}
|
||||
}
|
||||
|
||||
growCrops(worker, crops) {
|
||||
// Instantly grow crops
|
||||
console.log(`🌱 Grew ${crops.length} crops`);
|
||||
}
|
||||
|
||||
// ========== LEVELING ==========
|
||||
|
||||
addWorkerXP(worker, amount) {
|
||||
worker.xp += amount;
|
||||
|
||||
const xpNeeded = this.getXPForLevel(worker.level + 1);
|
||||
if (worker.xp >= xpNeeded) {
|
||||
this.levelUpWorker(worker);
|
||||
}
|
||||
}
|
||||
|
||||
getXPForLevel(level) {
|
||||
return Math.floor(100 * Math.pow(1.5, level - 1));
|
||||
}
|
||||
|
||||
levelUpWorker(worker) {
|
||||
worker.level++;
|
||||
worker.xp = 0;
|
||||
|
||||
console.log(`🎉 ${worker.name} leveled up to ${worker.level}!`);
|
||||
|
||||
// Visual effect
|
||||
if (this.scene.visualEnhancements) {
|
||||
this.scene.visualEnhancements.createSparkleEffect(worker.x, worker.y);
|
||||
}
|
||||
}
|
||||
|
||||
// ========== SPECIAL ABILITIES ==========
|
||||
|
||||
useAbility(workerId, abilityName) {
|
||||
const worker = this.workers.get(workerId);
|
||||
if (!worker) return false;
|
||||
|
||||
const creatureData = this.creatureTypes.get(worker.type);
|
||||
if (!creatureData.abilities.includes(abilityName)) {
|
||||
console.log(`❌ ${worker.name} doesn't have ${abilityName}`);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Execute ability
|
||||
switch (abilityName) {
|
||||
case 'instant_growth':
|
||||
this.instantGrowth(worker);
|
||||
break;
|
||||
case 'fire_breath':
|
||||
this.fireBreath(worker);
|
||||
break;
|
||||
case 'treasure_finding':
|
||||
this.findTreasure(worker);
|
||||
break;
|
||||
default:
|
||||
console.log(`✨ ${worker.name} used ${abilityName}!`);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
instantGrowth(worker) {
|
||||
// Fairy ability - instantly grow all nearby crops
|
||||
console.log('🌸 Fairy magic! All crops instantly grown!');
|
||||
}
|
||||
|
||||
fireBreath(worker) {
|
||||
// Dragon ability - clear area with fire
|
||||
console.log('🔥 Dragon fire breath!');
|
||||
}
|
||||
|
||||
findTreasure(worker) {
|
||||
// Dragon ability - find hidden treasure
|
||||
console.log('💎 Found treasure!');
|
||||
if (this.scene.inventorySystem) {
|
||||
this.scene.inventorySystem.addItem('gold', 100);
|
||||
}
|
||||
}
|
||||
|
||||
// ========== UPDATE ==========
|
||||
|
||||
update(delta) {
|
||||
this.updateWorkers(delta);
|
||||
}
|
||||
|
||||
destroy() {
|
||||
console.log('🦌 Worker Creatures System destroyed');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user