Files
novafarma/tools/ui_panels_code.js
2025-12-11 19:36:08 +01:00

161 lines
5.2 KiB
JavaScript

// ZOMBIE & FARM STATS PANELS - Add to UIScene.js
// Call this in create() method:
createZombieStatsPanel() {
const panelWidth = 220;
const panelHeight = 140;
const x = 20;
const y = 120; // Below player stats
// Container
this.zombieStatsContainer = this.add.container(x, y);
this.zombieStatsContainer.setDepth(1000);
// Background
const bg = this.add.graphics();
bg.fillStyle(0x1a1a2e, 0.9);
bg.fillRect(0, 0, panelWidth, panelHeight);
bg.lineStyle(2, 0x8a2be2, 0.8); // Purple border (zombie theme)
bg.strokeRect(0, 0, panelWidth, panelHeight);
this.zombieStatsContainer.add(bg);
// Title
const title = this.add.text(panelWidth / 2, 15, '🧟 ZOMBIE WORKER', {
fontSize: '14px',
fontFamily: 'Courier New',
fill: '#8a2be2',
fontStyle: 'bold'
}).setOrigin(0.5);
this.zombieStatsContainer.add(title);
// Stats Text
this.zombieNameText = this.add.text(10, 35, 'Name: Worker #1', {
fontSize: '12px',
fill: '#ffffff'
});
this.zombieStatsContainer.add(this.zombieNameText);
this.zombieTaskText = this.add.text(10, 55, 'Task: IDLE', {
fontSize: '12px',
fill: '#ffff00'
});
this.zombieStatsContainer.add(this.zombieTaskText);
this.zombieLevelText = this.add.text(10, 75, 'Level: 1 (0/100 XP)', {
fontSize: '12px',
fill: '#00ff00'
});
this.zombieStatsContainer.add(this.zombieLevelText);
// Energy Bar
this.add.text(10, 95, 'ENERGY:', { fontSize: '11px', fill: '#aaaaaa' });
this.zombieEnergyBar = this.drawMiniBar(10, 110, panelWidth - 20, 15, 0x00aaff, 100);
this.zombieStatsContainer.add(this.zombieEnergyBar.bg);
this.zombieStatsContainer.add(this.zombieEnergyBar.fill);
// Initially hidden - shows when zombie is selected/nearby
this.zombieStatsContainer.setVisible(false);
}
createFarmStatsPanel() {
const panelWidth = 220;
const panelHeight = 120;
const x = 20;
const y = 280; // Below zombie stats
// Container
this.farmStatsContainer = this.add.container(x, y);
this.farmStatsContainer.setDepth(1000);
// Background
const bg = this.add.graphics();
bg.fillStyle(0x1a2e1a, 0.9);
bg.fillRect(0, 0, panelWidth, panelHeight);
bg.lineStyle(2, 0x00ff00, 0.8); // Green border (farm theme)
bg.strokeRect(0, 0, panelWidth, panelHeight);
this.farmStatsContainer.add(bg);
// Title
const title = this.add.text(panelWidth / 2, 15, '🌾 FARM STATS', {
fontSize: '14px',
fontFamily: 'Courier New',
fill: '#00ff00',
fontStyle: 'bold'
}).setOrigin(0.5);
this.farmStatsContainer.add(title);
// Stats
this.farmCropsPlantedText = this.add.text(10, 40, 'Crops Planted: 0', {
fontSize: '12px',
fill: '#ffffff'
});
this.farmStatsContainer.add(this.farmCropsPlantedText);
this.farmCropsHarvestedText = this.add.text(10, 60, 'Total Harvested: 0', {
fontSize: '12px',
fill: '#ffff00'
});
this.farmStatsContainer.add(this.farmCropsHarvestedText);
this.farmGoldEarnedText = this.add.text(10, 80, 'Gold Earned: 0g', {
fontSize: '12px',
fill: '#ffd700'
});
this.farmStatsContainer.add(this.farmGoldEarnedText);
this.farmDaysText = this.add.text(10, 100, 'Days Farmed: 0', {
fontSize: '12px',
fill: '#aaaaaa'
});
this.farmStatsContainer.add(this.farmDaysText);
}
drawMiniBar(x, y, width, height, color, initialPercent = 100) {
// Background
const bg = this.add.graphics();
bg.fillStyle(0x000000, 0.5);
bg.fillRect(x, y, width, height);
bg.lineStyle(1, 0xffffff, 0.3);
bg.strokeRect(x, y, width, height);
// Fill
const fill = this.add.graphics();
fill.fillStyle(color, 1);
const maxWidth = width - 4;
const currentWidth = (maxWidth * initialPercent) / 100;
fill.fillRect(x + 2, y + 2, currentWidth, height - 4);
return { bg, fill, x, y, width, height, color };
}
setMiniBarValue(bar, percent) {
percent = Phaser.Math.Clamp(percent, 0, 100);
bar.fill.clear();
bar.fill.fillStyle(bar.color, 1);
const maxWidth = bar.width - 4;
const currentWidth = (maxWidth * percent) / 100;
bar.fill.fillRect(bar.x + 2, bar.y + 2, currentWidth, bar.height - 4);
}
// Update methods (call from update())
updateZombieStats(zombie) {
if (!zombie || !this.zombieStatsContainer) return;
this.zombieStatsContainer.setVisible(true);
this.zombieNameText.setText(`Name: ${zombie.name || 'Worker #1'}`);
this.zombieTaskText.setText(`Task: ${zombie.task || 'IDLE'}`);
this.zombieLevelText.setText(`Level: ${zombie.level || 1} (${zombie.xp || 0}/100 XP)`);
const energy = zombie.energy !== undefined ? zombie.energy : 100;
this.setMiniBarValue(this.zombieEnergyBar, energy);
}
updateFarmStats(stats) {
if (!stats || !this.farmStatsContainer) return;
this.farmCropsPlantedText.setText(`Crops Planted: ${stats.cropsPlanted || 0}`);
this.farmCropsHarvestedText.setText(`Total Harvested: ${stats.totalHarvested || 0}`);
this.farmGoldEarnedText.setText(`Gold Earned: ${stats.goldEarned || 0}g`);
this.farmDaysText.setText(`Days Farmed: ${stats.daysFarmed || 0}`);
}