revert gameManager
This commit is contained in:
@@ -12,7 +12,6 @@
|
||||
"devDependencies": {
|
||||
"@types/mocha": "^8.2.3",
|
||||
"@types/node": "^15.14.9",
|
||||
"@types/seedrandom": "^3.0.1",
|
||||
"mocha": "^9.1.3",
|
||||
"onchange": "^7.1.0",
|
||||
"ts-node": "^10.4.0",
|
||||
@@ -20,7 +19,6 @@
|
||||
"typescript": "^4.5.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"seedrandom": "^3.0.5",
|
||||
"tsrpc": "^3.1.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ApiCallWs } from "tsrpc";
|
||||
import { ApiCall } from "tsrpc";
|
||||
import { ReqLogin, ResLogin } from "../shared/protocols/PtlLogin";
|
||||
|
||||
let nextPlayerId = 1;
|
||||
|
||||
export async function ApiLogin(call: ApiCallWs<ReqLogin, ResLogin>) {
|
||||
export async function ApiLogin(call: ApiCall<ReqLogin, ResLogin>) {
|
||||
let playerId = nextPlayerId++;
|
||||
|
||||
call.conn.currentUser = {
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
import 'k8w-extend-native';
|
||||
import * as path from "path";
|
||||
import { WsServer } from "tsrpc";
|
||||
import { Room } from './models/Room';
|
||||
import { serviceProto } from './shared/protocols/serviceProto';
|
||||
import { CurrentUser } from './shared/types/CurrentUser';
|
||||
|
||||
// Create the Server
|
||||
export const server = new WsServer(serviceProto, {
|
||||
@@ -23,4 +25,12 @@ async function main() {
|
||||
await init();
|
||||
await server.start();
|
||||
}
|
||||
main();
|
||||
main();
|
||||
|
||||
// 扩展 Connection 字段
|
||||
declare module 'tsrpc' {
|
||||
export interface BaseConnection {
|
||||
currentUser: CurrentUser,
|
||||
room?: Room,
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,3 @@
|
||||
import seedrandom from "seedrandom";
|
||||
import { MsgCallWs, uint, WsConnection } from "tsrpc";
|
||||
import { server } from "..";
|
||||
import { gameConfig } from "../shared/game/gameConfig";
|
||||
@@ -6,7 +5,6 @@ import { GameSystemInput } from "../shared/game/GameSystemInput";
|
||||
import { GameSystemState } from "../shared/game/GameSystemState";
|
||||
import { MsgGameInput } from "../shared/protocols/game/client/MsgGameInput";
|
||||
import { ServiceType } from "../shared/protocols/serviceProto";
|
||||
import { CurrentUser } from "../shared/types/CurrentUser";
|
||||
import { RoomState } from "../shared/types/RoomState";
|
||||
|
||||
const MAX_ROOM_USER = 2;
|
||||
@@ -111,8 +109,6 @@ export class Room {
|
||||
this._syncRoomState();
|
||||
|
||||
// 生成游戏初始状态
|
||||
let seed = '' + Math.random();
|
||||
let prng = seedrandom(seed, { state: true });
|
||||
let initGameState: GameSystemState = {
|
||||
now: 0,
|
||||
players: this.conns.map(v => ({
|
||||
@@ -137,13 +133,7 @@ export class Room {
|
||||
},
|
||||
|
||||
// 上次创建敌机的时间
|
||||
lastCreateEnemyTime: 3000,
|
||||
|
||||
// 伪随机数发生器状态
|
||||
random: {
|
||||
seed: '' + Math.random(),
|
||||
state: prng.state()
|
||||
}
|
||||
lastCreateEnemyTime: 3000
|
||||
};
|
||||
this._lastSn = {};
|
||||
this._lastSyncTime = Date.now();
|
||||
@@ -195,11 +185,4 @@ export class Room {
|
||||
}
|
||||
// #endregion
|
||||
|
||||
}
|
||||
|
||||
declare module 'tsrpc' {
|
||||
export interface BaseConnection {
|
||||
currentUser: CurrentUser,
|
||||
room?: Room,
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,3 @@
|
||||
import seedrandom from "seedrandom";
|
||||
import { gameConfig } from "./gameConfig";
|
||||
import { GameSystemEvent } from "./GameSystemEvent";
|
||||
import { GameSystemInput } from "./GameSystemInput";
|
||||
@@ -16,12 +15,8 @@ export class GameSystem {
|
||||
}
|
||||
set state(state: GameSystemState) {
|
||||
this._state = state;
|
||||
this._seedRandom = seedrandom(state.random.seed, state.random.state);
|
||||
}
|
||||
|
||||
// 伪随机数发生器
|
||||
private _seedRandom!: ReturnType<seedrandom>;
|
||||
|
||||
constructor(state: GameSystemState) {
|
||||
this.state = state;
|
||||
}
|
||||
@@ -135,11 +130,11 @@ export class GameSystem {
|
||||
}
|
||||
|
||||
let time = this.state.now - (this.state.now % gameConfig.enemy.bornGapTime);
|
||||
let pos = { x: this._random() * 750 - 375, y: gameConfig.enemy.bornY };
|
||||
let pos = { x: 0, y: gameConfig.enemy.bornY };
|
||||
let enemy: EnemyState = {
|
||||
id: this.state.nextId.enemy++,
|
||||
// 敌机类型
|
||||
type: this._random() > 0.5 ? EnemyType.E1 : EnemyType.E2,
|
||||
type: EnemyType.E1,
|
||||
pos: { ...pos },
|
||||
init: {
|
||||
time: time,
|
||||
@@ -156,12 +151,6 @@ export class GameSystem {
|
||||
this.state.enemies.push(enemy);
|
||||
}
|
||||
|
||||
private _random(): number {
|
||||
let rand = this._seedRandom();
|
||||
this.state.random.state = this._seedRandom.state();
|
||||
return rand;
|
||||
}
|
||||
|
||||
// 简易的事件侦听器
|
||||
private _eventHandlers: { [key: string]: Function[] } = {};
|
||||
on<T extends keyof GameSystemEvent>(eventName: T, handler: (e: GameSystemEvent[T]) => void): (e: GameSystemEvent[T]) => void {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { uint } from "tsrpc";
|
||||
import { uint } from "tsrpc-proto";
|
||||
|
||||
export interface GameSystemEvent {
|
||||
playerDie: {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { uint } from "tsrpc";
|
||||
import { uint } from "tsrpc-proto";
|
||||
|
||||
// 坐标系:X-Y 原点在中间下方
|
||||
/*
|
||||
@@ -26,12 +26,6 @@ export interface GameSystemState {
|
||||
|
||||
// 上次创建敌机的时间
|
||||
lastCreateEnemyTime: number,
|
||||
|
||||
// 伪随机数发生器状态
|
||||
random: {
|
||||
seed: string,
|
||||
state: object
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { uint } from "tsrpc";
|
||||
import { uint } from "tsrpc-proto";
|
||||
import { GameSystemState } from "../../../game/GameSystemState";
|
||||
|
||||
export interface MsgGameStart {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { uint } from "tsrpc";
|
||||
import { uint } from "tsrpc-proto";
|
||||
import { GameSystemInput } from "../../../game/GameSystemInput";
|
||||
|
||||
/**
|
||||
|
||||
@@ -43,7 +43,7 @@ export interface ServiceType {
|
||||
}
|
||||
|
||||
export const serviceProto: ServiceProto<ServiceType> = {
|
||||
"version": 3,
|
||||
"version": 4,
|
||||
"services": [
|
||||
{
|
||||
"id": 11,
|
||||
@@ -701,29 +701,6 @@ export const serviceProto: ServiceProto<ServiceType> = {
|
||||
"type": {
|
||||
"type": "Number"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "random",
|
||||
"type": {
|
||||
"type": "Interface",
|
||||
"properties": [
|
||||
{
|
||||
"id": 0,
|
||||
"name": "seed",
|
||||
"type": {
|
||||
"type": "String"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"name": "state",
|
||||
"type": {
|
||||
"type": "Object"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { uint } from "tsrpc";
|
||||
import { uint } from "tsrpc-proto";
|
||||
|
||||
export interface CurrentUser {
|
||||
id: uint,
|
||||
|
||||
@@ -16,7 +16,7 @@ const tsrpcConf: TsrpcConfig = {
|
||||
sync: [
|
||||
{
|
||||
from: 'src/shared',
|
||||
to: '../frontend/assets/scripts/shared',
|
||||
to: '../frontend/assets/script/shared',
|
||||
type: 'symlink' // Change this to 'copy' if your environment not support symlink
|
||||
}
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user