binary optimization
This commit is contained in:
@@ -87,7 +87,6 @@ export default class DataManager extends Singleton {
|
||||
player.direction = { x, y }
|
||||
break
|
||||
}
|
||||
|
||||
case InputTypeEnum.WeaponShoot: {
|
||||
const { owner, position, direction } = input
|
||||
const bullet: IBullet = {
|
||||
|
@@ -1,7 +1,6 @@
|
||||
import Singleton from '../Base/Singleton'
|
||||
import { ApiMsgEnum, IModel, strdecode, strencode } from '../Common';
|
||||
import { binaryEncode } from '../Common/Binary';
|
||||
import { binaryDecode } from '../Utils';
|
||||
import { binaryEncode, binaryDecode } from '../Common/Binary';
|
||||
|
||||
const TIMEOUT = 5000
|
||||
|
||||
@@ -94,8 +93,6 @@ export default class NetworkManager extends Singleton {
|
||||
|
||||
sendMsg<T extends keyof IModel['msg']>(name: T, data: IModel['msg'][T]) {
|
||||
const view = binaryEncode(name, data)
|
||||
console.log("view", view.buffer);
|
||||
|
||||
this.ws.send(view.buffer)
|
||||
}
|
||||
|
||||
|
@@ -8,80 +8,4 @@ const getNumberWithinString = (str: string) => parseInt(str.match(INDEX_REG)?.[1
|
||||
export const sortSpriteFrame = (spriteFrame: Array<SpriteFrame>) =>
|
||||
spriteFrame.sort((a, b) => getNumberWithinString(a.name) - getNumberWithinString(b.name))
|
||||
|
||||
export const rad2Angle = (rad: number) => rad / Math.PI * 180
|
||||
|
||||
export const binaryDecode = (buffer: ArrayBuffer) => {
|
||||
let index = 0
|
||||
const view = new DataView(buffer)
|
||||
const type = view.getUint8(index++)
|
||||
|
||||
if (type === ApiMsgEnum.MsgClientSync) {
|
||||
const inputType = view.getUint8(index++)
|
||||
if (inputType === InputTypeEnum.ActorMove) {
|
||||
const id = view.getUint8(index++)
|
||||
const directionX = view.getFloat32(index)
|
||||
index += 4
|
||||
const directionY = view.getFloat32(index)
|
||||
index += 4
|
||||
const dt = view.getFloat32(index)
|
||||
index += 4
|
||||
const msg = {
|
||||
name: ApiMsgEnum.MsgClientSync,
|
||||
data: {
|
||||
type: InputTypeEnum.ActorMove,
|
||||
id,
|
||||
direction: {
|
||||
x: directionX,
|
||||
y: directionY,
|
||||
},
|
||||
dt
|
||||
}
|
||||
}
|
||||
|
||||
return msg
|
||||
} else if (inputType === InputTypeEnum.WeaponShoot) {
|
||||
const id = view.getUint8(index++)
|
||||
const positionX = view.getFloat32(index)
|
||||
index += 4
|
||||
const positionY = view.getFloat32(index)
|
||||
index += 4
|
||||
const directionX = view.getFloat32(index)
|
||||
index += 4
|
||||
const directionY = view.getFloat32(index)
|
||||
index += 4
|
||||
const msg = {
|
||||
name: ApiMsgEnum.MsgClientSync,
|
||||
data: {
|
||||
type: InputTypeEnum.WeaponShoot,
|
||||
id,
|
||||
position: {
|
||||
x: positionX,
|
||||
y: positionY,
|
||||
},
|
||||
direction: {
|
||||
x: directionX,
|
||||
y: directionY,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
return msg
|
||||
} else {
|
||||
const dt = view.getFloat32(index)
|
||||
index += 4
|
||||
const msg = {
|
||||
name: ApiMsgEnum.MsgClientSync,
|
||||
data: {
|
||||
type: InputTypeEnum.TimePast,
|
||||
dt,
|
||||
}
|
||||
}
|
||||
return msg
|
||||
}
|
||||
} else {
|
||||
return {
|
||||
name: type,
|
||||
data: JSON.parse(strdecode(new Uint8Array(buffer.slice(1))))
|
||||
}
|
||||
}
|
||||
}
|
||||
export const rad2Angle = (rad: number) => rad / Math.PI * 180
|
Reference in New Issue
Block a user