130 lines
3.5 KiB
JavaScript
130 lines
3.5 KiB
JavaScript
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)
|
||
}
|
||
}
|
||
})
|