Files

130 lines
3.5 KiB
JavaScript
Raw Permalink 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.
const { app, BrowserWindow, ipcMain } = require('electron')
const path = require('path')
let steamworks = null
let steamInitialized = false
// Try to initialize Steam
function initializeSteam() {
try {
// Only try to load steamworks if steam_appid.txt exists
const fs = require('fs')
const steamAppIdPath = path.join(__dirname, '../public/steam_appid.txt')
if (fs.existsSync(steamAppIdPath)) {
steamworks = require('steamworks.js')
const client = steamworks.init(480) // Test App ID - replace with your Steam App ID
steamInitialized = true
console.log('✅ Steam initialized successfully')
console.log('Steam User:', client.localplayer.getName())
console.log('Steam ID:', client.localplayer.getSteamId().steamId64)
return client
} else {
console.log(' steam_appid.txt not found, running without Steam')
return null
}
} catch (error) {
console.log(' Steam not available:', error.message)
steamInitialized = false
return null
}
}
const steamClient = initializeSteam()
function createWindow() {
const win = new BrowserWindow({
width: 1200,
height: 800,
minWidth: 800,
minHeight: 600,
webPreferences: {
nodeIntegration: false,
contextIsolation: true,
preload: path.join(__dirname, 'preload.cjs')
},
icon: path.join(__dirname, 'icons/icon.png'),
title: 'Echoes of the Ash'
})
// In production, load the built files
if (app.isPackaged) {
win.loadFile(path.join(__dirname, '../dist/index.html'))
} else {
// In development, load from dev server
win.loadURL('http://localhost:5173')
win.webContents.openDevTools()
}
// Handle window close
win.on('closed', () => {
if (steamClient) {
steamworks.runCallbacks()
}
})
}
// IPC Handlers
ipcMain.handle('get-steam-auth', async () => {
if (steamInitialized && steamClient) {
try {
const player = steamClient.localplayer
return {
available: true,
steamId: player.getSteamId().steamId64,
steamName: player.getName()
}
} catch (error) {
console.error('Error getting Steam auth:', error)
return { available: false }
}
}
return { available: false }
})
ipcMain.handle('is-steam-available', async () => {
return steamInitialized
})
ipcMain.handle('get-platform', async () => {
return process.platform
})
// App lifecycle
app.whenReady().then(() => {
createWindow()
// Run Steam callbacks periodically if Steam is initialized
if (steamInitialized && steamClient) {
setInterval(() => {
try {
steamworks.runCallbacks()
} catch (error) {
console.error('Error running Steam callbacks:', error)
}
}, 1000)
}
})
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})
// Cleanup on quit
app.on('before-quit', () => {
if (steamClient) {
try {
steamworks.runCallbacks()
} catch (error) {
console.error('Error during Steam cleanup:', error)
}
}
})