11import { Rectangle } from "../../../../dataStruct/shape/Rectangle" ;
2+ import { Vector } from "../../../../dataStruct/Vector" ;
3+ import { MouseLocation } from "../../../../service/controlService/MouseLocation" ;
24import { StageStyleManager } from "../../../../service/feedbackService/stageStyle/StageStyleManager" ;
35import { Camera } from "../../../../stage/Camera" ;
46import { PortalNode } from "../../../../stage/stageObject/entity/PortalNode" ;
7+ import { CurveRenderer } from "../../basicRenderer/curveRenderer" ;
58import { ShapeRenderer } from "../../basicRenderer/shapeRenderer" ;
69import { TextRenderer } from "../../basicRenderer/textRenderer" ;
710import { Renderer } from "../../renderer" ;
811import { CollisionBoxRenderer } from "../CollisionBoxRenderer" ;
912import { EntityRenderer } from "../EntityRenderer" ;
1013
1114export namespace PortalNodeRenderer {
15+ /**
16+ * 主渲染
17+ * @param portalNode
18+ */
1219 export function render ( portalNode : PortalNode ) {
1320 const leftTopLocation = portalNode . location ;
21+ const rightTopLocation = portalNode . collisionBox . getRectangle ( ) . rightTop ;
22+ // 绘制矩形
1423 ShapeRenderer . renderRect (
1524 new Rectangle ( leftTopLocation , portalNode . size ) . transformWorld2View ( ) ,
1625 portalNode . color ,
1726 StageStyleManager . currentStyle . StageObjectBorderColor ,
1827 2 * Camera . currentScale ,
1928 Renderer . NODE_ROUNDED_RADIUS * Camera . currentScale ,
2029 ) ;
30+ // 虚线 1
31+ CurveRenderer . renderDashedLine (
32+ Renderer . transformWorld2View ( leftTopLocation . add ( new Vector ( 0 , PortalNode . TITLE_LINE_Y ) ) ) ,
33+ Renderer . transformWorld2View ( rightTopLocation . add ( new Vector ( 0 , PortalNode . TITLE_LINE_Y ) ) ) ,
34+ StageStyleManager . currentStyle . StageObjectBorderColor ,
35+ 1 * Camera . currentScale ,
36+ 10 * Camera . currentScale ,
37+ ) ;
38+ // 绘制标题,和节点文字大小保持一致
39+ TextRenderer . renderText (
40+ portalNode . title ,
41+ Renderer . transformWorld2View ( leftTopLocation . add ( Vector . same ( Renderer . NODE_PADDING ) ) ) ,
42+ Renderer . FONT_SIZE * Camera . currentScale ,
43+ StageStyleManager . currentStyle . StageObjectBorderColor ,
44+ ) ;
45+ // 虚线 2
46+ CurveRenderer . renderDashedLine (
47+ Renderer . transformWorld2View ( leftTopLocation . add ( new Vector ( 0 , PortalNode . PATH_LINE_Y ) ) ) ,
48+ Renderer . transformWorld2View ( rightTopLocation . add ( new Vector ( 0 , PortalNode . PATH_LINE_Y ) ) ) ,
49+ StageStyleManager . currentStyle . StageObjectBorderColor ,
50+ 1 * Camera . currentScale ,
51+ 5 * Camera . currentScale ,
52+ ) ;
53+ // 绘制文件路径文字
54+ TextRenderer . renderText (
55+ `path: "${ portalNode . portalFilePath } "` ,
56+ Renderer . transformWorld2View (
57+ leftTopLocation . add ( new Vector ( 0 , PortalNode . TITLE_LINE_Y ) ) . add ( Vector . same ( Renderer . NODE_PADDING ) ) ,
58+ ) ,
59+ Renderer . FONT_SIZE_DETAILS * Camera . currentScale ,
60+ StageStyleManager . currentStyle . StageObjectBorderColor ,
61+ ) ;
62+
63+ // 选中状态
2164 if ( portalNode . isSelected ) {
2265 // 在外面增加一个框
2366 CollisionBoxRenderer . render ( portalNode . collisionBox , StageStyleManager . currentStyle . CollideBoxSelectedColor ) ;
2467 }
68+ // 绘制实体详情
2569 EntityRenderer . renderEntityDetails ( portalNode ) ;
2670
2771 // 绘制debug信息
@@ -34,5 +78,75 @@ export namespace PortalNodeRenderer {
3478 StageStyleManager . currentStyle . DetailsDebugTextColor ,
3579 ) ;
3680 }
81+ // 提示施工中
82+ TextRenderer . renderTextFromCenter (
83+ "预览功能还在开发中" ,
84+ Renderer . transformWorld2View ( portalNode . rectangle . center ) ,
85+ Renderer . FONT_SIZE_DETAILS * Camera . currentScale ,
86+ StageStyleManager . currentStyle . DetailsDebugTextColor ,
87+ ) ;
88+
89+ renderHoverState ( portalNode ) ;
90+ }
91+
92+ function renderHoverState ( portalNode : PortalNode ) {
93+ const mouseLocation = Renderer . transformView2World ( MouseLocation . vector ( ) ) ;
94+ const bodyRectangle = portalNode . collisionBox . getRectangle ( ) ;
95+ if ( bodyRectangle . isPointIn ( mouseLocation ) ) {
96+ const titleRectangle = portalNode . titleRectangleArea ( ) ;
97+ const pathRectangle = portalNode . pathRectangleArea ( ) ;
98+ if ( titleRectangle . isPointIn ( mouseLocation ) ) {
99+ // 鼠标在标题区域
100+ // 绘制矩形
101+ ShapeRenderer . renderRect (
102+ titleRectangle . transformWorld2View ( ) ,
103+ StageStyleManager . currentStyle . CollideBoxPreSelectedColor ,
104+ StageStyleManager . currentStyle . CollideBoxSelectedColor ,
105+ 2 * Camera . currentScale ,
106+ Renderer . NODE_ROUNDED_RADIUS * Camera . currentScale ,
107+ ) ;
108+ // 绘制悬浮提示文字
109+ TextRenderer . renderText (
110+ "双击编辑标题" ,
111+ Renderer . transformWorld2View ( bodyRectangle . leftBottom . add ( Vector . same ( Renderer . NODE_PADDING ) ) ) ,
112+ Renderer . FONT_SIZE_DETAILS * Camera . currentScale ,
113+ StageStyleManager . currentStyle . DetailsDebugTextColor ,
114+ ) ;
115+ } else if ( pathRectangle . isPointIn ( mouseLocation ) ) {
116+ // 鼠标在路径区域
117+ // 绘制矩形
118+ ShapeRenderer . renderRect (
119+ pathRectangle . transformWorld2View ( ) ,
120+ StageStyleManager . currentStyle . CollideBoxPreSelectedColor ,
121+ StageStyleManager . currentStyle . CollideBoxSelectedColor ,
122+ 2 * Camera . currentScale ,
123+ Renderer . NODE_ROUNDED_RADIUS * Camera . currentScale ,
124+ ) ;
125+ // 绘制悬浮提示文字
126+ TextRenderer . renderText (
127+ "双击编辑相对路径" ,
128+ Renderer . transformWorld2View ( bodyRectangle . leftBottom . add ( Vector . same ( Renderer . NODE_PADDING ) ) ) ,
129+ Renderer . FONT_SIZE_DETAILS * Camera . currentScale ,
130+ StageStyleManager . currentStyle . DetailsDebugTextColor ,
131+ ) ;
132+ } else {
133+ // 鼠标在节点区域
134+ // 绘制矩形
135+ ShapeRenderer . renderRect (
136+ bodyRectangle . transformWorld2View ( ) ,
137+ StageStyleManager . currentStyle . CollideBoxPreSelectedColor ,
138+ StageStyleManager . currentStyle . CollideBoxSelectedColor ,
139+ 2 * Camera . currentScale ,
140+ Renderer . NODE_ROUNDED_RADIUS * Camera . currentScale ,
141+ ) ;
142+ // 绘制悬浮提示文字
143+ TextRenderer . renderText (
144+ "双击传送" ,
145+ Renderer . transformWorld2View ( bodyRectangle . leftBottom . add ( Vector . same ( Renderer . NODE_PADDING ) ) ) ,
146+ Renderer . FONT_SIZE_DETAILS * Camera . currentScale ,
147+ StageStyleManager . currentStyle . DetailsDebugTextColor ,
148+ ) ;
149+ }
150+ }
37151 }
38152}
0 commit comments