Commit 0896be2d authored by Chunchi Che's avatar Chunchi Che

Merge branch 'feat/pos_change' into 'main'

Feat/pos change

See merge request !83
parents 57e5a7ba b2bfeb73
neos-protobuf @ 9df2b696
Subproject commit a6ff791566b10e716210678371d74e62cd128ad9 Subproject commit 9df2b696eb24e89fd760945ef1b218b9d29a6df3
...@@ -5017,7 +5017,7 @@ export namespace ygopro { ...@@ -5017,7 +5017,7 @@ export namespace ygopro {
} }
export class StocGameMessage extends pb_1.Message { export class StocGameMessage extends pb_1.Message {
#one_of_decls: number[][] = [ #one_of_decls: number[][] = [
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
]; ];
constructor( constructor(
data?: data?:
...@@ -5039,6 +5039,7 @@ export namespace ygopro { ...@@ -5039,6 +5039,7 @@ export namespace ygopro {
select_option?: never; select_option?: never;
shuffle_hand?: never; shuffle_hand?: never;
select_battle_cmd?: never; select_battle_cmd?: never;
pos_change?: never;
} }
| { | {
start?: never; start?: never;
...@@ -5056,6 +5057,7 @@ export namespace ygopro { ...@@ -5056,6 +5057,7 @@ export namespace ygopro {
select_option?: never; select_option?: never;
shuffle_hand?: never; shuffle_hand?: never;
select_battle_cmd?: never; select_battle_cmd?: never;
pos_change?: never;
} }
| { | {
start?: never; start?: never;
...@@ -5073,6 +5075,7 @@ export namespace ygopro { ...@@ -5073,6 +5075,7 @@ export namespace ygopro {
select_option?: never; select_option?: never;
shuffle_hand?: never; shuffle_hand?: never;
select_battle_cmd?: never; select_battle_cmd?: never;
pos_change?: never;
} }
| { | {
start?: never; start?: never;
...@@ -5090,6 +5093,7 @@ export namespace ygopro { ...@@ -5090,6 +5093,7 @@ export namespace ygopro {
select_option?: never; select_option?: never;
shuffle_hand?: never; shuffle_hand?: never;
select_battle_cmd?: never; select_battle_cmd?: never;
pos_change?: never;
} }
| { | {
start?: never; start?: never;
...@@ -5107,6 +5111,7 @@ export namespace ygopro { ...@@ -5107,6 +5111,7 @@ export namespace ygopro {
select_option?: never; select_option?: never;
shuffle_hand?: never; shuffle_hand?: never;
select_battle_cmd?: never; select_battle_cmd?: never;
pos_change?: never;
} }
| { | {
start?: never; start?: never;
...@@ -5124,6 +5129,7 @@ export namespace ygopro { ...@@ -5124,6 +5129,7 @@ export namespace ygopro {
select_option?: never; select_option?: never;
shuffle_hand?: never; shuffle_hand?: never;
select_battle_cmd?: never; select_battle_cmd?: never;
pos_change?: never;
} }
| { | {
start?: never; start?: never;
...@@ -5141,6 +5147,7 @@ export namespace ygopro { ...@@ -5141,6 +5147,7 @@ export namespace ygopro {
select_option?: never; select_option?: never;
shuffle_hand?: never; shuffle_hand?: never;
select_battle_cmd?: never; select_battle_cmd?: never;
pos_change?: never;
} }
| { | {
start?: never; start?: never;
...@@ -5158,6 +5165,7 @@ export namespace ygopro { ...@@ -5158,6 +5165,7 @@ export namespace ygopro {
select_option?: never; select_option?: never;
shuffle_hand?: never; shuffle_hand?: never;
select_battle_cmd?: never; select_battle_cmd?: never;
pos_change?: never;
} }
| { | {
start?: never; start?: never;
...@@ -5175,6 +5183,7 @@ export namespace ygopro { ...@@ -5175,6 +5183,7 @@ export namespace ygopro {
select_option?: never; select_option?: never;
shuffle_hand?: never; shuffle_hand?: never;
select_battle_cmd?: never; select_battle_cmd?: never;
pos_change?: never;
} }
| { | {
start?: never; start?: never;
...@@ -5192,6 +5201,7 @@ export namespace ygopro { ...@@ -5192,6 +5201,7 @@ export namespace ygopro {
select_option?: never; select_option?: never;
shuffle_hand?: never; shuffle_hand?: never;
select_battle_cmd?: never; select_battle_cmd?: never;
pos_change?: never;
} }
| { | {
start?: never; start?: never;
...@@ -5209,6 +5219,7 @@ export namespace ygopro { ...@@ -5209,6 +5219,7 @@ export namespace ygopro {
select_option?: never; select_option?: never;
shuffle_hand?: never; shuffle_hand?: never;
select_battle_cmd?: never; select_battle_cmd?: never;
pos_change?: never;
} }
| { | {
start?: never; start?: never;
...@@ -5226,6 +5237,7 @@ export namespace ygopro { ...@@ -5226,6 +5237,7 @@ export namespace ygopro {
select_option?: never; select_option?: never;
shuffle_hand?: never; shuffle_hand?: never;
select_battle_cmd?: never; select_battle_cmd?: never;
pos_change?: never;
} }
| { | {
start?: never; start?: never;
...@@ -5243,6 +5255,7 @@ export namespace ygopro { ...@@ -5243,6 +5255,7 @@ export namespace ygopro {
select_option?: StocGameMessage.MsgSelectOption; select_option?: StocGameMessage.MsgSelectOption;
shuffle_hand?: never; shuffle_hand?: never;
select_battle_cmd?: never; select_battle_cmd?: never;
pos_change?: never;
} }
| { | {
start?: never; start?: never;
...@@ -5260,6 +5273,7 @@ export namespace ygopro { ...@@ -5260,6 +5273,7 @@ export namespace ygopro {
select_option?: never; select_option?: never;
shuffle_hand?: StocGameMessage.MsgShuffleHand; shuffle_hand?: StocGameMessage.MsgShuffleHand;
select_battle_cmd?: never; select_battle_cmd?: never;
pos_change?: never;
} }
| { | {
start?: never; start?: never;
...@@ -5277,6 +5291,25 @@ export namespace ygopro { ...@@ -5277,6 +5291,25 @@ export namespace ygopro {
select_option?: never; select_option?: never;
shuffle_hand?: never; shuffle_hand?: never;
select_battle_cmd?: StocGameMessage.MsgSelectBattleCmd; select_battle_cmd?: StocGameMessage.MsgSelectBattleCmd;
pos_change?: never;
}
| {
start?: never;
draw?: never;
new_turn?: never;
new_phase?: never;
hint?: never;
select_idle_cmd?: never;
select_place?: never;
move?: never;
select_card?: never;
select_chain?: never;
select_effect_yn?: never;
select_position?: never;
select_option?: never;
shuffle_hand?: never;
select_battle_cmd?: never;
pos_change?: StocGameMessage.MsgPosChange;
} }
)) ))
) { ) {
...@@ -5338,6 +5371,9 @@ export namespace ygopro { ...@@ -5338,6 +5371,9 @@ export namespace ygopro {
) { ) {
this.select_battle_cmd = data.select_battle_cmd; this.select_battle_cmd = data.select_battle_cmd;
} }
if ("pos_change" in data && data.pos_change != undefined) {
this.pos_change = data.pos_change;
}
} }
} }
get start() { get start() {
...@@ -5535,6 +5571,19 @@ export namespace ygopro { ...@@ -5535,6 +5571,19 @@ export namespace ygopro {
get has_select_battle_cmd() { get has_select_battle_cmd() {
return pb_1.Message.getField(this, 15) != null; return pb_1.Message.getField(this, 15) != null;
} }
get pos_change() {
return pb_1.Message.getWrapperField(
this,
StocGameMessage.MsgPosChange,
16
) as StocGameMessage.MsgPosChange;
}
set pos_change(value: StocGameMessage.MsgPosChange) {
pb_1.Message.setOneofWrapperField(this, 16, this.#one_of_decls[0], value);
}
get has_pos_change() {
return pb_1.Message.getField(this, 16) != null;
}
get gameMsg() { get gameMsg() {
const cases: { const cases: {
[index: number]: [index: number]:
...@@ -5553,7 +5602,8 @@ export namespace ygopro { ...@@ -5553,7 +5602,8 @@ export namespace ygopro {
| "select_position" | "select_position"
| "select_option" | "select_option"
| "shuffle_hand" | "shuffle_hand"
| "select_battle_cmd"; | "select_battle_cmd"
| "pos_change";
} = { } = {
0: "none", 0: "none",
1: "start", 1: "start",
...@@ -5571,11 +5621,12 @@ export namespace ygopro { ...@@ -5571,11 +5621,12 @@ export namespace ygopro {
13: "select_option", 13: "select_option",
14: "shuffle_hand", 14: "shuffle_hand",
15: "select_battle_cmd", 15: "select_battle_cmd",
16: "pos_change",
}; };
return cases[ return cases[
pb_1.Message.computeOneofCase( pb_1.Message.computeOneofCase(
this, this,
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
) )
]; ];
} }
...@@ -5617,6 +5668,9 @@ export namespace ygopro { ...@@ -5617,6 +5668,9 @@ export namespace ygopro {
select_battle_cmd?: ReturnType< select_battle_cmd?: ReturnType<
typeof StocGameMessage.MsgSelectBattleCmd.prototype.toObject typeof StocGameMessage.MsgSelectBattleCmd.prototype.toObject
>; >;
pos_change?: ReturnType<
typeof StocGameMessage.MsgPosChange.prototype.toObject
>;
}): StocGameMessage { }): StocGameMessage {
const message = new StocGameMessage({}); const message = new StocGameMessage({});
if (data.start != null) { if (data.start != null) {
...@@ -5683,6 +5737,11 @@ export namespace ygopro { ...@@ -5683,6 +5737,11 @@ export namespace ygopro {
message.select_battle_cmd = message.select_battle_cmd =
StocGameMessage.MsgSelectBattleCmd.fromObject(data.select_battle_cmd); StocGameMessage.MsgSelectBattleCmd.fromObject(data.select_battle_cmd);
} }
if (data.pos_change != null) {
message.pos_change = StocGameMessage.MsgPosChange.fromObject(
data.pos_change
);
}
return message; return message;
} }
toObject() { toObject() {
...@@ -5724,6 +5783,9 @@ export namespace ygopro { ...@@ -5724,6 +5783,9 @@ export namespace ygopro {
select_battle_cmd?: ReturnType< select_battle_cmd?: ReturnType<
typeof StocGameMessage.MsgSelectBattleCmd.prototype.toObject typeof StocGameMessage.MsgSelectBattleCmd.prototype.toObject
>; >;
pos_change?: ReturnType<
typeof StocGameMessage.MsgPosChange.prototype.toObject
>;
} = {}; } = {};
if (this.start != null) { if (this.start != null) {
data.start = this.start.toObject(); data.start = this.start.toObject();
...@@ -5770,6 +5832,9 @@ export namespace ygopro { ...@@ -5770,6 +5832,9 @@ export namespace ygopro {
if (this.select_battle_cmd != null) { if (this.select_battle_cmd != null) {
data.select_battle_cmd = this.select_battle_cmd.toObject(); data.select_battle_cmd = this.select_battle_cmd.toObject();
} }
if (this.pos_change != null) {
data.pos_change = this.pos_change.toObject();
}
return data; return data;
} }
serialize(): Uint8Array; serialize(): Uint8Array;
...@@ -5828,6 +5893,10 @@ export namespace ygopro { ...@@ -5828,6 +5893,10 @@ export namespace ygopro {
writer.writeMessage(15, this.select_battle_cmd, () => writer.writeMessage(15, this.select_battle_cmd, () =>
this.select_battle_cmd.serialize(writer) this.select_battle_cmd.serialize(writer)
); );
if (this.has_pos_change)
writer.writeMessage(16, this.pos_change, () =>
this.pos_change.serialize(writer)
);
if (!w) return writer.getResultBuffer(); if (!w) return writer.getResultBuffer();
} }
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): StocGameMessage { static deserialize(bytes: Uint8Array | pb_1.BinaryReader): StocGameMessage {
...@@ -5952,6 +6021,14 @@ export namespace ygopro { ...@@ -5952,6 +6021,14 @@ export namespace ygopro {
StocGameMessage.MsgSelectBattleCmd.deserialize(reader)) StocGameMessage.MsgSelectBattleCmd.deserialize(reader))
); );
break; break;
case 16:
reader.readMessage(
message.pos_change,
() =>
(message.pos_change =
StocGameMessage.MsgPosChange.deserialize(reader))
);
break;
default: default:
reader.skipField(); reader.skipField();
} }
...@@ -9574,5 +9651,148 @@ export namespace ygopro { ...@@ -9574,5 +9651,148 @@ export namespace ygopro {
} }
} }
} }
export class MsgPosChange extends pb_1.Message {
#one_of_decls: number[][] = [];
constructor(
data?:
| any[]
| {
card_info?: CardInfo;
pre_position?: CardPosition;
cur_position?: CardPosition;
}
) {
super();
pb_1.Message.initialize(
this,
Array.isArray(data) ? data : [],
0,
-1,
[],
this.#one_of_decls
);
if (!Array.isArray(data) && typeof data == "object") {
if ("card_info" in data && data.card_info != undefined) {
this.card_info = data.card_info;
}
if ("pre_position" in data && data.pre_position != undefined) {
this.pre_position = data.pre_position;
}
if ("cur_position" in data && data.cur_position != undefined) {
this.cur_position = data.cur_position;
}
}
}
get card_info() {
return pb_1.Message.getWrapperField(this, CardInfo, 1) as CardInfo;
}
set card_info(value: CardInfo) {
pb_1.Message.setWrapperField(this, 1, value);
}
get has_card_info() {
return pb_1.Message.getField(this, 1) != null;
}
get pre_position() {
return pb_1.Message.getFieldWithDefault(
this,
2,
CardPosition.FACEUP_ATTACK
) as CardPosition;
}
set pre_position(value: CardPosition) {
pb_1.Message.setField(this, 2, value);
}
get cur_position() {
return pb_1.Message.getFieldWithDefault(
this,
3,
CardPosition.FACEUP_ATTACK
) as CardPosition;
}
set cur_position(value: CardPosition) {
pb_1.Message.setField(this, 3, value);
}
static fromObject(data: {
card_info?: ReturnType<typeof CardInfo.prototype.toObject>;
pre_position?: CardPosition;
cur_position?: CardPosition;
}): MsgPosChange {
const message = new MsgPosChange({});
if (data.card_info != null) {
message.card_info = CardInfo.fromObject(data.card_info);
}
if (data.pre_position != null) {
message.pre_position = data.pre_position;
}
if (data.cur_position != null) {
message.cur_position = data.cur_position;
}
return message;
}
toObject() {
const data: {
card_info?: ReturnType<typeof CardInfo.prototype.toObject>;
pre_position?: CardPosition;
cur_position?: CardPosition;
} = {};
if (this.card_info != null) {
data.card_info = this.card_info.toObject();
}
if (this.pre_position != null) {
data.pre_position = this.pre_position;
}
if (this.cur_position != null) {
data.cur_position = this.cur_position;
}
return data;
}
serialize(): Uint8Array;
serialize(w: pb_1.BinaryWriter): void;
serialize(w?: pb_1.BinaryWriter): Uint8Array | void {
const writer = w || new pb_1.BinaryWriter();
if (this.has_card_info)
writer.writeMessage(1, this.card_info, () =>
this.card_info.serialize(writer)
);
if (this.pre_position != CardPosition.FACEUP_ATTACK)
writer.writeEnum(2, this.pre_position);
if (this.cur_position != CardPosition.FACEUP_ATTACK)
writer.writeEnum(3, this.cur_position);
if (!w) return writer.getResultBuffer();
}
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): MsgPosChange {
const reader =
bytes instanceof pb_1.BinaryReader
? bytes
: new pb_1.BinaryReader(bytes),
message = new MsgPosChange();
while (reader.nextField()) {
if (reader.isEndGroup()) break;
switch (reader.getFieldNumber()) {
case 1:
reader.readMessage(
message.card_info,
() => (message.card_info = CardInfo.deserialize(reader))
);
break;
case 2:
message.pre_position = reader.readEnum();
break;
case 3:
message.cur_position = reader.readEnum();
break;
default:
reader.skipField();
}
}
return message;
}
serializeBinary(): Uint8Array {
return this.serialize();
}
static deserializeBinary(bytes: Uint8Array): MsgPosChange {
return MsgPosChange.deserialize(bytes);
}
}
} }
} }
...@@ -33,5 +33,22 @@ ...@@ -33,5 +33,22 @@
"repeatedType": "uint32" "repeatedType": "uint32"
} }
] ]
},
"53": {
"protoType": "pos_change",
"fields": [
{
"fieldName": "card_info",
"fieldType": "CardInfo"
},
{
"fieldName": "pre_position",
"fieldType": "CardPosition"
},
{
"fieldName": "cur_position",
"fieldType": "CardPosition"
}
]
} }
} }
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
import PenetrateData from "./penetrate.json"; import PenetrateData from "./penetrate.json";
import { BufferReader } from "../../bufferIO"; import { BufferReader } from "../../bufferIO";
import { ygopro } from "../../../idl/ocgcore"; import { ygopro } from "../../../idl/ocgcore";
import { numberToCardPosition } from "../../util";
type Constructor<T = any> = new (...args: any[]) => T; type Constructor<T = any> = new (...args: any[]) => T;
...@@ -11,10 +12,13 @@ const ReadFieldHandlerMap: Map<string, readFieldHandler> = new Map([ ...@@ -11,10 +12,13 @@ const ReadFieldHandlerMap: Map<string, readFieldHandler> = new Map([
["uint16", (reader) => reader.readUint16()], ["uint16", (reader) => reader.readUint16()],
["uint32", (reader) => reader.readUint32()], ["uint32", (reader) => reader.readUint32()],
["CardLocation", (reader) => reader.readCardLocation()], ["CardLocation", (reader) => reader.readCardLocation()],
["CardInfo", (reader) => reader.readCardInfo()],
["CardPosition", (reader) => numberToCardPosition(reader.readUint8())],
]); ]);
const MsgConstructorMap: Map<string, Constructor> = new Map([ const MsgConstructorMap: Map<string, Constructor> = new Map([
["move", ygopro.StocGameMessage.MsgMove as Constructor], ["move", ygopro.StocGameMessage.MsgMove as Constructor],
["shuffle_hand", ygopro.StocGameMessage.MsgShuffleHand], ["shuffle_hand", ygopro.StocGameMessage.MsgShuffleHand],
["pos_change", ygopro.StocGameMessage.MsgPosChange],
]); ]);
export interface penetrateType { export interface penetrateType {
......
...@@ -251,3 +251,14 @@ export function clearIdleInteractivities<T extends DuelFieldState>( ...@@ -251,3 +251,14 @@ export function clearIdleInteractivities<T extends DuelFieldState>(
}); });
} }
} }
export function setPosition<T extends DuelFieldState>(
state: T | undefined,
sequence: number,
position: ygopro.CardPosition
) {
const target = state?.inner.find((_, idx) => idx == sequence);
if (target && target.occupant) {
target.location.position = position;
}
}
...@@ -17,6 +17,7 @@ import { ...@@ -17,6 +17,7 @@ import {
Interactivity, Interactivity,
extendIdleInteractivities, extendIdleInteractivities,
clearIdleInteractivities, clearIdleInteractivities,
setPosition,
} from "./generic"; } from "./generic";
export interface MagicState extends DuelFieldState {} export interface MagicState extends DuelFieldState {}
...@@ -172,6 +173,23 @@ export const removeMagicImpl: CaseReducer< ...@@ -172,6 +173,23 @@ export const removeMagicImpl: CaseReducer<
removeOccupant(magics, action.payload.sequence); removeOccupant(magics, action.payload.sequence);
}; };
// 改变魔法表示形式
export const setMagicPositionImpl: CaseReducer<
DuelState,
PayloadAction<{
controler: number;
sequence: number;
position: ygopro.CardPosition;
}>
> = (state, action) => {
const controler = action.payload.controler;
const sequence = action.payload.sequence;
const position = action.payload.position;
const magics = judgeSelf(controler, state) ? state.meMagics : state.opMagics;
setPosition(magics, sequence, position);
};
export const selectMeMagics = (state: RootState) => export const selectMeMagics = (state: RootState) =>
state.duel.meMagics || { inner: [] }; state.duel.meMagics || { inner: [] };
export const selectOpMagics = (state: RootState) => export const selectOpMagics = (state: RootState) =>
......
...@@ -55,6 +55,7 @@ import { ...@@ -55,6 +55,7 @@ import {
addMonsterIdleInteractivitiesImpl, addMonsterIdleInteractivitiesImpl,
clearMonsterIdleInteractivitiesImpl, clearMonsterIdleInteractivitiesImpl,
removeMonsterImpl, removeMonsterImpl,
setMonsterPositionImpl,
monsterCase, monsterCase,
} from "./monstersSlice"; } from "./monstersSlice";
import { import {
...@@ -65,6 +66,7 @@ import { ...@@ -65,6 +66,7 @@ import {
addMagicIdleInteractivitiesImpl, addMagicIdleInteractivitiesImpl,
clearMagicIdleInteractivitiesImpl, clearMagicIdleInteractivitiesImpl,
removeMagicImpl, removeMagicImpl,
setMagicPositionImpl,
magicCase, magicCase,
} from "./magicSlice"; } from "./magicSlice";
import { CemeteryState, initCemeteryImpl, cemeteryCase } from "./cemeretySlice"; import { CemeteryState, initCemeteryImpl, cemeteryCase } from "./cemeretySlice";
...@@ -156,6 +158,7 @@ const duelSlice = createSlice({ ...@@ -156,6 +158,7 @@ const duelSlice = createSlice({
clearMonsterPlaceInteractivities: clearMonsterPlaceInteractivitiesImpl, clearMonsterPlaceInteractivities: clearMonsterPlaceInteractivitiesImpl,
addMonsterIdleInteractivities: addMonsterIdleInteractivitiesImpl, addMonsterIdleInteractivities: addMonsterIdleInteractivitiesImpl,
clearMonsterIdleInteractivities: clearMonsterIdleInteractivitiesImpl, clearMonsterIdleInteractivities: clearMonsterIdleInteractivitiesImpl,
setMonsterPosition: setMonsterPositionImpl,
removeMonster: removeMonsterImpl, removeMonster: removeMonsterImpl,
// 魔法陷阱区相关`Reducer` // 魔法陷阱区相关`Reducer`
...@@ -164,6 +167,7 @@ const duelSlice = createSlice({ ...@@ -164,6 +167,7 @@ const duelSlice = createSlice({
clearMagicPlaceInteractivities: clearMagicPlaceInteractivitiesImpl, clearMagicPlaceInteractivities: clearMagicPlaceInteractivitiesImpl,
addMagicIdleInteractivities: addMagicIdleInteractivitiesImpl, addMagicIdleInteractivities: addMagicIdleInteractivitiesImpl,
clearMagicIdleInteractivities: clearMagicIdleInteractivitiesImpl, clearMagicIdleInteractivities: clearMagicIdleInteractivitiesImpl,
setMagicPosition: setMagicPositionImpl,
removeMagic: removeMagicImpl, removeMagic: removeMagicImpl,
// 墓地相关`Reducer` // 墓地相关`Reducer`
...@@ -241,12 +245,14 @@ export const { ...@@ -241,12 +245,14 @@ export const {
clearMonsterPlaceInteractivities, clearMonsterPlaceInteractivities,
addMonsterIdleInteractivities, addMonsterIdleInteractivities,
clearMonsterIdleInteractivities, clearMonsterIdleInteractivities,
setMonsterPosition,
removeMonster, removeMonster,
initMagics, initMagics,
addMagicPlaceInteractivities, addMagicPlaceInteractivities,
clearMagicPlaceInteractivities, clearMagicPlaceInteractivities,
addMagicIdleInteractivities, addMagicIdleInteractivities,
clearMagicIdleInteractivities, clearMagicIdleInteractivities,
setMagicPosition,
removeMagic, removeMagic,
removeHand, removeHand,
initCemetery, initCemetery,
......
...@@ -17,6 +17,7 @@ import { ...@@ -17,6 +17,7 @@ import {
removeOccupant, removeOccupant,
extendIdleInteractivities, extendIdleInteractivities,
clearIdleInteractivities, clearIdleInteractivities,
setPosition,
} from "./generic"; } from "./generic";
export interface MonsterState extends DuelFieldState {} export interface MonsterState extends DuelFieldState {}
...@@ -184,6 +185,25 @@ export const removeMonsterImpl: CaseReducer< ...@@ -184,6 +185,25 @@ export const removeMonsterImpl: CaseReducer<
removeOccupant(monsters, action.payload.sequence); removeOccupant(monsters, action.payload.sequence);
}; };
// 改变怪兽表示形式
export const setMonsterPositionImpl: CaseReducer<
DuelState,
PayloadAction<{
controler: number;
sequence: number;
position: ygopro.CardPosition;
}>
> = (state, action) => {
const controler = action.payload.controler;
const sequence = action.payload.sequence;
const position = action.payload.position;
const monsters = judgeSelf(controler, state)
? state.meMonsters
: state.opMonsters;
setPosition(monsters, sequence, position);
};
export const selectMeMonsters = (state: RootState) => export const selectMeMonsters = (state: RootState) =>
state.duel.meMonsters || { inner: [] }; state.duel.meMonsters || { inner: [] };
export const selectOpMonsters = (state: RootState) => export const selectOpMonsters = (state: RootState) =>
......
...@@ -15,6 +15,7 @@ import onMsgSelectPosition from "./selectPosition"; ...@@ -15,6 +15,7 @@ import onMsgSelectPosition from "./selectPosition";
import onMsgSelectOption from "./selectOption"; import onMsgSelectOption from "./selectOption";
import onMsgShuffleHand from "./shuffleHand"; import onMsgShuffleHand from "./shuffleHand";
import onMsgSelectBattleCmd from "./selectBattleCmd"; import onMsgSelectBattleCmd from "./selectBattleCmd";
import onMsgPosChange from "./posChange";
export default function handleGameMsg(pb: ygopro.YgoStocMsg) { export default function handleGameMsg(pb: ygopro.YgoStocMsg) {
const dispatch = store.dispatch; const dispatch = store.dispatch;
...@@ -96,6 +97,11 @@ export default function handleGameMsg(pb: ygopro.YgoStocMsg) { ...@@ -96,6 +97,11 @@ export default function handleGameMsg(pb: ygopro.YgoStocMsg) {
break; break;
} }
case "pos_change": {
onMsgPosChange(msg.pos_change, dispatch);
break;
}
default: { default: {
break; break;
} }
......
import { ygopro } from "../../api/ocgcore/idl/ocgcore";
import { setMagicPosition, setMonsterPosition } from "../../reducers/duel/mod";
import { AppDispatch } from "../../store";
import MsgPosChange = ygopro.StocGameMessage.MsgPosChange;
export default (posChange: MsgPosChange, dispatch: AppDispatch) => {
const cardInfo = posChange.card_info;
switch (cardInfo.location) {
case ygopro.CardZone.MZONE: {
dispatch(
setMonsterPosition({
controler: cardInfo.controler,
sequence: cardInfo.sequence,
position: posChange.cur_position,
})
);
break;
}
case ygopro.CardZone.SZONE: {
dispatch(
setMagicPosition({
controler: cardInfo.controler,
sequence: cardInfo.sequence,
position: posChange.cur_position,
})
);
break;
}
default: {
console.log(`Unhandled zone ${cardInfo.location}`);
}
}
};
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