This commit is contained in:
2025-12-08 17:49:30 +01:00
parent 2c446abbbb
commit 3096490a0c
8 changed files with 905 additions and 179 deletions

View File

@@ -0,0 +1,194 @@
/**
* STEAM INTEGRATION SYSTEM
* Handles Steam achievements and cloud saves
*
* NOTE: Requires Steamworks SDK and Greenworks library
* This is a placeholder/mock implementation for development
*/
class SteamIntegrationSystem {
constructor() {
this.steamAvailable = false;
this.achievements = {};
this.cloudSaveEnabled = false;
// Mock achievement definitions
this.achievementDefs = {
'FIRST_HARVEST': { name: 'First Harvest', desc: 'Harvest your first crop' },
'GOLD_RUSH': { name: 'Gold Rush', desc: 'Earn 1000 gold coins' },
'ZOMBIE_SLAYER': { name: 'Zombie Slayer', desc: 'Kill 100 zombies' },
'MASTER_FARMER': { name: 'Master Farmer', desc: 'Harvest 1000 crops' },
'DAY_30': { name: 'Survivor', desc: 'Survive 30 days' },
'GREENHOUSE': { name: 'Greenhouse Builder', desc: 'Build a greenhouse' },
'TAMED_ZOMBIE': { name: 'Zombie Tamer', desc: 'Tame your first zombie' },
'OCEAN_EXPLORER': { name: 'Ocean Explorer', desc: 'Discover 5 islands' }
};
this.init();
}
init() {
// Check if Steamworks is available
if (typeof greenworks !== 'undefined') {
try {
greenworks.init();
this.steamAvailable = true;
this.cloudSaveEnabled = greenworks.isCloudEnabled();
console.log('✅ Steam Integration: Active');
console.log(`☁️ Cloud Saves: ${this.cloudSaveEnabled ? 'Enabled' : 'Disabled'}`);
} catch (e) {
console.warn('⚠️ Steam Integration: Failed to initialize', e);
this.steamAvailable = false;
}
} else {
console.log(' Steam Integration: Not available (running outside Steam)');
}
}
/**
* Unlock achievement
*/
unlockAchievement(achievementId) {
if (!this.achievementDefs[achievementId]) {
console.error('Unknown achievement:', achievementId);
return false;
}
const achievement = this.achievementDefs[achievementId];
if (this.steamAvailable && typeof greenworks !== 'undefined') {
try {
greenworks.activateAchievement(achievementId, () => {
console.log(`🏆 Achievement Unlocked: ${achievement.name}`);
}, (err) => {
console.error('Failed to unlock achievement:', err);
});
} catch (e) {
console.error('Steam achievement error:', e);
}
} else {
// Mock/local achievement
if (!this.achievements[achievementId]) {
this.achievements[achievementId] = true;
console.log(`🏆 [MOCK] Achievement Unlocked: ${achievement.name}`);
// Show notification
if (this.scene && this.scene.events) {
this.scene.events.emit('show-floating-text', {
x: 320,
y: 100,
text: `🏆 ${achievement.name}`,
color: '#ffd700'
});
}
// Save to localStorage
this.saveLocalAchievements();
return true;
}
}
return false;
}
/**
* Save game to Steam Cloud
*/
saveToCloud(saveData) {
if (!this.cloudSaveEnabled) {
console.log('☁️ Cloud saves not available, saving locally');
localStorage.setItem('novafarma_save', JSON.stringify(saveData));
return false;
}
try {
const saveString = JSON.stringify(saveData);
greenworks.saveTextToFile('novafarma_save.json', saveString, () => {
console.log('☁️ Game saved to Steam Cloud');
}, (err) => {
console.error('Failed to save to cloud:', err);
// Fallback to local
localStorage.setItem('novafarma_save', saveString);
});
return true;
} catch (e) {
console.error('Cloud save error:', e);
return false;
}
}
/**
* Load game from Steam Cloud
*/
loadFromCloud(callback) {
if (!this.cloudSaveEnabled) {
console.log('☁️ Cloud saves not available, loading locally');
const localSave = localStorage.getItem('novafarma_save');
if (localSave && callback) {
callback(JSON.parse(localSave));
}
return;
}
try {
greenworks.readTextFromFile('novafarma_save.json', (data) => {
console.log('☁️ Loaded from Steam Cloud');
if (callback) callback(JSON.parse(data));
}, (err) => {
console.error('Failed to load from cloud:', err);
// Fallback to local
const localSave = localStorage.getItem('novafarma_save');
if (localSave && callback) {
callback(JSON.parse(localSave));
}
});
} catch (e) {
console.error('Cloud load error:', e);
}
}
/**
* Get achievement status
*/
getAchievementStatus(achievementId) {
return this.achievements[achievementId] || false;
}
/**
* Get all unlocked achievements
*/
getUnlockedAchievements() {
return Object.keys(this.achievements).filter(id => this.achievements[id]);
}
/**
* Save achievements to localStorage (fallback)
*/
saveLocalAchievements() {
localStorage.setItem('novafarma_achievements', JSON.stringify(this.achievements));
}
/**
* Load achievements from localStorage
*/
loadLocalAchievements() {
const saved = localStorage.getItem('novafarma_achievements');
if (saved) {
this.achievements = JSON.parse(saved);
}
}
/**
* Set overlay position (for Steam overlay)
*/
activateOverlay(dialog = 'Friends') {
if (this.steamAvailable && typeof greenworks !== 'undefined') {
try {
greenworks.activateGameOverlay(dialog);
} catch (e) {
console.error('Failed to activate Steam overlay:', e);
}
}
}
}
// Global instance
window.SteamIntegration = SteamIntegrationSystem;