1- import { Plus , RefreshCcw } from "lucide-react" ;
1+ import { Angry , MousePointerClick , RefreshCcw , Smile , Tags , Telescope } from "lucide-react" ;
22import React from "react" ;
33import IconButton from "../components/IconButton" ;
44import { StageManager } from "../core/stage/stageManager/StageManager" ;
@@ -10,6 +10,10 @@ import { cn } from "../utils/cn";
1010 */
1111export default function TagPanel ( { open = false , className = "" } : { open : boolean ; className : string } ) {
1212 const [ tagNameList , setTagNameList ] = React . useState < { tagName : string ; uuid : string } [ ] > ( [ ] ) ;
13+ // 是否开启允许滑动移动摄像机
14+ const [ isMouseEnterMoveCameraAble , setIsMouseEnterMoveCameraAble ] = React . useState ( false ) ;
15+ // 是否开启透视
16+ const [ isPerspective , setIsPerspective ] = React . useState ( false ) ;
1317
1418 function refreshTagNameList ( ) {
1519 setTagNameList ( StageManager . refreshTags ( ) ) ;
@@ -19,13 +23,23 @@ export default function TagPanel({ open = false, className = "" }: { open: boole
1923 refreshTagNameList ( ) ;
2024 } , [ open ] ) ;
2125
22- const handleClickTag = ( tagUUID : string ) => {
26+ const handleMoveCameraToTag = ( tagUUID : string ) => {
2327 return ( ) => {
2428 // 跳转到对应位置
2529 StageManager . moveToTag ( tagUUID ) ;
2630 } ;
2731 } ;
2832
33+ const handleMouseEnterTag = ( tagUUID : string ) => {
34+ return ( ) => {
35+ if ( isMouseEnterMoveCameraAble ) {
36+ StageManager . moveToTag ( tagUUID ) ;
37+ } else {
38+ console . log ( "禁止滑动" ) ;
39+ }
40+ } ;
41+ } ;
42+
2943 const handleClickAddTag = ( ) => {
3044 // TODO: 这里可能缺少一个是否有选中的实体的检测
3145 StageManager . addTagBySelected ( ) ;
@@ -35,23 +49,40 @@ export default function TagPanel({ open = false, className = "" }: { open: boole
3549 return (
3650 < div
3751 className = { cn (
38- "bg-panel-bg fixed -left-64 top-16 flex h-full w-64 flex-col rounded-md p-4 transition-all" ,
52+ "fixed -left-64 top-16 flex h-full w-64 flex-col rounded-md p-4 pb-20 transition-all" ,
3953 {
4054 "left-0" : open ,
55+ "bg-panel-bg" : ! isPerspective ,
4156 } ,
4257 className ,
4358 ) }
4459 >
4560 < div className = "flex justify-center gap-2" >
4661 < IconButton
4762 onClick = { handleClickAddTag }
48- tooltip = "添加选中的文本节点成为标签 ,如果选中了已经是标签的节点,则会取消标签状态 "
63+ tooltip = "选中节点并添加到标签 ,如果选中了已经是标签的节点,则会移出标签 "
4964 >
50- < Plus />
65+ < Tags />
5166 </ IconButton >
5267 < IconButton onClick = { refreshTagNameList } tooltip = "如果舞台上的标签发生变更但此处未更新,可以手动刷新" >
5368 < RefreshCcw />
5469 </ IconButton >
70+ < IconButton
71+ onClick = { ( ) => {
72+ setIsMouseEnterMoveCameraAble ( ! isMouseEnterMoveCameraAble ) ;
73+ } }
74+ tooltip = { isMouseEnterMoveCameraAble ? "快速瞭望模式" : "点击跳转模式" }
75+ >
76+ { isMouseEnterMoveCameraAble ? < Telescope /> : < MousePointerClick /> }
77+ </ IconButton >
78+ < IconButton
79+ onClick = { ( ) => {
80+ setIsPerspective ( ! isPerspective ) ;
81+ } }
82+ tooltip = { isPerspective ? "透视已开启" : "开启透视眼" }
83+ >
84+ { isPerspective ? < Angry /> : < Smile /> }
85+ </ IconButton >
5586 </ div >
5687
5788 { /* 标签列表 */ }
@@ -63,13 +94,14 @@ export default function TagPanel({ open = false, className = "" }: { open: boole
6394 </ p >
6495 </ div >
6596 ) : (
66- < div className = "mt-2 flex-1 flex-col justify-center overflow-y-auto" >
97+ < div className = "mt-2 flex-1 flex-col justify-center overflow-y-auto p-2 " >
6798 { tagNameList . map ( ( tag ) => {
6899 return (
69100 < div
70101 key = { tag . uuid }
71102 className = "text-select-option-text hover:text-select-option-hover-text cursor-pointer text-center hover:underline"
72- onClick = { handleClickTag ( tag . uuid ) }
103+ onClick = { handleMoveCameraToTag ( tag . uuid ) }
104+ onMouseEnter = { handleMouseEnterTag ( tag . uuid ) }
73105 >
74106 { tag . tagName }
75107 </ div >
0 commit comments