195 lines
6.4 KiB
JavaScript
195 lines
6.4 KiB
JavaScript
/**
|
||
* 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;
|