Commit c1aaa726 authored by Chunchi Che's avatar Chunchi Che

Merge branch 'feat/service/select_position' into 'main'

Feat/service/select position

See merge request mycard/Neos!67
parents e0e04dcf 8998827a
neos-protobuf @ 836412c2
Subproject commit d8991a3d4a3b96db852653d5eb49664826466c90 Subproject commit 836412c292c4351ea9b7d499b31472672157e0dd
This diff is collapsed.
...@@ -6,6 +6,7 @@ import adaptSelectPlaceResponse from "./selectPlace"; ...@@ -6,6 +6,7 @@ import adaptSelectPlaceResponse from "./selectPlace";
import adaptSelectCardResponse from "./selectCard"; import adaptSelectCardResponse from "./selectCard";
import adaptSelectChainResponse from "./selectChain"; import adaptSelectChainResponse from "./selectChain";
import adaptSelectEffectYnResponse from "./selectEffectYn"; import adaptSelectEffectYnResponse from "./selectEffectYn";
import adaptSelectPositionResponse from "./selectPosition";
/* /*
* CTOS CTOS_RESPONSE * CTOS CTOS_RESPONSE
...@@ -46,6 +47,11 @@ export default class CtosResponsePacket extends YgoProPacket { ...@@ -46,6 +47,11 @@ export default class CtosResponsePacket extends YgoProPacket {
break; break;
} }
case "select_position": {
extraData = adaptSelectPositionResponse(response.select_position);
break;
}
default: { default: {
break; break;
} }
......
import { ygopro } from "../../../idl/ocgcore";
import { BufferWriter } from "../../bufferIO";
export default (
response: ygopro.CtosGameMsgResponse.SelectPositionResponse
) => {
const array = new Uint8Array(4);
const writer = new BufferWriter(array, true);
switch (response.position) {
case ygopro.CardPosition.FACEUP_ATTACK: {
writer.writeUint32(0x1);
break;
}
case ygopro.CardPosition.FACEDOWN_ATTACK: {
writer.writeUint32(0x2);
break;
}
case ygopro.CardPosition.FACEUP_DEFENSE: {
writer.writeUint32(0x4);
break;
}
case ygopro.CardPosition.FACEDOWN_DEFENSE: {
writer.writeUint32(0x8);
break;
}
default: {
console.warn(`Unsupported position type: ${response.position}`);
}
}
return array;
};
...@@ -37,3 +37,4 @@ export const MSG_MOVE = 50; ...@@ -37,3 +37,4 @@ export const MSG_MOVE = 50;
export const MSG_SELECT_CARD = 15; export const MSG_SELECT_CARD = 15;
export const MSG_SELECT_CHAIN = 16; export const MSG_SELECT_CHAIN = 16;
export const MSG_SELECT_EFFECTYN = 12; export const MSG_SELECT_EFFECTYN = 12;
export const MSG_SELECT_POSITION = 19;
...@@ -17,6 +17,7 @@ import MsgMoveAdapter from "./move"; ...@@ -17,6 +17,7 @@ import MsgMoveAdapter from "./move";
import MsgSelectCardAdapter from "./selectCard"; import MsgSelectCardAdapter from "./selectCard";
import MsgSelectChainAdapter from "./selectChain"; import MsgSelectChainAdapter from "./selectChain";
import MsgSelectEffectYnAdapter from "./selectEffectYn"; import MsgSelectEffectYnAdapter from "./selectEffectYn";
import MsgSelectPositionAdapter from "./selectPosition";
/* /*
* STOC GameMsg * STOC GameMsg
...@@ -97,6 +98,11 @@ export default class GameMsgAdapter implements StocAdapter { ...@@ -97,6 +98,11 @@ export default class GameMsgAdapter implements StocAdapter {
break; break;
} }
case GAME_MSG.MSG_SELECT_POSITION: {
gameMsg.select_position = MsgSelectPositionAdapter(gameData);
break;
}
default: { default: {
console.log("Unhandled GameMessage function=", func); console.log("Unhandled GameMessage function=", func);
......
import { ygopro } from "../../../idl/ocgcore";
import { BufferReader } from "../../bufferIO";
import MsgSelectPosition = ygopro.StocGameMessage.MsgSelectPosition;
/*
* Msg Select Position
*
* @param - see: https://code.mycard.moe/mycard/neos-protobuf/-/blob/main/idl/ocgcore.neos-protobuf
* @usage - 玩家选择表示形式
*
* */
export default (data: Uint8Array) => {
const reader = new BufferReader(data, true);
const player = reader.readUint8();
const code = reader.readUint32();
const positions = reader.readUint8();
const msg = new MsgSelectPosition({
player,
code,
positions: [],
});
if ((positions & 0x1) > 0) {
msg.positions.push(
new MsgSelectPosition.SelectAblePosition({
position: ygopro.CardPosition.FACEUP_ATTACK,
})
);
}
if ((positions & 0x2) > 0) {
msg.positions.push(
new MsgSelectPosition.SelectAblePosition({
position: ygopro.CardPosition.FACEDOWN_ATTACK,
})
);
}
if ((positions & 0x4) > 0) {
msg.positions.push(
new MsgSelectPosition.SelectAblePosition({
position: ygopro.CardPosition.FACEUP_DEFENSE,
})
);
}
if ((positions & 0x8) > 0) {
msg.positions.push(
new MsgSelectPosition.SelectAblePosition({
position: ygopro.CardPosition.FACEDOWN_DEFENSE,
})
);
}
return msg;
};
...@@ -189,3 +189,16 @@ export function sendSelectEffectYnResponse(value: boolean) { ...@@ -189,3 +189,16 @@ export function sendSelectEffectYnResponse(value: boolean) {
socketMiddleWare({ cmd: socketCmd.SEND, payload }); socketMiddleWare({ cmd: socketCmd.SEND, payload });
} }
export function sendSelectPositionResponse(value: ygopro.CardPosition) {
const response = new ygopro.YgoCtosMsg({
ctos_response: new ygopro.CtosGameMsgResponse({
select_position: new ygopro.CtosGameMsgResponse.SelectPositionResponse({
position: value,
}),
}),
});
const payload = new GameMsgResponse(response).serialize();
socketMiddleWare({ cmd: socketCmd.SEND, payload });
}
...@@ -11,6 +11,7 @@ import onMsgMove from "./move"; ...@@ -11,6 +11,7 @@ import onMsgMove from "./move";
import onMsgSelectCard from "./selectCard"; import onMsgSelectCard from "./selectCard";
import onMsgSelectChain from "./selectChain"; import onMsgSelectChain from "./selectChain";
import onMsgSelectEffectYn from "./selectEffectYn"; import onMsgSelectEffectYn from "./selectEffectYn";
import onMsgSelectPosition from "./selectPosition";
export default function handleGameMsg(pb: ygopro.YgoStocMsg) { export default function handleGameMsg(pb: ygopro.YgoStocMsg) {
const dispatch = store.dispatch; const dispatch = store.dispatch;
...@@ -83,6 +84,12 @@ export default function handleGameMsg(pb: ygopro.YgoStocMsg) { ...@@ -83,6 +84,12 @@ export default function handleGameMsg(pb: ygopro.YgoStocMsg) {
break; break;
} }
case "select_position": {
const selectPosition = msg.select_position;
onMsgSelectPosition(selectPosition, dispatch);
break;
}
default: { default: {
break; break;
} }
......
import { ygopro } from "../../api/ocgcore/idl/ocgcore";
import { AppDispatch } from "../../store";
import MsgSelectPosition = ygopro.StocGameMessage.MsgSelectPosition;
export default (selectPosition: MsgSelectPosition, dispatch: AppDispatch) => {
console.log(selectPosition);
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment