enemy damage sync
This commit is contained in:
parent
0beec15332
commit
142ec1dd05
|
@ -0,0 +1,5 @@
|
|||
export class enemyDamageInfo{
|
||||
sourceId : number
|
||||
targetId : number
|
||||
damage : number
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
import { Stat } from "./itemData"
|
||||
import { physicsObject } from "./physicsObject"
|
||||
|
||||
export class enemyData{
|
||||
id : number
|
||||
templateId : number
|
||||
rigidbody : physicsObject
|
||||
stats : Stat[] = []
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
import { enemyData } from "./enemyData";
|
||||
import { physicsObject } from "./physicsObject";
|
||||
import { playerData } from "./playerData";
|
||||
import { userData } from "./userData";
|
||||
|
||||
export class levelState{
|
||||
id : string
|
||||
hostId : number = -1
|
||||
enemies : enemyData[] = [];
|
||||
objects : physicsObject[] = [];
|
||||
}
|
|
@ -1,12 +1,12 @@
|
|||
import { physicsObject } from "../Classes/physicsObject";
|
||||
import { playerData } from "../Classes/playerData";
|
||||
import { levelState } from "./levelState";
|
||||
import { userData } from "./userData";
|
||||
|
||||
export class lobbyState{
|
||||
hostId : number
|
||||
users : userData[] = [];
|
||||
players : playerData[] = [];
|
||||
objects : physicsObject[] = [];
|
||||
rooms : levelState[] = []
|
||||
|
||||
copyLight(){
|
||||
let lobby = Object.assign({}, this);
|
||||
|
@ -15,6 +15,7 @@ export class lobbyState{
|
|||
for (let i = 0; i < this.players.length; i++) {
|
||||
lobby.players.push(this.players[i].copyLight());
|
||||
}
|
||||
lobby.rooms = this.rooms
|
||||
return lobby
|
||||
}
|
||||
|
||||
|
|
|
@ -1,17 +1,23 @@
|
|||
import { game } from "../game";
|
||||
import { enemyDamageInfo } from "./enemyDamageInfo";
|
||||
import { physicsObject } from "./physicsObject";
|
||||
import { playerInventory } from "./playerInventory";
|
||||
|
||||
export class playerData{
|
||||
id : number
|
||||
level : number = 1
|
||||
room : string = "0_0"
|
||||
characterId : number
|
||||
inventory : playerInventory = new playerInventory()
|
||||
rigidbody : physicsObject = new physicsObject()
|
||||
damageInfo : enemyDamageInfo[] = []
|
||||
|
||||
copyLight(){
|
||||
let player : any = {}
|
||||
player.id = this.id
|
||||
player.room = this.room
|
||||
player.rigidbody = this.rigidbody
|
||||
player.damageInfo = this.damageInfo
|
||||
return player
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
import { levelState } from "../Classes/levelState";
|
||||
import { game } from "../game";
|
||||
|
||||
export function registerLevelCallbacks(socket){
|
||||
socket.on('level/update', (data) => {
|
||||
if(!socket.hasOwnProperty("user")) return;
|
||||
|
||||
let buff = Buffer.from(data, 'base64');
|
||||
let rawJson = JSON.parse(buff.toString('utf-8'));
|
||||
let data1 : levelState = rawJson;
|
||||
|
||||
let room = game.lobbyState.rooms.find(l=>l.id == data1.id)
|
||||
if (room == null){
|
||||
room = new levelState()
|
||||
room.id = data1.id
|
||||
game.lobbyState.rooms.push(room)
|
||||
}
|
||||
|
||||
let player = socket.player
|
||||
player.room = rawJson.player.room
|
||||
player.rigidbody = rawJson.player.rigidbody
|
||||
//only in non-host player
|
||||
//player.damageInfo = rawJson.player.damageInfo
|
||||
|
||||
room.enemies = data1.enemies
|
||||
room.objects = data1.objects
|
||||
});
|
||||
}
|
|
@ -1,6 +1,8 @@
|
|||
import { lobbyMessage } from "../Classes/lobbyMessage";
|
||||
import { lobbyState } from "../Classes/lobbyState";
|
||||
import { playerData } from "../Classes/playerData"
|
||||
import { playerInventory } from "../Classes/playerInventory";
|
||||
import { userData } from "../Classes/userData";
|
||||
import { game } from "../game";
|
||||
|
||||
export function registerLobbyCallbacks(socket){
|
||||
|
@ -12,7 +14,11 @@ export function registerLobbyCallbacks(socket){
|
|||
|
||||
socket.player.characterId = data1.characterId
|
||||
game.lobbyState.addUser(socket.user, socket.player)
|
||||
game.socketIO.emit("lobby/playerJoin", JSON.stringify(game.lobbyState))
|
||||
|
||||
let newLobbyState : lobbyState = Object.assign({}, game.lobbyState);
|
||||
newLobbyState.users = newLobbyState.users.map(u=> userData.makeSafe(u))
|
||||
|
||||
game.socketIO.emit("lobby/playerJoin", JSON.stringify(newLobbyState))
|
||||
game.addMessage(new lobbyMessage(socket.user.login + " joined"))
|
||||
});
|
||||
|
||||
|
@ -22,24 +28,17 @@ export function registerLobbyCallbacks(socket){
|
|||
let buff = Buffer.from(data, 'base64');
|
||||
let data1 : playerData = JSON.parse(buff.toString('utf-8'));
|
||||
|
||||
let player = game.lobbyState.findPlayer(socket.user.id)
|
||||
let player : playerData = socket.player
|
||||
if(player == null){
|
||||
console.log("Error! Player not spawned!")
|
||||
}
|
||||
else{
|
||||
player.room = data1.room
|
||||
player.rigidbody = data1.rigidbody
|
||||
player.damageInfo = player.damageInfo.concat(data1.damageInfo)
|
||||
}
|
||||
});
|
||||
|
||||
socket.on('lobby/lobbyUpdate', (data) => {
|
||||
if(!socket.hasOwnProperty("user")) return;
|
||||
|
||||
let buff = Buffer.from(data, 'base64');
|
||||
let data1 = JSON.parse(buff.toString('utf-8'));
|
||||
|
||||
game.lobbyState.objects = data1.objects
|
||||
});
|
||||
|
||||
socket.on('lobby/loadoutChanged', (data) => {
|
||||
if(!socket.hasOwnProperty("user")) return;
|
||||
|
||||
|
|
2
game.ts
2
game.ts
|
@ -3,6 +3,7 @@ import { lobbyMessage } from "./Classes/lobbyMessage";
|
|||
import { lobbyState } from "./Classes/lobbyState";
|
||||
import { playerData } from "./Classes/playerData";
|
||||
import { persistentItemData } from "./Classes/itemData";
|
||||
import { levelState } from "./Classes/levelState";
|
||||
const fs = require('fs');
|
||||
|
||||
export class game{
|
||||
|
@ -13,7 +14,6 @@ export class game{
|
|||
static playersDB : playerData[] = []
|
||||
static itemsDB : persistentItemData[] = []
|
||||
|
||||
/** Key: socket ID*/
|
||||
static lobbyState : lobbyState = new lobbyState()
|
||||
|
||||
/** Max items: 20 */
|
||||
|
|
51
index.ts
51
index.ts
|
@ -5,6 +5,8 @@ import { players } from "./Player/players";
|
|||
import { registerItemCallbacks } from "./Items/itemSocket";
|
||||
import { registerLobbyCallbacks } from "./Lobby/lobbySocket";
|
||||
import { registerAccountCallbacks } from "./Account/accountSocket";
|
||||
import { registerLevelCallbacks } from "./Level/levelSocket";
|
||||
import { levelState } from "./Classes/levelState";
|
||||
|
||||
const express = require("express");
|
||||
const app = express();
|
||||
|
@ -33,6 +35,7 @@ io.on('connection', (socket) => {
|
|||
registerAccountCallbacks(socket);
|
||||
registerLobbyCallbacks(socket);
|
||||
registerItemCallbacks(socket);
|
||||
registerLevelCallbacks(socket);
|
||||
|
||||
socket.io = game.socketIO = io;
|
||||
|
||||
|
@ -54,13 +57,55 @@ io.on('connection', (socket) => {
|
|||
setInterval(() => {
|
||||
let userCount = game.lobbyState.players.length
|
||||
if(userCount > 0){
|
||||
game.lobbyState.hostId = game.lobbyState.users[0].id
|
||||
io.emit('lobby', JSON.stringify(game.lobbyState.copyLight()))
|
||||
game.lobbyState.players.forEach(p=>{
|
||||
let room = game.lobbyState.rooms.find(r=>r.id == p.room)
|
||||
if (room == null){
|
||||
room = new levelState()
|
||||
room.id = p.room
|
||||
game.lobbyState.rooms.push(room)
|
||||
console.log("Added room " + room.id)
|
||||
}
|
||||
})
|
||||
let removeRooms = []
|
||||
for (let i = 0; i < game.lobbyState.rooms.length; i++){
|
||||
let room = game.lobbyState.rooms[i]
|
||||
|
||||
//assign host to a room if there isn't one
|
||||
if(room.hostId == -1){
|
||||
let hostPlayer = game.lobbyState.players.find(p=>p.room == room.id)
|
||||
if(hostPlayer != null){
|
||||
room.hostId = hostPlayer.id
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
//verify if host is still in the room
|
||||
let hostPlayer = game.lobbyState.players.find(p=>p.id == room.hostId)
|
||||
if(hostPlayer == null || hostPlayer.room != room.id){
|
||||
//if they aren't, find another
|
||||
hostPlayer = game.lobbyState.players.find(p=>p.room == room.id)
|
||||
if(hostPlayer != null){
|
||||
room.hostId = hostPlayer.id
|
||||
}
|
||||
else{
|
||||
room.hostId = -1
|
||||
removeRooms.push(i)
|
||||
}
|
||||
}
|
||||
}
|
||||
for(let i = removeRooms.length - 1; i >= 0; i--){
|
||||
console.log("no players in room " + game.lobbyState.rooms[removeRooms[i]] + ". removing.")
|
||||
game.lobbyState.rooms.splice(removeRooms[i],1);
|
||||
}
|
||||
io.emit('lobby/update', JSON.stringify(game.lobbyState.copyLight()))
|
||||
game.playersDB.forEach(p=>{
|
||||
p.damageInfo = []
|
||||
})
|
||||
}
|
||||
}, 1000/30)
|
||||
|
||||
setInterval(() => {
|
||||
console.log("Players: " + game.lobbyState.players.length + ", users: " + game.lobbyState.users.length);
|
||||
console.log("Players: " + game.lobbyState.players.length + ", users: " + game.lobbyState.users.length + ", rooms: " + game.lobbyState.rooms.length);
|
||||
}, 60 * 1000)
|
||||
|
||||
process.on('SIGINT', function () {
|
||||
|
|
Loading…
Reference in New Issue