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
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
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
love_飞影
Neos
Commits
d75636f9
Commit
d75636f9
authored
Dec 21, 2022
by
Chunchi Che
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feat/ui/antd' into 'main'
Feat/ui/antd See merge request
mycard/Neos!42
parents
47fab419
93156113
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
143 additions
and
9 deletions
+143
-9
src/reducers/duel/mod.ts
src/reducers/duel/mod.ts
+22
-1
src/reducers/duel/modal.ts
src/reducers/duel/modal.ts
+50
-0
src/ui/Duel/simpleDuel/cardModal.tsx
src/ui/Duel/simpleDuel/cardModal.tsx
+43
-0
src/ui/Duel/simpleDuel/hands.ts
src/ui/Duel/simpleDuel/hands.ts
+19
-3
src/ui/Duel/simpleDuel/mod.tsx
src/ui/Duel/simpleDuel/mod.tsx
+9
-5
No files found.
src/reducers/duel/mod.ts
View file @
d75636f9
...
...
@@ -15,6 +15,12 @@ import {
import
{
newTurnImpl
}
from
"
./turnSlice
"
;
import
{
newPhaseImpl
}
from
"
./phaseSlice
"
;
import
{
RootState
}
from
"
../../store
"
;
import
{
ModalState
,
setCardModalIsOpenImpl
,
setCardModalTextImpl
,
setCardModalImgUrlImpl
,
}
from
"
./modal
"
;
export
interface
DuelState
{
selfType
?:
number
;
...
...
@@ -26,9 +32,16 @@ export interface DuelState {
opTimeLimit
?:
TimeLimit
;
// 对手的计时
currentPlayer
?:
number
;
// 当前的操作方
currentPhase
?:
string
;
// 当前的阶段
// UI相关
modalState
:
ModalState
;
}
const
initialState
:
DuelState
=
{};
const
initialState
:
DuelState
=
{
modalState
:
{
cardModal
:
{
isOpen
:
false
},
},
};
const
duelSlice
=
createSlice
({
name
:
"
duel
"
,
...
...
@@ -45,6 +58,11 @@ const duelSlice = createSlice({
// 手牌相关`Reducer`
clearHandsInteractivity
:
clearHandsInteractivityImpl
,
addHandsInteractivity
:
addHandsInteractivityImpl
,
// UI相关`Reducer`
setCardModalIsOpen
:
setCardModalIsOpenImpl
,
setCardModalText
:
setCardModalTextImpl
,
setCardModalImgUrl
:
setCardModalImgUrlImpl
,
},
extraReducers
(
builder
)
{
handsCase
(
builder
);
...
...
@@ -59,6 +77,9 @@ export const {
clearHandsInteractivity
,
addHandsInteractivity
,
updateTimeLimit
,
setCardModalIsOpen
,
setCardModalText
,
setCardModalImgUrl
,
}
=
duelSlice
.
actions
;
export
const
selectDuelHsStart
=
(
state
:
RootState
)
=>
{
return
state
.
duel
.
meInitInfo
!=
null
;
...
...
src/reducers/duel/modal.ts
0 → 100644
View file @
d75636f9
import
{
PayloadAction
,
CaseReducer
}
from
"
@reduxjs/toolkit
"
;
import
{
RootState
}
from
"
../../store
"
;
import
{
DuelState
}
from
"
./mod
"
;
export
interface
ModalState
{
// 卡牌弹窗
cardModal
:
{
isOpen
:
boolean
;
name
?:
string
;
desc
?:
string
;
imgUrl
?:
string
;
};
}
// 更新卡牌弹窗打开状态
export
const
setCardModalIsOpenImpl
:
CaseReducer
<
DuelState
,
PayloadAction
<
boolean
>
>
=
(
state
,
action
)
=>
{
state
.
modalState
.
cardModal
.
isOpen
=
action
.
payload
;
};
// 更新卡牌弹窗文本
export
const
setCardModalTextImpl
:
CaseReducer
<
DuelState
,
PayloadAction
<
[
string
?,
string
?]
>
>
=
(
state
,
action
)
=>
{
const
name
=
action
.
payload
[
0
];
const
desc
=
action
.
payload
[
1
];
state
.
modalState
.
cardModal
.
name
=
name
;
state
.
modalState
.
cardModal
.
desc
=
desc
;
};
// 更新卡牌弹窗图片Url
export
const
setCardModalImgUrlImpl
:
CaseReducer
<
DuelState
,
PayloadAction
<
string
>
>
=
(
state
,
action
)
=>
{
state
.
modalState
.
cardModal
.
imgUrl
=
action
.
payload
;
};
export
const
selectCardModalIsOpen
=
(
state
:
RootState
)
=>
state
.
duel
.
modalState
.
cardModal
.
isOpen
;
export
const
selectCardModalName
=
(
state
:
RootState
)
=>
state
.
duel
.
modalState
.
cardModal
.
name
;
export
const
selectCardModalDesc
=
(
state
:
RootState
)
=>
state
.
duel
.
modalState
.
cardModal
.
desc
;
export
const
selectCardModalImgUrl
=
(
state
:
RootState
)
=>
state
.
duel
.
modalState
.
cardModal
.
imgUrl
;
src/ui/Duel/simpleDuel/cardModal.tsx
0 → 100644
View file @
d75636f9
import
React
from
"
react
"
;
import
{
useAppSelector
}
from
"
../../../hook
"
;
import
{
store
}
from
"
../../../store
"
;
import
{
selectCardModalIsOpen
,
selectCardModalName
,
selectCardModalDesc
,
selectCardModalImgUrl
,
}
from
"
../../../reducers/duel/modal
"
;
import
{
setCardModalIsOpen
}
from
"
../../../reducers/duel/mod
"
;
import
{
Modal
,
Card
}
from
"
antd
"
;
const
{
Meta
}
=
Card
;
const
CARD_WIDTH
=
240
;
const
CardModal
=
()
=>
{
const
dispatch
=
store
.
dispatch
;
const
isOpen
=
useAppSelector
(
selectCardModalIsOpen
);
const
name
=
useAppSelector
(
selectCardModalName
);
const
desc
=
useAppSelector
(
selectCardModalDesc
);
const
imgUrl
=
useAppSelector
(
selectCardModalImgUrl
);
const
handleOkOrCancel
=
()
=>
{
dispatch
(
setCardModalIsOpen
(
false
));
};
return
(
<>
<
Modal
open=
{
isOpen
}
onOk=
{
handleOkOrCancel
}
onCancel=
{
handleOkOrCancel
}
>
<
Card
hoverable
style=
{
{
width
:
CARD_WIDTH
}
}
cover=
{
<
img
alt=
{
name
}
src=
{
imgUrl
}
/>
}
>
<
Meta
title=
{
name
}
/>
<
p
>
{
desc
}
</
p
>
</
Card
>
</
Modal
>
</>
);
};
export
default
CardModal
;
src/ui/Duel/simpleDuel/hands.ts
View file @
d75636f9
...
...
@@ -3,6 +3,12 @@ import * as BABYLON_GUI from "@babylonjs/gui";
import
*
as
CONFIG
from
"
../../../config/ui
"
;
import
{
Card
,
InteractType
}
from
"
../../../reducers/duel/util
"
;
import
{
sendSelectIdleCmdResponse
}
from
"
../../../api/ocgcore/ocgHelper
"
;
import
{
setCardModalImgUrl
,
setCardModalIsOpen
,
setCardModalText
,
}
from
"
../../../reducers/duel/mod
"
;
import
{
store
}
from
"
../../../store
"
;
export
default
(
hands
:
Card
[],
scene
:
BABYLON
.
Scene
)
=>
{
const
handShape
=
CONFIG
.
HandShape
();
...
...
@@ -101,17 +107,27 @@ function setupHandInteractivity(
function
setupHandAction
(
mesh
:
BABYLON
.
Mesh
,
state
:
Card
,
handIdx
:
number
,
_
handIdx
:
number
,
scene
:
BABYLON
.
Scene
)
{
const
dispatch
=
store
.
dispatch
;
mesh
.
actionManager
=
new
BABYLON
.
ActionManager
(
scene
);
mesh
.
actionManager
.
isRecursive
=
true
;
// 监听点击事件
mesh
.
actionManager
.
registerAction
(
new
BABYLON
.
ExecuteCodeAction
(
BABYLON
.
ActionManager
.
OnPickTrigger
,
(
event
)
=>
{
console
.
log
(
`<Click>hand:
${
handIdx
}
`
,
"
card:
"
,
state
,
"
event:
"
,
event
);
(
_event
)
=>
{
dispatch
(
setCardModalText
([
state
.
meta
.
text
.
name
,
state
.
meta
.
text
.
desc
])
);
dispatch
(
setCardModalImgUrl
(
`https://cdn02.moecube.com:444/images/ygopro-images-zh-CN/
${
state
.
meta
.
id
}
.jpg`
)
);
dispatch
(
setCardModalIsOpen
(
true
));
}
)
);
...
...
src/ui/Duel/simpleDuel/mod.tsx
View file @
d75636f9
...
...
@@ -20,6 +20,7 @@ import * as CONFIG from "../../../config/ui";
import
{
Card
}
from
"
../../../reducers/duel/util
"
;
import
{
selectCurrentPlayer
}
from
"
../../../reducers/duel/turnSlice
"
;
import
{
selectCurrentPhase
}
from
"
../../../reducers/duel/phaseSlice
"
;
import
CardModal
from
"
./cardModal
"
;
// CONFIG
...
...
@@ -136,11 +137,14 @@ export default class SimpleDuelPlateImpl implements IDuelPlate {
},
[]);
return
(
<
canvas
width=
{
window
.
innerWidth
}
height=
{
window
.
innerHeight
}
ref=
{
canvasRef
}
/>
<>
<
canvas
width=
{
window
.
innerWidth
}
height=
{
window
.
innerHeight
}
ref=
{
canvasRef
}
/>
<
CardModal
/>
</>
);
}
...
...
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