25
25
import com .bladecoder .engine .actions .Param .Type ;
26
26
import com .bladecoder .engine .model .Verb ;
27
27
import com .bladecoder .engine .model .VerbManager ;
28
+ import com .bladecoder .engine .util .ActionUtils ;
28
29
import com .bladecoder .engineeditor .Ctx ;
29
30
import com .bladecoder .engineeditor .ui .panels .EditModelDialog ;
30
31
import com .bladecoder .engineeditor .ui .panels .EditableSelectBox ;
34
35
import com .bladecoder .engineeditor .ui .panels .ScopePanel ;
35
36
36
37
public class EditVerbDialog extends EditModelDialog <VerbManager , Verb > {
37
- private static final String VERBS [] = { "lookat" , "pickup" , "talkto" , "use" ,
38
- "leave" , "action" , "enter" , "exit" };
38
+ private static final String VERBS [] = { "lookat" , "pickup" , "talkto" , "use" , "leave" , "action" , "enter" , "exit" };
39
39
40
40
private static final String SCENE_VERBS [] = { "init" , "test" };
41
-
41
+
42
42
private static final String DEFAULT_DESC = "Verbs are used to create the game interaction. Select or write the verb to create" ;
43
43
private static final String CUSTOM_VERB_DESC = "User defined verbs can be called\n from dialogs or inside other verbs using \n the 'run_verb' action" ;
44
44
@@ -50,59 +50,52 @@ public class EditVerbDialog extends EditModelDialog<VerbManager, Verb> {
50
50
"Called when the user clicks\n in an exit zone in scene" ,
51
51
"Called when the user clicks in the actor. Useful for one click actions. Doesn't show the verb menu." ,
52
52
"Called when the player enters\n in the object bounding box" ,
53
- "Called when the player exits\n the object bounding box" };
53
+ "Called when the player exits\n the object bounding box" };
54
+
55
+ private static final String SCENE_VERBS_INFO [] = { "Called every time\n that the scene is loaded" ,
56
+ "Called every time\n that the scene is loaded in test mode.\n 'test' verb is called before the 'init' verb" };
54
57
55
- private static final String SCENE_VERBS_INFO [] = {
56
- "Called every time\n that the scene is loaded" ,
57
- "Called every time\n that the scene is loaded in test mode.\n 'test' verb is called before the 'init' verb" };
58
-
59
58
private InputPanel id ;
60
59
private InputPanel state ;
61
60
private InputPanel target ;
62
61
private InputPanel icon ;
63
-
62
+
64
63
private String scope ;
65
64
66
- public EditVerbDialog (Skin skin , String scope , VerbManager parentElement ,
67
- Verb e ) {
65
+ public EditVerbDialog (Skin skin , String scope , VerbManager parentElement , Verb e ) {
68
66
super (skin );
69
-
67
+
70
68
this .scope = scope ;
71
-
72
- id = InputPanelFactory .createInputPanel (skin , "Verb ID" ,
73
- "Select the verb to create." , Type .EDITABLE_OPTION , true ,
74
- "" , ScopePanel .SCENE_SCOPE .equals (scope ) ? SCENE_VERBS : VERBS );
75
- state = InputPanelFactory .createInputPanel (skin , "State" ,
76
- "Select the state." );
77
- target = InputPanelFactory .createInputPanel (skin ,
78
- "Target BaseActor" ,
69
+
70
+ id = InputPanelFactory .createInputPanel (skin , "Verb ID" , "Select the verb to create." , Type .EDITABLE_OPTION ,
71
+ true , "" , ScopePanel .SCENE_SCOPE .equals (scope ) ? SCENE_VERBS : VERBS );
72
+ state = InputPanelFactory .createInputPanel (skin , "State" , "Select the state." );
73
+ target = InputPanelFactory .createInputPanel (skin , "Target BaseActor" ,
79
74
"Select the target actor id for the 'use' verb." );
80
-
81
- icon = InputPanelFactory .createInputPanel (skin ,
82
- "UI Icon" ,
75
+
76
+ icon = InputPanelFactory .createInputPanel (skin , "UI Icon" ,
83
77
"The icon that will be showed in the ui for selecting the verb." );
84
78
85
79
if (ScopePanel .SCENE_SCOPE .equals (scope ))
86
80
setInfo (SCENE_VERBS_INFO [0 ]);
87
81
else
88
82
setInfo (VERBS_INFO [0 ]);
89
83
90
- id .getField ()
91
- .addListener (new ChangeListener () {
84
+ id .getField ().addListener (new ChangeListener () {
85
+
86
+ @ Override
87
+ public void changed (ChangeEvent event , Actor actor ) {
88
+ updateDesc ();
89
+ }
92
90
93
- @ Override
94
- public void changed (ChangeEvent event , Actor actor ) {
95
- updateDesc ();
96
- }
91
+ });
97
92
98
- });
99
-
100
- ((EditableSelectBox <?>)id .getField ()).getInput ().setTextFieldListener (new TextFieldListener () {
93
+ ((EditableSelectBox <?>) id .getField ()).getInput ().setTextFieldListener (new TextFieldListener () {
101
94
@ Override
102
95
public void keyTyped (TextField actor , char c ) {
103
96
updateDesc ();
104
97
}
105
- });
98
+ });
106
99
107
100
init (parentElement , e , new InputPanel [] { id , state , target , icon });
108
101
@@ -114,25 +107,24 @@ public void keyTyped(TextField actor, char c) {
114
107
if (id .equals ("use" ))
115
108
setVisible (target , true );
116
109
}
117
-
110
+
118
111
updateDesc ();
119
112
}
120
-
113
+
121
114
private void updateDesc () {
122
- String idStr = (String ) id .getText ();
123
- int i = ((OptionsInputPanel ) id )
124
- .getSelectedIndex ();
115
+ String idStr = id .getText ();
116
+ int i = ((OptionsInputPanel ) id ).getSelectedIndex ();
125
117
126
- if (i == -1 ) {
127
- if (idStr != null && idStr .isEmpty ())
118
+ if (i == -1 ) {
119
+ if (idStr != null && idStr .isEmpty ())
128
120
setInfo (DEFAULT_DESC );
129
121
else
130
122
setInfo (CUSTOM_VERB_DESC );
131
123
} else {
132
124
if (ScopePanel .SCENE_SCOPE .equals (scope )) {
133
125
setInfo (SCENE_VERBS_INFO [i ]);
134
126
} else {
135
- setInfo (VERBS_INFO [i ]);
127
+ setInfo (VERBS_INFO [i ]);
136
128
}
137
129
}
138
130
@@ -141,26 +133,25 @@ private void updateDesc() {
141
133
else
142
134
setVisible (target , false );
143
135
144
- pack ();
145
- }
136
+ pack ();
137
+ }
146
138
147
139
@ Override
148
140
protected void inputsToModel (boolean create ) {
149
-
150
- if (create ) {
141
+
142
+ if (create ) {
151
143
e = new Verb ();
152
144
} else {
153
145
HashMap <String , Verb > verbs = parent .getVerbs ();
154
146
verbs .remove (e .getHashKey ());
155
147
}
156
-
148
+
157
149
e .setId (id .getText ());
158
150
e .setState (state .getText ());
159
151
e .setTarget (target .getText ());
160
152
e .setIcon (icon .getText ());
161
-
162
- parent .addVerb (e );
163
153
154
+ parent .addVerb (e );
164
155
165
156
// TODO UNDO OP
166
157
// UndoOp undoOp = new UndoAddElement(doc, e);
@@ -175,5 +166,28 @@ protected void modelToInputs() {
175
166
state .setText (e .getState ());
176
167
target .setText (e .getTarget ());
177
168
icon .setText (e .getIcon ());
178
- }
169
+ }
170
+
171
+ @ Override
172
+ protected boolean validateFields () {
173
+
174
+ if (!super .validateFields ())
175
+ return false ;
176
+
177
+ Verb verb = parent .getVerb (id .getText (), state .getText (), target .getText ());
178
+
179
+ if (verb == null )
180
+ return true ;
181
+
182
+ boolean sameParams = verb .getId ().equals (id .getText ())
183
+ && ActionUtils .compareNullStr (verb .getState (), state .getText ())
184
+ && ActionUtils .compareNullStr (verb .getTarget (), target .getText ());
185
+
186
+ if (sameParams && (e == null || verb != e )) {
187
+ id .setError (true );
188
+ return false ;
189
+ }
190
+
191
+ return true ;
192
+ }
179
193
}
0 commit comments