Files
novafarma/src/systems/SteamIntegrationSystem.js
2025-12-08 17:49:30 +01:00

195 lines
6.4 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 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;