mirror of
https://gitee.com/Dcivan/LazyFighters.git
synced 2026-05-07 01:00:43 +08:00
116 lines
2.5 KiB
JavaScript
116 lines
2.5 KiB
JavaScript
var constants = require("./game/constants")
|
|
var Map = require("./game/map")
|
|
var Character = require("./game/character")
|
|
var map = new Map(5, 5)
|
|
var distance = 100
|
|
|
|
var onlineNumber = 0
|
|
|
|
var socketServer = function(server) {
|
|
var io = require("socket.io")(server)
|
|
io.on("connection", function(socket) {
|
|
onlineNumber++
|
|
var player = new Character(map)
|
|
var gameOn = true
|
|
|
|
// character init
|
|
socket.emit("attrChange", player.attr)
|
|
socket.emit("positionChange", player.position.toJSON())
|
|
socket.emit("statusChange", player.getStatusData())
|
|
socket.emit("mapChange", player.getMapData())
|
|
|
|
// character event
|
|
player.on("log", function(msg) {
|
|
socket.emit("log", msg)
|
|
})
|
|
|
|
player.on("attrChange", function(attr) {
|
|
socket.emit("attrChange", attr)
|
|
})
|
|
|
|
player.on("positionChange", function(position) {
|
|
socket.emit("positionChange", position)
|
|
})
|
|
|
|
player.on("statusChange", function(statusData) {
|
|
socket.emit("statusChange", statusData)
|
|
})
|
|
|
|
player.on("mapChange", function(mapData) {
|
|
socket.emit("mapChange", mapData)
|
|
})
|
|
|
|
// client event
|
|
socket.on("action", function(data) {
|
|
player.doAction(data)
|
|
})
|
|
|
|
socket.on("disconnect", function() {
|
|
map.reset(player.position)
|
|
onlineNumber--
|
|
gameOn = false
|
|
})
|
|
|
|
socket.on("client-name", function(data) {
|
|
player.name = data
|
|
})
|
|
|
|
socket.on("target", function(data) {
|
|
if(!data)
|
|
return
|
|
if(player.targetPosition && data.x == player.targetPosition.x && data.y == player.targetPosition.y) {
|
|
return
|
|
}
|
|
player.setTarget(data.x, data.y)
|
|
})
|
|
|
|
|
|
// send network data
|
|
var updateNetwork = function() {
|
|
if(!gameOn) {
|
|
return
|
|
}
|
|
data = {
|
|
onlineNumber: onlineNumber
|
|
}
|
|
|
|
socket.emit("network", data)
|
|
setTimeout(updateNetwork, 1000)
|
|
}
|
|
updateNetwork()
|
|
|
|
// send game data
|
|
var updateGame = function() {
|
|
if(!gameOn) {
|
|
return
|
|
}
|
|
|
|
var timeStart = new Date().getTime()
|
|
|
|
var data = {}
|
|
data.hp = Math.floor(player.hp)
|
|
if(player.status == "action") {
|
|
data.progress = player.getProgressData()
|
|
}
|
|
|
|
socket.emit("update", data)
|
|
|
|
player.update()
|
|
|
|
var timeEnd = new Date().getTime()
|
|
|
|
var delay = 1000 / constants.fps + timeStart - timeEnd
|
|
if(delay < 0) {
|
|
delay = 0
|
|
}
|
|
|
|
if(gameOn) {
|
|
setTimeout(updateGame, delay)
|
|
}
|
|
}
|
|
updateGame()
|
|
})
|
|
}
|
|
|
|
module.exports = socketServer
|