2011-06-18 00:13:39 +02:00
|
|
|
function DistanceBetweenEntities(first, second)
|
|
|
|
{
|
|
|
|
var cmpFirstPosition = Engine.QueryInterface(first, IID_Position);
|
|
|
|
if (!cmpFirstPosition || !cmpFirstPosition.IsInWorld())
|
|
|
|
return Infinity;
|
2014-01-24 20:51:00 +01:00
|
|
|
var firstPosition = cmpFirstPosition.GetPosition2D();
|
2011-06-18 00:13:39 +02:00
|
|
|
|
|
|
|
var cmpSecondPosition = Engine.QueryInterface(second, IID_Position);
|
|
|
|
if (!cmpSecondPosition || !cmpSecondPosition.IsInWorld())
|
|
|
|
return Infinity;
|
2014-01-24 20:51:00 +01:00
|
|
|
var secondPosition = cmpSecondPosition.GetPosition2D();
|
2011-06-18 00:13:39 +02:00
|
|
|
|
2014-01-24 20:51:00 +01:00
|
|
|
return firstPosition.distanceTo(secondPosition);
|
2011-06-18 00:13:39 +02:00
|
|
|
}
|
|
|
|
|
2011-06-26 04:03:36 +02:00
|
|
|
/**
|
|
|
|
* Returns entities ordered by decreasing priority
|
|
|
|
* Do not alter order when units have the same priority
|
|
|
|
*/
|
|
|
|
function SortEntitiesByPriority(ents)
|
|
|
|
{
|
|
|
|
// Priority list, weakers first
|
|
|
|
var types = ["Structure", "Worker"];
|
|
|
|
|
|
|
|
ents.sort(function (a, b) {
|
|
|
|
var cmpIdentityA = Engine.QueryInterface(a, IID_Identity);
|
|
|
|
var cmpIdentityB = Engine.QueryInterface(b, IID_Identity);
|
|
|
|
if (!cmpIdentityA || !cmpIdentityB)
|
|
|
|
return 0;
|
|
|
|
var classesA = cmpIdentityA.GetClassesList();
|
|
|
|
var classesB = cmpIdentityB.GetClassesList();
|
|
|
|
for each (var type in types)
|
|
|
|
{
|
|
|
|
var inA = classesA.indexOf(type) != -1;
|
|
|
|
var inB = classesB.indexOf(type) != -1;
|
|
|
|
if (inA && !inB)
|
|
|
|
return +1;
|
|
|
|
if (inB && !inA)
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2011-06-18 00:13:39 +02:00
|
|
|
Engine.RegisterGlobal("DistanceBetweenEntities", DistanceBetweenEntities);
|
2011-06-26 04:03:36 +02:00
|
|
|
Engine.RegisterGlobal("SortEntitiesByPriority", SortEntitiesByPriority);
|