1
2
3
4
5
6 package cz.cuni.amis.pogamut.udk.t3dgenerator.elements.kismet;
7
8 import cz.cuni.amis.pogamut.unreal.t3dgenerator.annotations.FieldName;
9 import cz.cuni.amis.pogamut.udk.t3dgenerator.datatypes.KismetInputLink;
10 import cz.cuni.amis.pogamut.udk.t3dgenerator.datatypes.KismetLinkTarget;
11 import cz.cuni.amis.pogamut.udk.t3dgenerator.datatypes.KismetOutputLink;
12 import cz.cuni.amis.pogamut.udk.t3dgenerator.datatypes.KismetVariableLink;
13 import cz.cuni.amis.pogamut.unreal.t3dgenerator.datatypes.UnrealReference;
14 import cz.cuni.amis.pogamut.udk.t3dgenerator.elements.AbstractObject;
15 import java.util.ArrayList;
16 import java.util.HashMap;
17 import java.util.List;
18 import java.util.Map;
19
20
21
22
23
24
25
26
27 public abstract class AbstractKismetObject extends AbstractObject {
28
29 private transient Map<String, Integer> inputLinksMapping = new HashMap<String, Integer>();
30 private transient Map<String, Integer> outputLinksMapping = new HashMap<String, Integer>();
31 private transient Map<String, Integer> variableLinksMapping = new HashMap<String, Integer>();
32
33 private List<KismetInputLink> inputLinks;
34 private List<KismetOutputLink> outputLinks;
35 private List<KismetVariableLink> variableLinks;
36
37 private Sequence parentSequence;
38
39 @FieldName("ObjInstanceVersion")
40 private Integer instanceVersion = 1;
41
42 private String objComment;
43 private Boolean outputObjCommentToScreen;
44 private Boolean suppressAutoComment;
45
46
47
48
49 private Integer objPosX;
50 private Integer objPosY;
51
52 public AbstractKismetObject(String className, String archetypeName, String[] inputLinkNames, String[] outputLinkNames, String[] variableLinkNames) {
53 super(className,archetypeName);
54 init(inputLinkNames, outputLinkNames, variableLinkNames);
55 }
56
57 public AbstractKismetObject(String className, UnrealReference archetype, String[] inputLinkNames, String[] outputLinkNames, String[] variableLinkNames) {
58 super(className, archetype);
59 init(inputLinkNames, outputLinkNames, variableLinkNames);
60 }
61
62 private void init(String[] inputLinkNames, String[] outputLinkNames,String[] variableLinkNames) {
63
64 inputLinks = new ArrayList<KismetInputLink>(inputLinkNames.length);
65 for(int i = 0; i < inputLinkNames.length; i++){
66 inputLinks.add(new KismetInputLink(null));
67 addInputLinkMapping(inputLinkNames[i], i);
68 }
69 outputLinks = new ArrayList<KismetOutputLink>(outputLinkNames.length);
70 for(int i = 0; i < outputLinkNames.length; i++){
71 outputLinks.add(new KismetOutputLink(new ArrayList<KismetLinkTarget>()));
72 addOutputLinkMapping(outputLinkNames[i], i);
73 }
74 variableLinks = new ArrayList<KismetVariableLink>(variableLinkNames.length);
75 for(int i = 0; i < variableLinkNames.length; i++){
76 variableLinks.add(new KismetVariableLink(new ArrayList<UnrealReference>()));
77 addVariableLinkMapping(variableLinkNames[i], i);
78 }
79 }
80
81 private void addInputLinkMapping(String linkName, int linkIndex){
82 if(linkIndex >= inputLinks.size()){
83 throw new IndexOutOfBoundsException("Link " + linkIndex + " not found");
84 }
85 inputLinksMapping.put(linkName, linkIndex);
86 }
87
88 private void addOutputLinkMapping(String linkName, int linkIndex){
89 if(linkIndex >= outputLinks.size()){
90 throw new IndexOutOfBoundsException("Link " + linkIndex + " not found");
91 }
92 outputLinksMapping.put(linkName, linkIndex);
93 }
94
95 private void addVariableLinkMapping(String linkName, int linkIndex){
96 if(linkIndex >= variableLinks.size()){
97 throw new IndexOutOfBoundsException("Link " + linkIndex + " not found");
98 }
99 variableLinksMapping.put(linkName, linkIndex);
100 }
101
102
103
104
105
106 protected void addVariableLink(String name){
107 int linkIndex = variableLinks.size();
108 variableLinks.add(new KismetVariableLink(new ArrayList<UnrealReference>()));
109 addVariableLinkMapping(name, linkIndex);
110 }
111
112 public void setInputLinkMappingByNamesList(String[] linkNames){
113 for(int i = 0; i < linkNames.length; i++){
114 addInputLinkMapping(linkNames[i], i);
115 }
116 }
117
118 public void setOutputLinkMappingByNamesList(String[] linkNames){
119 for(int i = 0; i < linkNames.length; i++){
120 addOutputLinkMapping(linkNames[i], i);
121 }
122 }
123
124 public void setVariableLinkMappingByNamesList(String[] linkNames){
125 for(int i = 0; i < linkNames.length; i++){
126 addVariableLinkMapping(linkNames[i], i);
127 }
128 }
129
130 public void setInputLink(String linkName, KismetInputLink link){
131 if(link == null){
132 throw new NullPointerException("Link cannot be set to null");
133 }
134 Integer linkIndex = inputLinksMapping.get(linkName);
135 if(linkIndex == null){
136 throw new IllegalArgumentException("Mapping for input link '" + linkName + "' not found.");
137 }
138 inputLinks.set(linkIndex,link);
139 }
140
141 public int getInputLinkIndex(String linkName){
142 return inputLinksMapping.get(linkName);
143 }
144
145 public KismetInputLink getInputLink(String linkName){
146 Integer linkIndex = inputLinksMapping.get(linkName);
147 if(linkIndex == null){
148 throw new IllegalArgumentException("Mapping for input link '" + linkName + "' not found.");
149 }
150 return inputLinks.get(linkIndex);
151 }
152
153 public void setIntputLinkTarget(String linkName, UnrealReference target){
154 getInputLink(linkName).setTarget(target);
155 }
156
157 public void setOutputLink(String linkName, KismetOutputLink link){
158 if(link == null){
159 throw new NullPointerException("Link cannot be set to null");
160 }
161 Integer linkIndex = outputLinksMapping.get(linkName);
162 if(linkIndex == null){
163 throw new IllegalArgumentException("Mapping for output link '" + linkName + "' not found.");
164 }
165 outputLinks.set(linkIndex,link);
166 }
167
168 public KismetOutputLink getOutputLink(String linkName){
169 Integer linkIndex = outputLinksMapping.get(linkName);
170 if(linkIndex == null){
171 throw new IllegalArgumentException("Mapping for output link '" + linkName + "' not found.");
172 }
173 return outputLinks.get(linkIndex);
174 }
175
176
177
178
179
180
181 public void addOutputLinkTarget(String linkName,KismetLinkTarget target){
182 getOutputLink(linkName).addLink(target);
183 }
184
185
186
187
188
189
190 public void setVariableLink(String linkName, KismetVariableLink link){
191 if(link == null){
192 throw new NullPointerException("Link cannot be set to null");
193 }
194 Integer linkIndex = variableLinksMapping.get(linkName);
195 if(linkIndex == null){
196 throw new IllegalArgumentException("Mapping for variable link '" + linkName + "' not found.");
197 }
198 variableLinks.set(linkIndex,link);
199 }
200
201 public void addVariableLinkTarget(String linkName, UnrealReference target){
202 getVariableLink(linkName).addLinkedVariable(target);
203 }
204
205 public KismetVariableLink getVariableLink(String linkName){
206 Integer linkIndex = variableLinksMapping.get(linkName);
207 if(linkIndex == null){
208 throw new IllegalArgumentException("Mapping for variable link '" + linkName + "' not found.");
209 }
210 return variableLinks.get(linkIndex);
211 }
212
213 public Integer getInstanceVersion() {
214 return instanceVersion;
215 }
216
217 public void setInstanceVersion(Integer instanceVersion) {
218 this.instanceVersion = instanceVersion;
219 }
220
221 public String getObjComment() {
222 return objComment;
223 }
224
225 public void setObjComment(String objComment) {
226 this.objComment = objComment;
227 }
228
229 public Integer getObjPosX() {
230 return objPosX;
231 }
232
233 public void setObjPosX(Integer objPosX) {
234 this.objPosX = objPosX;
235 }
236
237 public Integer getObjPosY() {
238 return objPosY;
239 }
240
241 public void setObjPosY(Integer objPosY) {
242 this.objPosY = objPosY;
243 }
244
245 public Boolean getOutputObjCommentToScreen() {
246 return outputObjCommentToScreen;
247 }
248
249 public void setOutputObjCommentToScreen(Boolean outputObjCommentToScreen) {
250 this.outputObjCommentToScreen = outputObjCommentToScreen;
251 }
252
253 public Sequence getParentSequence() {
254 return parentSequence;
255 }
256
257 public void setParentSequence(Sequence parentSequence) {
258 this.parentSequence = parentSequence;
259 }
260
261 public Boolean getSuppressAutoComment() {
262 return suppressAutoComment;
263 }
264
265 public void setSuppressAutoComment(Boolean suppressAutoComment) {
266 this.suppressAutoComment = suppressAutoComment;
267 }
268
269 public List<KismetInputLink> getInputLinks() {
270 return inputLinks;
271 }
272
273 public List<KismetOutputLink> getOutputLinks() {
274 return outputLinks;
275 }
276
277 public List<KismetVariableLink> getVariableLinks() {
278 return variableLinks;
279 }
280
281
282
283
284 public void setPositionForGUI(int x, int y){
285 setObjPosX(x);
286 setObjPosY(y);
287 }
288
289 }