ExtinctionOnline/static/js/game-client.js
2025-08-31 18:27:04 +09:00

115 lines
2.6 KiB
JavaScript

"use strict";
let clientId = null;
let controller = null;
let roomData = null;
const commands = {
syncRoomData: "SyncRoomData", // args: ホストのPlayerID, [PlayerID...]
gameStart: "GameStart", // args: PlayerID(ターン順)...
addCard: "AddCard", // target: 追加するPlayerID; args: 追加するカードのID, カードのIndex
worker: "Worker", //
waiting: "Waiting",//
};
const side = {
host: "HOST",
player: "PLAYER",
both: "BOTH"
}
function onSystemMessage(obj) {
if (clientId === null) {
clientId = obj.deliveryTo.clientId;
} else if (obj.from === clientId) {
roomData = obj.roomData;
controller.joinNewPlayer(obj);
} else {
controller.joinNewPlayer(obj);
}
}
function joinToRoom(id, name) {
if (id == null)
controller = new HostController();
else
controller = new PlayerController();
let obj = {
messageType: "SYSTEM",
from: clientId,
roomData: {
roomId: id,
roomName: name
}
};
socket.send(JSON.stringify(obj));
}
class Card {
cardType;
idIndex;
id;
constructor(type, idIndex) {
this.cardType = type;
this.idIndex = idIndex;
this.id = `${type.prefix}-${type.count}-${idIndex}`;
}
}
class Player {
clientId;
cards = new Array();
constructor(id) {
this.clientId = id;
}
// Side: Host
async addCard(card) {
this.cards.push(card);
new MessageBuilder(this.clientId).game().addCommand(commands.addCard, this.clientId, card.cardType.id, card.idIndex).send();
new MessageBuilder().game().addCommand(commands.addCard, this.clientId, cardTypes.unknown.id, -1).send();
if (card.cardType.onGet) {
EXOUtils.capsuleExecute(card.cardType.onGet, this);
}
}
}
class MessageBuilder {
object;
constructor(to, trSide = side.player) {
this.object = {
from: clientId,
roomData: roomData,
deliveryTo: {
type: to == null ? "ROOM" : "CLIENT",
clientId: to
},
body: {
side: trSide,
commands: []
}
};
}
game() {
this.object.messageType = "GAME";
return this;
}
addCommand(name, target, ...args) {
this.object.body.commands.push({
name: name,
target: target,
args: args
});
return this;
}
send() {
socket.send(JSON.stringify(this.object));
this.object = null;
}
}