Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
N
Neos
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
1
Issues
1
List
Boards
Labels
Service Desk
Milestones
Merge Requests
2
Merge Requests
2
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
Neos
Commits
91b5fbdc
Commit
91b5fbdc
authored
Jun 08, 2023
by
timel
1
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactor: merge playStore to matStore
parent
23c357fa
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
74 additions
and
87 deletions
+74
-87
src/service/mora/deckCount.ts
src/service/mora/deckCount.ts
+3
-3
src/service/room/hsPlayerChange.ts
src/service/room/hsPlayerChange.ts
+6
-8
src/service/room/hsPlayerEnter.ts
src/service/room/hsPlayerEnter.ts
+2
-2
src/service/room/hsWatchChange.ts
src/service/room/hsWatchChange.ts
+2
-2
src/service/room/typeChange.ts
src/service/room/typeChange.ts
+9
-9
src/stores/index.ts
src/stores/index.ts
+0
-3
src/stores/matStore/store.ts
src/stores/matStore/store.ts
+19
-1
src/stores/matStore/types.ts
src/stores/matStore/types.ts
+26
-4
src/stores/playerStore.ts
src/stores/playerStore.ts
+0
-44
src/ui/Duel/PlayMat/LifeBar/index.tsx
src/ui/Duel/PlayMat/LifeBar/index.tsx
+4
-8
src/ui/WaitRoom.tsx
src/ui/WaitRoom.tsx
+3
-3
No files found.
src/service/mora/deckCount.ts
View file @
91b5fbdc
import
{
ygopro
}
from
"
@/api
"
;
import
{
ygopro
}
from
"
@/api
"
;
import
{
player
Store
}
from
"
@/stores
"
;
import
{
mat
Store
}
from
"
@/stores
"
;
// FIXME: player0 不一定是当前玩家
// FIXME: player0 不一定是当前玩家
export
default
function
handleDeckCount
(
pb
:
ygopro
.
YgoStocMsg
)
{
export
default
function
handleDeckCount
(
pb
:
ygopro
.
YgoStocMsg
)
{
const
deckCount
=
pb
.
stoc_deck_count
;
const
deckCount
=
pb
.
stoc_deck_count
;
playerStore
.
player0
.
deckInfo
=
{
matStore
.
player
[
0
]
.
deckInfo
=
{
mainCnt
:
deckCount
.
meMain
,
mainCnt
:
deckCount
.
meMain
,
extraCnt
:
deckCount
.
meExtra
,
extraCnt
:
deckCount
.
meExtra
,
sideCnt
:
deckCount
.
meSide
,
sideCnt
:
deckCount
.
meSide
,
};
};
playerStore
.
player1
.
deckInfo
=
{
matStore
.
player
[
1
]
.
deckInfo
=
{
mainCnt
:
deckCount
.
opMain
,
mainCnt
:
deckCount
.
opMain
,
extraCnt
:
deckCount
.
opExtra
,
extraCnt
:
deckCount
.
opExtra
,
sideCnt
:
deckCount
.
opSide
,
sideCnt
:
deckCount
.
opSide
,
...
...
src/service/room/hsPlayerChange.ts
View file @
91b5fbdc
import
{
ygopro
}
from
"
@/api
"
;
import
{
ygopro
}
from
"
@/api
"
;
import
{
player
Store
}
from
"
@/stores
"
;
import
{
mat
Store
}
from
"
@/stores
"
;
const
READY_STATE
=
"
ready
"
;
const
READY_STATE
=
"
ready
"
;
const
NO_READY_STATE
=
"
not ready
"
;
const
NO_READY_STATE
=
"
not ready
"
;
...
@@ -29,24 +29,22 @@ export default function handleHsPlayerChange(pb: ygopro.YgoStocMsg) {
...
@@ -29,24 +29,22 @@ export default function handleHsPlayerChange(pb: ygopro.YgoStocMsg) {
break
;
break
;
}
}
case
ygopro
.
StocHsPlayerChange
.
State
.
READY
:
{
case
ygopro
.
StocHsPlayerChange
.
State
.
READY
:
{
playerStore
[
change
.
pos
==
0
?
"
player0
"
:
"
player1
"
].
state
=
matStore
.
player
[
change
.
pos
===
0
?
0
:
1
].
state
=
READY_STATE
;
READY_STATE
;
break
;
break
;
}
}
case
ygopro
.
StocHsPlayerChange
.
State
.
NO_READY
:
{
case
ygopro
.
StocHsPlayerChange
.
State
.
NO_READY
:
{
playerStore
[
change
.
pos
==
0
?
"
player0
"
:
"
player1
"
].
state
=
matStore
.
player
[
change
.
pos
===
0
?
0
:
1
].
state
=
NO_READY_STATE
;
NO_READY_STATE
;
break
;
break
;
}
}
case
ygopro
.
StocHsPlayerChange
.
State
.
LEAVE
:
{
case
ygopro
.
StocHsPlayerChange
.
State
.
LEAVE
:
{
playerStore
[
change
.
pos
==
0
?
"
player0
"
:
"
player1
"
]
=
{};
matStore
.
player
[
change
.
pos
===
0
?
0
:
1
]
=
{};
break
;
break
;
}
}
case
ygopro
.
StocHsPlayerChange
.
State
.
TO_OBSERVER
:
{
case
ygopro
.
StocHsPlayerChange
.
State
.
TO_OBSERVER
:
{
playerStore
[
change
.
pos
==
0
?
"
player0
"
:
"
player1
"
]
=
{};
// todo: 有没有必要?
matStore
.
player
[
change
.
pos
===
0
?
0
:
1
]
=
{};
// todo: 有没有必要?
player
Store
.
observerCount
+=
1
;
mat
Store
.
observerCount
+=
1
;
break
;
break
;
}
}
default
:
{
default
:
{
...
...
src/service/room/hsPlayerEnter.ts
View file @
91b5fbdc
import
{
ygopro
}
from
"
@/api
"
;
import
{
ygopro
}
from
"
@/api
"
;
import
{
player
Store
}
from
"
@/stores
"
;
import
{
mat
Store
}
from
"
@/stores
"
;
export
default
function
handleHsPlayerEnter
(
pb
:
ygopro
.
YgoStocMsg
)
{
export
default
function
handleHsPlayerEnter
(
pb
:
ygopro
.
YgoStocMsg
)
{
const
name
=
pb
.
stoc_hs_player_enter
.
name
;
const
name
=
pb
.
stoc_hs_player_enter
.
name
;
...
@@ -8,6 +8,6 @@ export default function handleHsPlayerEnter(pb: ygopro.YgoStocMsg) {
...
@@ -8,6 +8,6 @@ export default function handleHsPlayerEnter(pb: ygopro.YgoStocMsg) {
if
(
pos
>
1
)
{
if
(
pos
>
1
)
{
console
.
log
(
"
Currently only supported 2v2 mode.
"
);
console
.
log
(
"
Currently only supported 2v2 mode.
"
);
}
else
{
}
else
{
playerStore
[
pos
==
0
?
"
player0
"
:
"
player1
"
].
name
=
name
;
matStore
.
player
[
pos
===
0
?
0
:
1
].
name
=
name
;
}
}
}
}
src/service/room/hsWatchChange.ts
View file @
91b5fbdc
import
{
ygopro
}
from
"
@/api
"
;
import
{
ygopro
}
from
"
@/api
"
;
import
{
player
Store
}
from
"
@/stores
"
;
import
{
mat
Store
}
from
"
@/stores
"
;
export
default
function
handleHsWatchChange
(
pb
:
ygopro
.
YgoStocMsg
)
{
export
default
function
handleHsWatchChange
(
pb
:
ygopro
.
YgoStocMsg
)
{
const
count
=
pb
.
stoc_hs_watch_change
.
count
;
const
count
=
pb
.
stoc_hs_watch_change
.
count
;
player
Store
.
observerCount
=
count
;
mat
Store
.
observerCount
=
count
;
}
}
src/service/room/typeChange.ts
View file @
91b5fbdc
import
{
ygopro
}
from
"
@/api
"
;
import
{
ygopro
}
from
"
@/api
"
;
import
{
player
Store
}
from
"
@/stores
"
;
import
{
mat
Store
}
from
"
@/stores
"
;
const
NO_READY_STATE
=
"
not ready
"
;
const
NO_READY_STATE
=
"
not ready
"
;
...
@@ -7,21 +7,21 @@ export default function handleTypeChange(pb: ygopro.YgoStocMsg) {
...
@@ -7,21 +7,21 @@ export default function handleTypeChange(pb: ygopro.YgoStocMsg) {
const
selfType
=
pb
.
stoc_type_change
.
self_type
;
const
selfType
=
pb
.
stoc_type_change
.
self_type
;
const
assertHost
=
pb
.
stoc_type_change
.
is_host
;
const
assertHost
=
pb
.
stoc_type_change
.
is_host
;
player
Store
.
isHost
=
assertHost
;
mat
Store
.
isHost
=
assertHost
;
player
Store
.
selfType
=
selfType
;
mat
Store
.
selfType
=
selfType
;
if
(
assertHost
)
{
if
(
assertHost
)
{
switch
(
selfType
)
{
switch
(
selfType
)
{
case
ygopro
.
StocTypeChange
.
SelfType
.
PLAYER1
:
{
case
ygopro
.
StocTypeChange
.
SelfType
.
PLAYER1
:
{
playerStore
.
player0
.
isHost
=
true
;
matStore
.
player
[
0
]
.
isHost
=
true
;
playerStore
.
player1
.
isHost
=
false
;
matStore
.
player
[
1
]
.
isHost
=
false
;
playerStore
.
player0
.
state
=
NO_READY_STATE
;
matStore
.
player
[
0
]
.
state
=
NO_READY_STATE
;
break
;
break
;
}
}
case
ygopro
.
StocTypeChange
.
SelfType
.
PLAYER2
:
{
case
ygopro
.
StocTypeChange
.
SelfType
.
PLAYER2
:
{
playerStore
.
player0
.
isHost
=
false
;
matStore
.
player
[
0
]
.
isHost
=
false
;
playerStore
.
player1
.
isHost
=
true
;
matStore
.
player
[
1
]
.
isHost
=
true
;
playerStore
.
player1
.
state
=
NO_READY_STATE
;
matStore
.
player
[
1
]
.
state
=
NO_READY_STATE
;
break
;
break
;
}
}
default
:
{
default
:
{
...
...
src/stores/index.ts
View file @
91b5fbdc
...
@@ -6,7 +6,6 @@ export * from "./messageStore";
...
@@ -6,7 +6,6 @@ export * from "./messageStore";
export
*
from
"
./methods
"
;
export
*
from
"
./methods
"
;
export
*
from
"
./moraStore
"
;
export
*
from
"
./moraStore
"
;
export
*
from
"
./placeStore
"
;
export
*
from
"
./placeStore
"
;
export
*
from
"
./playerStore
"
;
import
{
proxy
}
from
"
valtio
"
;
import
{
proxy
}
from
"
valtio
"
;
import
{
devtools
}
from
"
valtio/utils
"
;
import
{
devtools
}
from
"
valtio/utils
"
;
...
@@ -18,10 +17,8 @@ import { matStore } from "./matStore";
...
@@ -18,10 +17,8 @@ import { matStore } from "./matStore";
import
{
messageStore
}
from
"
./messageStore
"
;
import
{
messageStore
}
from
"
./messageStore
"
;
import
{
moraStore
}
from
"
./moraStore
"
;
import
{
moraStore
}
from
"
./moraStore
"
;
import
{
placeStore
}
from
"
./placeStore
"
;
import
{
placeStore
}
from
"
./placeStore
"
;
import
{
playerStore
}
from
"
./playerStore
"
;
export
const
store
=
proxy
({
export
const
store
=
proxy
({
playerStore
,
chatStore
,
chatStore
,
joinStore
,
joinStore
,
moraStore
,
moraStore
,
...
...
src/stores/matStore/store.ts
View file @
91b5fbdc
...
@@ -5,6 +5,8 @@ import { ygopro } from "@/api";
...
@@ -5,6 +5,8 @@ import { ygopro } from "@/api";
import
type
{
InitInfo
,
MatState
}
from
"
./types
"
;
import
type
{
InitInfo
,
MatState
}
from
"
./types
"
;
import
SelfType
=
ygopro
.
StocTypeChange
.
SelfType
;
/**
/**
* 根据controller判断是自己还是对方。
* 根据controller判断是自己还是对方。
* 这个无需export,尽量逻辑收拢在store内部。
* 这个无需export,尽量逻辑收拢在store内部。
...
@@ -14,7 +16,6 @@ const getWhom = (controller: number): "me" | "op" =>
...
@@ -14,7 +16,6 @@ const getWhom = (controller: number): "me" | "op" =>
/**
/**
* 根据自己的先后手判断是否是自己
* 根据自己的先后手判断是否是自己
* 原本名字叫judgeSelf
*/
*/
export
const
isMe
=
(
controller
:
number
):
boolean
=>
{
export
const
isMe
=
(
controller
:
number
):
boolean
=>
{
switch
(
matStore
.
selfType
)
{
switch
(
matStore
.
selfType
)
{
...
@@ -83,6 +84,23 @@ export const matStore: MatState = proxy<MatState>({
...
@@ -83,6 +84,23 @@ export const matStore: MatState = proxy<MatState>({
result
:
ygopro
.
StocGameMessage
.
MsgWin
.
ActionType
.
UNKNOWN
,
result
:
ygopro
.
StocGameMessage
.
MsgWin
.
ActionType
.
UNKNOWN
,
waiting
:
false
,
waiting
:
false
,
unimplemented
:
0
,
unimplemented
:
0
,
// 从playerStore搬过来的
player
:
{
0
:
{},
1
:
{},
me
:
()
=>
matStore
.
selfType
===
SelfType
.
PLAYER1
?
matStore
.
player
[
0
]
:
matStore
.
player
[
1
],
op
:
()
=>
matStore
.
selfType
===
SelfType
.
PLAYER1
?
matStore
.
player
[
1
]
:
matStore
.
player
[
0
],
},
observerCount
:
0
,
isHost
:
false
,
// methods
// methods
isMe
,
isMe
,
});
});
...
...
src/stores/matStore/types.ts
View file @
91b5fbdc
import
type
{
ygopro
}
from
"
@/api
"
;
import
type
{
ygopro
}
from
"
@/api
"
;
// >>> play mat state >>>
export
interface
BothSide
<
T
>
{
export
interface
BothSide
<
T
>
{
me
:
T
;
me
:
T
;
op
:
T
;
op
:
T
;
...
@@ -10,7 +8,9 @@ export interface BothSide<T> {
...
@@ -10,7 +8,9 @@ export interface BothSide<T> {
}
}
export
interface
MatState
{
export
interface
MatState
{
selfType
:
number
;
selfType
:
|
ygopro
.
StocTypeChange
.
SelfType
|
ygopro
.
StocGameMessage
.
MsgStart
.
PlayerType
;
// 为了适配`start.ts`的`PlayerType`
initInfo
:
BothSide
<
InitInfo
>
&
{
initInfo
:
BothSide
<
InitInfo
>
&
{
set
:
(
controller
:
number
,
obj
:
Partial
<
InitInfo
>
)
=>
void
;
set
:
(
controller
:
number
,
obj
:
Partial
<
InitInfo
>
)
=>
void
;
...
@@ -34,6 +34,16 @@ export interface MatState {
...
@@ -34,6 +34,16 @@ export interface MatState {
unimplemented
:
number
;
// 未处理的`Message`
unimplemented
:
number
;
// 未处理的`Message`
player
:
{
0
:
Player
;
1
:
Player
;
me
:
()
=>
Player
;
op
:
()
=>
Player
;
};
observerCount
:
number
;
isHost
:
boolean
;
/** 根据自己的先后手判断是否是自己 */
/** 根据自己的先后手判断是否是自己 */
isMe
:
(
player
:
number
)
=>
boolean
;
isMe
:
(
player
:
number
)
=>
boolean
;
}
}
...
@@ -91,4 +101,16 @@ export interface PhaseState {
...
@@ -91,4 +101,16 @@ export interface PhaseState {
enableM2
:
boolean
;
// 允许进入M2阶段
enableM2
:
boolean
;
// 允许进入M2阶段
enableEp
:
boolean
;
// 允许回合结束
enableEp
:
boolean
;
// 允许回合结束
}
}
// <<< play mat state <<<
export
interface
Player
{
name
?:
string
;
state
?:
string
;
isHost
?:
boolean
;
deckInfo
?:
deckInfo
;
}
export
interface
deckInfo
{
mainCnt
:
number
;
extraCnt
:
number
;
sideCnt
:
number
;
}
src/stores/playerStore.ts
deleted
100644 → 0
View file @
23c357fa
/* eslint valtio/avoid-this-in-proxy: 0 */
import
{
proxy
}
from
"
valtio
"
;
import
{
ygopro
}
from
"
@/api
"
;
import
SelfType
=
ygopro
.
StocTypeChange
.
SelfType
;
export
interface
Player
{
name
?:
string
;
state
?:
string
;
isHost
?:
boolean
;
deckInfo
?:
deckInfo
;
}
export
interface
deckInfo
{
mainCnt
:
number
;
extraCnt
:
number
;
sideCnt
:
number
;
}
export
interface
PlayerState
{
player0
:
Player
;
player1
:
Player
;
observerCount
:
number
;
isHost
:
boolean
;
selfType
:
SelfType
;
getMePlayer
:
()
=>
Player
;
getOpPlayer
:
()
=>
Player
;
}
export
const
playerStore
=
proxy
<
PlayerState
>
({
player0
:
{},
player1
:
{},
observerCount
:
0
,
isHost
:
false
,
selfType
:
SelfType
.
UNKNOWN
,
getMePlayer
()
{
if
(
this
.
selfType
==
SelfType
.
PLAYER1
)
return
this
.
player0
;
return
this
.
player1
;
},
getOpPlayer
()
{
if
(
this
.
selfType
==
SelfType
.
PLAYER1
)
return
this
.
player1
;
return
this
.
player0
;
},
});
src/ui/Duel/PlayMat/LifeBar/index.tsx
View file @
91b5fbdc
...
@@ -3,20 +3,16 @@ import "./index.scss";
...
@@ -3,20 +3,16 @@ import "./index.scss";
import
React
from
"
react
"
;
import
React
from
"
react
"
;
import
{
useSnapshot
}
from
"
valtio
"
;
import
{
useSnapshot
}
from
"
valtio
"
;
import
{
matStore
,
playerStore
}
from
"
@/stores
"
;
import
{
matStore
}
from
"
@/stores
"
;
export
const
LifeBar
:
React
.
FC
=
()
=>
{
export
const
LifeBar
:
React
.
FC
=
()
=>
{
const
snap
=
useSnapshot
(
matStore
.
initInfo
);
const
snap
=
useSnapshot
(
matStore
.
initInfo
);
const
snapPlayer
=
useSnapshot
(
playerStore
);
const
snapPlayer
=
useSnapshot
(
matStore
.
player
);
return
(
return
(
<
div
id=
"life-bar-container"
>
<
div
id=
"life-bar-container"
>
<
div
id=
"life-bar"
>
{
`${snapPlayer.getMePlayer().name}: ${
<
div
id=
"life-bar"
>
{
`${snapPlayer.me().name}: ${snap.me.life}`
}
</
div
>
snap.me.life
<
div
id=
"life-bar"
>
{
`${snapPlayer.op().name}: ${snap.op.life}`
}
</
div
>
}`
}
</
div
>
<
div
id=
"life-bar"
>
{
`${snapPlayer.getOpPlayer().name}: ${
snap.op.life
}`
}
</
div
>
</
div
>
</
div
>
);
);
};
};
src/ui/WaitRoom.tsx
View file @
91b5fbdc
...
@@ -91,9 +91,9 @@ const WaitRoom = () => {
...
@@ -91,9 +91,9 @@ const WaitRoom = () => {
const
joined
=
snap
.
joinStore
.
value
;
const
joined
=
snap
.
joinStore
.
value
;
const
chat
=
snap
.
chatStore
.
message
;
const
chat
=
snap
.
chatStore
.
message
;
const
isHost
=
snap
.
player
Store
.
isHost
;
const
isHost
=
snap
.
mat
Store
.
isHost
;
const
player0
=
snap
.
playerStore
.
player0
;
const
player0
=
snap
.
matStore
.
player
[
0
]
;
const
player1
=
snap
.
playerStore
.
player1
;
const
player1
=
snap
.
matStore
.
player
[
1
]
;
const
duelStart
=
snap
.
moraStore
.
duelStart
;
const
duelStart
=
snap
.
moraStore
.
duelStart
;
// FIXME: 这些数据应该从`store`中获取
// FIXME: 这些数据应该从`store`中获取
...
...
Chunchi Che
@SKTT1Ryze
mentioned in commit
e8698018
·
Jun 08, 2023
mentioned in commit
e8698018
mentioned in commit e86980180cf33a2d96ee84a4f8a30de9b436a0bc
Toggle commit list
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment