mirror of
https://github.com/wassname/GarageServer.IO.git
synced 2026-06-27 16:10:34 +08:00
f304375ff2ae15cfbfa72181127bceaa5efde0eb
GarageServer.IO
A simple, lightweight, HTML multiplayer game server (and client) for Node.js
Features
- Authoritative Game Server
- Client Side / Input Prediciton
- Client Side Smooting
- Entity Interpolation
- Server State History
- Server and Client Messaging
Quick Start
Server
Client
// Initialize GarageServer.IO
GarageServerIO.initializeGarageServer('http://insertmygameurlhere.com', {
onReady: function () {
// Call your game loop
},
onUpdatePlayerPrediction: function (state, inputs, deltaTime) {
// If using client, process over inputs using current state and return new state
},
onInterpolation: function (previousState, targetState, amount) {
// If interpolating, return new state
},
onWorldState: function (state) {
// Extract world state sent from server
}
};
// Inside render loop, extract states
GarageServerIO.getStates(function (playerStates, entityStates) {
playerStates.forEach(function (player) {
ctxCanvas.fillRect(player.state.x, player.state.y, 5, 5);
});
entityStates.forEach(function (entity) {
ctxCanvas.fillRect(entity.state.x, entity.state.y, 5, 5);
});
});
// Inside physics loop, capture and send input
GarageServerIO.addInput(myInput);
API
Client
GarageServerIO.initializeGarageServer(path, options)
options = {
onPlayerConnect(callback),
onPlayerDisconnect(callback),
onPlayerReconnect(callback),
onPlayerUpdate(callback(state)),
onEntityUpdate(callback(state)),
onPlayerRemove(callback(id)),
onEntityRemove(callback(id)),
onEvent(callback(data)),
onWorldState(callback(state)),
onPing(callback(pingDelay)),
onUpdatePlayerPrediction(callback(state, inputs, deltaTime) : newState),
onInterpolation(callback(previousState, targetState, amount) : newState),
onReady(callback),
logging: true
}
GarageServerIO.addInput(input)
GarageServerIO.getStates(callback([player1State, player2State, ...], [entity1State, entity2State, ...]))
GarageServerIO.getId() : playerid
GarageServerIO.sendServerEvent(data)
Server
require('.garageserver.io').createGarageServer(io, options) : GarageServerIO
options = {
stateInterval: 45,
logging: true,
clientSidePrediction: true,
interpolation: true,
interpolationDelay: 100,
smoothingFactor: 0.3,
pingInterval: 2000,
maxUpdateBuffer: 120,
maxHistorySecondBuffer: 1000,
worldState: {},
onPlayerConnect(callback(socket)),
onPlayerInput(callback(socket, input)),
onPlayerDisconnect(callback(socket)),
onPing(callback(socket, data)),
onEvent(callback(data))
}
GarageServerIO.start()
GarageServerIO.stop()
GarageServerIO.getPlayers() : [{ id, state, [input1, input2,...], [{ state1, executionTime1 }, { state2, executionTime2 }, ...] }]
GarageServerIO.getEntities() : [{ id, state, [{ state1, executionTime1 }, { state2, executionTime2 }, ...] }]
GarageServerIO.updatePlayerState(id, state)
GarageServerIO.updateEntityState(id, state)
GarageServerIO.addEntity(id)
GarageServerIO.removeEntity(id)
GarageServerIO.sendPlayerEvent(id, data)
GarageServerIO.sendPlayersEvent(data)
Resources
License
Description
Languages
JavaScript
97.7%
Pug
1.5%
CSS
0.8%