dodatki
This commit is contained in:
194
src/systems/SteamIntegrationSystem.js
Normal file
194
src/systems/SteamIntegrationSystem.js
Normal 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;
|
||||
Reference in New Issue
Block a user