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 { physicsObject } from "../Classes/physicsObject";
|
||||||
import { playerData } from "../Classes/playerData";
|
import { playerData } from "../Classes/playerData";
|
||||||
|
import { levelState } from "./levelState";
|
||||||
import { userData } from "./userData";
|
import { userData } from "./userData";
|
||||||
|
|
||||||
export class lobbyState{
|
export class lobbyState{
|
||||||
hostId : number
|
|
||||||
users : userData[] = [];
|
users : userData[] = [];
|
||||||
players : playerData[] = [];
|
players : playerData[] = [];
|
||||||
objects : physicsObject[] = [];
|
rooms : levelState[] = []
|
||||||
|
|
||||||
copyLight(){
|
copyLight(){
|
||||||
let lobby = Object.assign({}, this);
|
let lobby = Object.assign({}, this);
|
||||||
|
@ -15,6 +15,7 @@ export class lobbyState{
|
||||||
for (let i = 0; i < this.players.length; i++) {
|
for (let i = 0; i < this.players.length; i++) {
|
||||||
lobby.players.push(this.players[i].copyLight());
|
lobby.players.push(this.players[i].copyLight());
|
||||||
}
|
}
|
||||||
|
lobby.rooms = this.rooms
|
||||||
return lobby
|
return lobby
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,17 +1,23 @@
|
||||||
|
import { game } from "../game";
|
||||||
|
import { enemyDamageInfo } from "./enemyDamageInfo";
|
||||||
import { physicsObject } from "./physicsObject";
|
import { physicsObject } from "./physicsObject";
|
||||||
import { playerInventory } from "./playerInventory";
|
import { playerInventory } from "./playerInventory";
|
||||||
|
|
||||||
export class playerData{
|
export class playerData{
|
||||||
id : number
|
id : number
|
||||||
level : number = 1
|
level : number = 1
|
||||||
|
room : string = "0_0"
|
||||||
characterId : number
|
characterId : number
|
||||||
inventory : playerInventory = new playerInventory()
|
inventory : playerInventory = new playerInventory()
|
||||||
rigidbody : physicsObject = new physicsObject()
|
rigidbody : physicsObject = new physicsObject()
|
||||||
|
damageInfo : enemyDamageInfo[] = []
|
||||||
|
|
||||||
copyLight(){
|
copyLight(){
|
||||||
let player : any = {}
|
let player : any = {}
|
||||||
player.id = this.id
|
player.id = this.id
|
||||||
|
player.room = this.room
|
||||||
player.rigidbody = this.rigidbody
|
player.rigidbody = this.rigidbody
|
||||||
|
player.damageInfo = this.damageInfo
|
||||||
return player
|
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 { lobbyMessage } from "../Classes/lobbyMessage";
|
||||||
|
import { lobbyState } from "../Classes/lobbyState";
|
||||||
import { playerData } from "../Classes/playerData"
|
import { playerData } from "../Classes/playerData"
|
||||||
import { playerInventory } from "../Classes/playerInventory";
|
import { playerInventory } from "../Classes/playerInventory";
|
||||||
|
import { userData } from "../Classes/userData";
|
||||||
import { game } from "../game";
|
import { game } from "../game";
|
||||||
|
|
||||||
export function registerLobbyCallbacks(socket){
|
export function registerLobbyCallbacks(socket){
|
||||||
|
@ -12,7 +14,11 @@ export function registerLobbyCallbacks(socket){
|
||||||
|
|
||||||
socket.player.characterId = data1.characterId
|
socket.player.characterId = data1.characterId
|
||||||
game.lobbyState.addUser(socket.user, socket.player)
|
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"))
|
game.addMessage(new lobbyMessage(socket.user.login + " joined"))
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -22,24 +28,17 @@ export function registerLobbyCallbacks(socket){
|
||||||
let buff = Buffer.from(data, 'base64');
|
let buff = Buffer.from(data, 'base64');
|
||||||
let data1 : playerData = JSON.parse(buff.toString('utf-8'));
|
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){
|
if(player == null){
|
||||||
console.log("Error! Player not spawned!")
|
console.log("Error! Player not spawned!")
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
player.room = data1.room
|
||||||
player.rigidbody = data1.rigidbody
|
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) => {
|
socket.on('lobby/loadoutChanged', (data) => {
|
||||||
if(!socket.hasOwnProperty("user")) return;
|
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 { lobbyState } from "./Classes/lobbyState";
|
||||||
import { playerData } from "./Classes/playerData";
|
import { playerData } from "./Classes/playerData";
|
||||||
import { persistentItemData } from "./Classes/itemData";
|
import { persistentItemData } from "./Classes/itemData";
|
||||||
|
import { levelState } from "./Classes/levelState";
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
|
||||||
export class game{
|
export class game{
|
||||||
|
@ -13,7 +14,6 @@ export class game{
|
||||||
static playersDB : playerData[] = []
|
static playersDB : playerData[] = []
|
||||||
static itemsDB : persistentItemData[] = []
|
static itemsDB : persistentItemData[] = []
|
||||||
|
|
||||||
/** Key: socket ID*/
|
|
||||||
static lobbyState : lobbyState = new lobbyState()
|
static lobbyState : lobbyState = new lobbyState()
|
||||||
|
|
||||||
/** Max items: 20 */
|
/** Max items: 20 */
|
||||||
|
|
51
index.ts
51
index.ts
|
@ -5,6 +5,8 @@ import { players } from "./Player/players";
|
||||||
import { registerItemCallbacks } from "./Items/itemSocket";
|
import { registerItemCallbacks } from "./Items/itemSocket";
|
||||||
import { registerLobbyCallbacks } from "./Lobby/lobbySocket";
|
import { registerLobbyCallbacks } from "./Lobby/lobbySocket";
|
||||||
import { registerAccountCallbacks } from "./Account/accountSocket";
|
import { registerAccountCallbacks } from "./Account/accountSocket";
|
||||||
|
import { registerLevelCallbacks } from "./Level/levelSocket";
|
||||||
|
import { levelState } from "./Classes/levelState";
|
||||||
|
|
||||||
const express = require("express");
|
const express = require("express");
|
||||||
const app = express();
|
const app = express();
|
||||||
|
@ -33,6 +35,7 @@ io.on('connection', (socket) => {
|
||||||
registerAccountCallbacks(socket);
|
registerAccountCallbacks(socket);
|
||||||
registerLobbyCallbacks(socket);
|
registerLobbyCallbacks(socket);
|
||||||
registerItemCallbacks(socket);
|
registerItemCallbacks(socket);
|
||||||
|
registerLevelCallbacks(socket);
|
||||||
|
|
||||||
socket.io = game.socketIO = io;
|
socket.io = game.socketIO = io;
|
||||||
|
|
||||||
|
@ -54,13 +57,55 @@ io.on('connection', (socket) => {
|
||||||
setInterval(() => {
|
setInterval(() => {
|
||||||
let userCount = game.lobbyState.players.length
|
let userCount = game.lobbyState.players.length
|
||||||
if(userCount > 0){
|
if(userCount > 0){
|
||||||
game.lobbyState.hostId = game.lobbyState.users[0].id
|
game.lobbyState.players.forEach(p=>{
|
||||||
io.emit('lobby', JSON.stringify(game.lobbyState.copyLight()))
|
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)
|
}, 1000/30)
|
||||||
|
|
||||||
setInterval(() => {
|
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)
|
}, 60 * 1000)
|
||||||
|
|
||||||
process.on('SIGINT', function () {
|
process.on('SIGINT', function () {
|
||||||
|
|
Loading…
Reference in New Issue