11import { Dialog } from "../../../../components/dialog" ;
2+ import { getEnterKey } from "../../../../utils/keyboardFunctions" ;
23import { Vector } from "../../../dataStruct/Vector" ;
34import { EdgeRenderer } from "../../../render/canvas2d/entityRenderer/edge/EdgeRenderer" ;
45import { Camera } from "../../../stage/Camera" ;
56import { Stage } from "../../../stage/Stage" ;
67import { StageManager } from "../../../stage/stageManager/StageManager" ;
78import { ConnectableEntity } from "../../../stage/stageObject/abstract/ConnectableEntity" ;
9+ import { EntityDashTipEffect } from "../../feedbackService/effectEngine/concrete/EntityDashTipEffect" ;
10+ import { EntityShakeEffect } from "../../feedbackService/effectEngine/concrete/EntityShakeEffect" ;
11+ import { TextRiseEffect } from "../../feedbackService/effectEngine/concrete/TextRiseEffect" ;
12+ import { Settings } from "../../Settings" ;
813import { editTextNode } from "../controller/concrete/utilsControl" ;
914import { KeyboardOnlyDirectionController } from "./keyboardOnlyDirectionController" ;
1015import { NewTargetLocationSelector } from "./newTargetLocationSelector" ;
@@ -23,9 +28,14 @@ export namespace KeyboardOnlyEngine {
2328 return targetLocationController . location ;
2429 }
2530
31+ let textNodeStartEditMode : Settings . Settings [ "textNodeStartEditMode" ] = "enter" ;
32+
2633 export function init ( ) {
2734 bindKeyEvents ( ) ;
2835 targetLocationController . init ( ) ;
36+ Settings . watch ( "textNodeStartEditMode" , ( value ) => {
37+ textNodeStartEditMode = value ;
38+ } ) ;
2939 }
3040
3141 export function logicTick ( ) {
@@ -43,12 +53,19 @@ export namespace KeyboardOnlyEngine {
4353 // createStart();
4454 // }
4555 } else if ( event . key === "Enter" ) {
46- // 这个还必须在down的位置上,因为在up上会导致无限触发
47- const selectedNode = StageManager . getTextNodes ( ) . find ( ( node ) => node . isSelected ) ;
48- if ( ! selectedNode ) return ;
49- event . preventDefault ( ) ; // 这个prevent必须开启,否则会立刻在刚创建的输入框里输入一个换行符。
50- // 编辑节点
51- editTextNode ( selectedNode , false ) ;
56+ const enterKeyDetail = getEnterKey ( event ) ;
57+ if ( textNodeStartEditMode === enterKeyDetail ) {
58+ // 这个还必须在down的位置上,因为在up上会导致无限触发
59+ const selectedNode = StageManager . getTextNodes ( ) . find ( ( node ) => node . isSelected ) ;
60+ if ( ! selectedNode ) return ;
61+ event . preventDefault ( ) ; // 这个prevent必须开启,否则会立刻在刚创建的输入框里输入一个换行符。
62+ addSuccessEffect ( ) ;
63+ // 编辑节点
64+ editTextNode ( selectedNode , false ) ;
65+ } else {
66+ // 用户可能记错了快捷键
67+ addFailEffect ( ) ;
68+ }
5269 } else if ( event . key === "F2" ) {
5370 const selectedNode = StageManager . getTextNodes ( ) . find ( ( node ) => node . isSelected ) ;
5471 if ( ! selectedNode ) return ;
@@ -67,6 +84,20 @@ export namespace KeyboardOnlyEngine {
6784 // });
6885 }
6986
87+ function addSuccessEffect ( ) {
88+ const textNodes = StageManager . getTextNodes ( ) . filter ( ( textNode ) => textNode . isSelected ) ;
89+ for ( const textNode of textNodes ) {
90+ Stage . effectMachine . addEffect ( new EntityDashTipEffect ( 50 , textNode . collisionBox . getRectangle ( ) ) ) ;
91+ }
92+ }
93+
94+ function addFailEffect ( ) {
95+ const textNodes = StageManager . getTextNodes ( ) . filter ( ( textNode ) => textNode . isSelected ) ;
96+ for ( const textNode of textNodes ) {
97+ Stage . effectMachine . addEffect ( EntityShakeEffect . fromEntity ( textNode ) ) ;
98+ }
99+ Stage . effectMachine . addEffect ( TextRiseEffect . default ( "您可能记错了节点进入编辑状态的控制键设置" ) ) ;
100+ }
70101 /**
71102 * 是否达到了按下Tab键的前置条件
72103 */
0 commit comments