Ticket #13: diffFormation-15-02-2010.patch
File diffFormation-15-02-2010.patch, 12.6 KB (added by , 13 years ago) |
---|
-
binaries/data/mods/public/gui/session/input.js
1063 1063 1064 1064 if (entity) 1065 1065 { 1066 submitChatDirectly(formationName); 1066 1067 console.write(formationName); 1068 1069 var selection = g_Selection.toList(); 1070 Engine.PostNetworkCommand({ 1071 "type": "formation", 1072 "entities": selection, 1073 "name": formationName 1074 }); 1075 1067 1076 } 1068 1077 } 1069 1078 -
binaries/data/mods/public/simulation/helpers/Commands.js
236 236 237 237 var cmpGarrisonHolder = Engine.QueryInterface(cmd.garrisonHolder, IID_GarrisonHolder); 238 238 cmpGarrisonHolder.UnloadAll(); 239 break; 240 241 case "formation": 242 var cmpUnitAI = GetFormationUnitAI(cmd.entities); 243 if(!cmpUnitAI) 244 break; 245 var cmpFormation = Engine.QueryInterface(cmpUnitAI.entity, IID_Formation); 246 if (!cmpFormation) 247 break; 248 cmpFormation.LoadFormation(cmd.name); 249 cmpFormation.MoveMembersIntoFormation(true); 239 250 break; 240 251 241 252 default: -
binaries/data/mods/public/simulation/components/Identity.js
68 68 "<value>Infantry</value>" + 69 69 "<value>Cavalry</value>" + 70 70 "<value>Ranged</value>" + 71 "<value>Melee</value>" + 71 72 "<value>Mechanical</value>" + 72 73 "<value>Ship</value>" + 73 74 "<value>Siege</value>" + -
binaries/data/mods/public/simulation/components/Formation.js
9 9 { 10 10 this.members = []; // entity IDs currently belonging to this formation 11 11 this.columnar = false; // whether we're travelling in column (vs box) formation 12 this.LoadFormation("Formation2"); // default pattern 12 13 }; 13 14 14 15 Formation.prototype.GetMemberCount = function() … … 114 115 var active = []; 115 116 var positions = []; 116 117 117 var types = { "Unknown": 0 }; // TODO: make this work so we put ranged behind infantry etc 118 var types = { "Ranged" : 0, 119 "Melee" : 0, 120 "Support" : 0, 121 "Hero" : 0, 122 "Unknown": 0 123 }; // TODO: make this work so we put ranged behind infantry etc 118 124 119 125 for each (var ent in this.members) 120 126 { … … 125 131 active.push(ent); 126 132 positions.push(cmpPosition.GetPosition()); 127 133 128 types["Unknown"] += 1; // TODO 134 var cmpIdentity = Engine.QueryInterface(ent, IID_Identity); 135 var classes = cmpIdentity.GetClassesList(); 136 for each (var cla in classes) 137 { 138 if(cla in types) 139 { 140 types[cla] += 1; 141 break; 142 } 143 } 129 144 } 130 145 131 146 // Work out whether this should be a column or box formation … … 147 162 148 163 for (var i = 0; i < active.length; ++i) 149 164 { 150 var offset = offsets[i];165 var assigned = false; 151 166 152 var cmpUnitAI = Engine.QueryInterface(active[i], IID_UnitAI); 153 cmpUnitAI.ReplaceOrder("FormationWalk", { 154 "target": this.entity, 155 "x": offset.x - avgoffset.x, 156 "z": offset.z - avgoffset.z 157 }); 167 var cmpIdentity = Engine.QueryInterface(active[i], IID_Identity); 168 var classes = cmpIdentity.GetClassesList(); 169 for(var j = 0; j < offsets.length && !assigned; ++j) 170 { 171 for each (var cla in classes) 172 { 173 if(!offsets[j].category || offsets[j].category.toString().indexOf(cla)!=-1) //ugly. TODO 174 { 175 var cmpUnitAI = Engine.QueryInterface(active[i], IID_UnitAI); 176 cmpUnitAI.ReplaceOrder("FormationWalk", { 177 "target": this.entity, 178 "x": offsets[j].x - avgoffset.x, 179 "z": offsets[j].z - avgoffset.z 180 }); 181 182 offsets.splice(j,1); 183 184 assigned = true; 185 break; 186 } 187 } 188 } 158 189 } 159 190 }; 160 191 … … 181 212 { 182 213 var separation = 4; // TODO: don't hardcode this 183 214 184 var count = types["Unknown"]; 215 var count = 0; 216 for( var t in types ) 217 count += types[t]; 185 218 186 219 // Choose a sensible width for the basic default formation 187 220 var cols; … … 193 226 else 194 227 cols = 3; 195 228 } 196 else197 {198 // Try to have at least 5 files (so batch training gives a single line),199 // and at most 8200 if (count <= 5)201 cols = count;202 if (count <= 10)203 cols = 5;204 else if (count <= 16)205 cols = Math.ceil(count / 2);206 else207 cols = 8;208 }209 229 210 var ranks = Math.ceil(count / cols);211 212 230 var offsets = []; 213 231 214 var left = count; 215 for (var r = 0; r < ranks; ++r) 232 if(columnar) 216 233 { 217 var n = Math.min(left, cols); 218 for (var c = 0; c < n; ++c) 234 var ranks = Math.ceil(count / cols); 235 var left = count; 236 for (var r = 0; r < ranks; ++r) 219 237 { 220 var x = ((n-1)/2 - c) * separation; 221 var z = -r * separation; 222 offsets.push({"x": x, "z": z}); 238 var n = Math.min(left, cols); 239 for (var c = 0; c < n; ++c) 240 { 241 var x = ((n-1)/2 - c) * separation; 242 var z = -r * separation; 243 offsets.push({"x": x, "z": z, "category" : undefined}); 244 } 245 left -= n; 223 246 } 224 left -= n;225 247 } 248 else 249 { 250 for (var s = 0; s < this.blob.slots.length; ++s) 251 { 252 offsets.push({"x" : this.blob.slots[s].c*this.blob.filespacing, 253 "z" :-this.blob.slots[s].l*this.blob.rankspacing, 254 "category" : this.blob.slots[s].category}); 255 } 256 } 226 257 227 258 return offsets; 228 259 }; … … 286 317 this.RemoveMembers([msg.entity]); 287 318 }; 288 319 320 // 321 Formation.prototype.LoadFormation = function(formationName) 322 { 323 var rawData = Engine.ReadJSONFile(formationName+".json"); 324 if (!rawData) 325 return; 326 327 var slots = []; 328 329 var maxorder = 0; 330 var ranks = rawData.Matrix.length; 331 for(var i=0; i<ranks; ++i) 332 { 333 var files = rawData.Matrix[i].length; 334 for(var j=0; j<files; ++j) 335 { 336 var order = rawData.Matrix[i][j].order-1; 337 var category = rawData.Matrix[i][j].category; 338 slots[order] = {"l":i,"c":j,"category":category}; 339 if (order>maxorder) 340 maxorder = order; 341 } 342 } 343 344 for (var e = 1; e <= maxorder; ++e) 345 { 346 if(!slots[e]) 347 return; 348 } 349 350 var dataFormation = {}; 351 dataFormation.name = formationName; 352 dataFormation.slots = slots; 353 dataFormation.rankspacing = rawData.rankspacing; 354 dataFormation.filespacing = rawData.filespacing; 355 356 this.blob = dataFormation; 357 } 358 359 289 360 Engine.RegisterComponentType(IID_Formation, "Formation", Formation); -
binaries/data/mods/public/simulation/data/Formation1.json
1 { 2 "FormationLongName":"Formation1", 3 "rankspacing" : 3.0, 4 "filespacing" : 3.0, 5 "Matrix": 6 [ 7 [ 8 {"order":1, "category":["Melee"]}, 9 {"order":10, "category":["Melee"]}, 10 {"order":26, "category":["Melee"]}, 11 {"order":2, "category":["Melee"]}, 12 {"order":27, "category":["Melee"]}, 13 {"order":11, "category":["Melee"]}, 14 {"order":3, "category":["Melee"]} 15 ], 16 [ 17 {"order":12, "category":["Melee"]}, 18 {"order":18, "category":["Melee","Ranged"]}, 19 {"order":34, "category":["Melee","Ranged"]}, 20 {"order":22, "category":["Melee","Ranged"]}, 21 {"order":35, "category":["Melee","Ranged"]}, 22 {"order":19, "category":["Melee","Ranged"]}, 23 {"order":13, "category":["Melee"]} 24 ], 25 [ 26 {"order":28, "category":["Melee"]}, 27 {"order":36, "category":["Melee","Ranged"]}, 28 {"order":42, "category":["Melee","Ranged", "Support"]}, 29 {"order":46, "category":["Melee","Ranged", "Support"]}, 30 {"order":43, "category":["Melee","Ranged", "Support"]}, 31 {"order":37, "category":["Melee","Ranged"]}, 32 {"order":29, "category":["Melee"]} 33 ], 34 [ 35 {"order":4, "category":["Melee"]}, 36 {"order":23, "category":["Melee","Ranged"]}, 37 {"order":47, "category":["Melee","Ranged", "Support"]}, 38 {"order":5}, 39 {"order":48, "category":["Melee","Ranged", "Support"]}, 40 {"order":24, "category":["Melee","Ranged"]}, 41 {"order":6, "category":["Melee"]} 42 ], 43 [ 44 {"order":30, "category":["Melee"]}, 45 {"order":38, "category":["Melee","Ranged"]}, 46 {"order":44, "category":["Melee","Ranged", "Support"]}, 47 {"order":49, "category":["Melee","Ranged", "Support"]}, 48 {"order":45, "category":["Melee","Ranged", "Support"]}, 49 {"order":39, "category":["Melee","Ranged"]}, 50 {"order":31, "category":["Melee"]} 51 ], 52 [ 53 {"order":14, "category":["Melee"]}, 54 {"order":20, "category":["Melee","Ranged"]}, 55 {"order":40, "category":["Melee","Ranged"]}, 56 {"order":25, "category":["Melee","Ranged"]}, 57 {"order":41, "category":["Melee","Ranged"]}, 58 {"order":21, "category":["Melee","Ranged"]}, 59 {"order":15, "category":["Melee"]} 60 ], 61 [ 62 {"order":7, "category":["Melee"]}, 63 {"order":16, "category":["Melee"]}, 64 {"order":32, "category":["Melee"]}, 65 {"order":8, "category":["Melee"]}, 66 {"order":33, "category":["Melee"]}, 67 {"order":17, "category":["Melee"]}, 68 {"order":9, "category":["Melee"]} 69 ] 70 71 ] 72 } -
binaries/data/mods/public/simulation/data/Formation2.json
Property changes on: binaries/data/mods/public/simulation/data/Formation1.json ___________________________________________________________________ Added: svn:executable + *
1 { 2 "FormationLongName":"Default formation", 3 "rankspacing" : 4.0, 4 "filespacing" : 4.0, 5 "Matrix": 6 [ 7 [ 8 {"order":1}, 9 {"order":2}, 10 {"order":3}, 11 {"order":4}, 12 {"order":5} 13 ], 14 [ 15 {"order":10}, 16 {"order":8}, 17 {"order":6}, 18 {"order":7}, 19 {"order":9} 20 ], 21 [ 22 {"order":15}, 23 {"order":13}, 24 {"order":11}, 25 {"order":12}, 26 {"order":14} 27 ], 28 [ 29 {"order":20}, 30 {"order":18}, 31 {"order":16}, 32 {"order":17}, 33 {"order":19} 34 ] 35 ] 36 } -
binaries/data/mods/public/simulation/data/Formation3.json
Property changes on: binaries/data/mods/public/simulation/data/Formation2.json ___________________________________________________________________ Added: svn:executable + *
1 { 2 "FormationLongName":"Formation3", 3 "rankspacing" : 5.0, 4 "filespacing" : 5.0, 5 "Matrix": 6 [ 7 [ 8 {"order":1, "category":["Melee","Ranged"]}, 9 {"order":2}, 10 {"order":3}, 11 {"order":4} 12 ], 13 [ 14 {"order":8}, 15 {"order":5}, 16 {"order":6}, 17 {"order":7} 18 ], 19 [ 20 {"order":12}, 21 {"order":9}, 22 {"order":10}, 23 {"order":11} 24 ] 25 ] 26 } -
binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged.xml
Property changes on: binaries/data/mods/public/simulation/data/Formation3.json ___________________________________________________________________ Added: svn:executable + *
2 2 <Entity parent="template_unit_infantry"> 3 3 <Identity> 4 4 <GenericName>Ranged</GenericName> 5 <Classes datatype="tokens">Ranged Infantry</Classes> 5 6 </Identity> 6 7 <Health> 7 8 <Max>90</Max> -
binaries/data/mods/public/simulation/templates/template_unit_infantry_melee.xml
2 2 <Entity parent="template_unit_infantry"> 3 3 <Identity> 4 4 <GenericName>Melee Infantry</GenericName> 5 <Classes datatype="tokens">Melee Infantry</Classes> 5 6 </Identity> 6 7 <Health> 7 8 <Max>100</Max>