64 lines
1.8 KiB
JavaScript
64 lines
1.8 KiB
JavaScript
const app = require('express')();
|
|
const server = require('http').createServer(app);
|
|
const io = require('socket.io')(server, {
|
|
cors: {
|
|
origin: "*", // Allow all origins for dev
|
|
methods: ["GET", "POST"]
|
|
}
|
|
});
|
|
|
|
const players = {};
|
|
|
|
io.on('connection', (socket) => {
|
|
console.log('Player connected:', socket.id);
|
|
|
|
// Initialize player data
|
|
players[socket.id] = {
|
|
id: socket.id,
|
|
x: 0,
|
|
y: 0,
|
|
anim: 'idle'
|
|
};
|
|
|
|
// Send the current list of players to the new player
|
|
socket.emit('currentPlayers', players);
|
|
|
|
// Notify other players about the new player
|
|
socket.broadcast.emit('newPlayer', players[socket.id]);
|
|
|
|
// Handle Disconnect
|
|
socket.on('disconnect', () => {
|
|
console.log('Player disconnected:', socket.id);
|
|
delete players[socket.id];
|
|
io.emit('playerDisconnected', socket.id);
|
|
});
|
|
|
|
// Handle Movement
|
|
socket.on('playerMovement', (data) => {
|
|
if (players[socket.id]) {
|
|
players[socket.id].x = data.x;
|
|
players[socket.id].y = data.y;
|
|
players[socket.id].anim = data.anim;
|
|
players[socket.id].flipX = data.flipX;
|
|
|
|
// Broadcast to others (excluding self)
|
|
socket.broadcast.emit('playerMoved', players[socket.id]);
|
|
}
|
|
});
|
|
|
|
// Handle World State (Simple Block Placement sync)
|
|
// Warning: No validation/persistence in this MVP
|
|
socket.on('worldAction', (action) => {
|
|
// action: { type: 'build', x: 10, y: 10, building: 'fence' }
|
|
socket.broadcast.emit('worldAction', action);
|
|
});
|
|
});
|
|
|
|
const PORT = 3000;
|
|
server.listen(PORT, () => {
|
|
console.log(`SERVER RUNNING on port ${PORT}`);
|
|
console.log(`To play multiplayer:`);
|
|
console.log(`1. Run 'node server.js' in a terminal`);
|
|
console.log(`2. Start the game clients`);
|
|
});
|