2010-08-17 15:37:46 +02:00
|
|
|
const GEOLOGY = "geology";
|
|
|
|
const FLORA = "flora";
|
|
|
|
const FAUNA = "fauna";
|
|
|
|
const SPECIAL = "special";
|
|
|
|
|
|
|
|
const GAIA = "Gaia"
|
|
|
|
const CART = "Cart";
|
|
|
|
const CELT = "Celt";
|
|
|
|
const HELE = "Hele";
|
|
|
|
const IBER = "Iber";
|
|
|
|
const PERS = "Pers";
|
|
|
|
const ROME = "Rome";
|
|
|
|
|
|
|
|
const CARTHAGINIANS = "Carthaginians";
|
|
|
|
const ROMANS = "Romans";
|
|
|
|
const HELLENES = "Hellenes";
|
|
|
|
const CELTS = "Celts";
|
|
|
|
const PERSIANS = "Persians";
|
|
|
|
const IBERIANS = "Iberians";
|
|
|
|
|
2010-08-12 17:44:03 +02:00
|
|
|
//-------------------------------- -------------------------------- --------------------------------
|
|
|
|
// Utility functions
|
|
|
|
//-------------------------------- -------------------------------- --------------------------------
|
|
|
|
|
|
|
|
function toTitleCase(string)
|
|
|
|
{
|
|
|
|
if (string.length > 0)
|
|
|
|
string = string.charAt(0).toUpperCase() + string.substring(1, string.length).toLowerCase();
|
|
|
|
return string;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Get the basic player data
|
|
|
|
function getPlayerData(playerAssignments)
|
|
|
|
{
|
|
|
|
var players = [];
|
|
|
|
|
|
|
|
var simState = Engine.GuiInterfaceCall("GetSimulationState");
|
|
|
|
if (!simState)
|
|
|
|
return players;
|
|
|
|
|
|
|
|
for (var i = 0; i < simState.players.length; i++)
|
|
|
|
{
|
|
|
|
var playerState = simState.players[i];
|
|
|
|
|
|
|
|
var name = playerState.name;
|
|
|
|
var civ = playerState.civ;
|
|
|
|
var color = {"r": 255, "g": 255, "b": 255, "a": 255};
|
|
|
|
color.r = playerState.color["r"]*255;
|
|
|
|
color.g = playerState.color["g"]*255;
|
|
|
|
color.b = playerState.color["b"]*255;
|
|
|
|
color.a = playerState.color["a"]*255;
|
|
|
|
|
|
|
|
var player = {"name": name, "civ": civ, "color": color};
|
|
|
|
players.push(player);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (playerAssignments)
|
|
|
|
{
|
|
|
|
for each (var playerAssignment in playerAssignments)
|
|
|
|
{
|
2010-08-14 21:45:22 +02:00
|
|
|
if (players[playerAssignment.player])
|
|
|
|
players[playerAssignment.player].name = playerAssignment.name;
|
2010-08-12 17:44:03 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return players;
|
|
|
|
}
|
|
|
|
|
|
|
|
function isUnit(entState)
|
|
|
|
{
|
|
|
|
if (entState.identity)
|
|
|
|
{
|
|
|
|
var classes = entState.identity.classes;
|
|
|
|
if (classes && classes.length)
|
|
|
|
for (var i = 0; i < classes.length; i++)
|
2010-10-17 22:01:18 +02:00
|
|
|
if (classes[i] == "Unit")
|
2010-08-12 17:44:03 +02:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2010-10-17 22:01:18 +02:00
|
|
|
function isAnimal(entState)
|
|
|
|
{
|
|
|
|
if (entState.identity)
|
|
|
|
{
|
|
|
|
var classes = entState.identity.classes;
|
|
|
|
if (classes && classes.length)
|
|
|
|
for (var i = 0; i < classes.length; i++)
|
|
|
|
if (classes[i] == "Animal")
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
function isStructure(entState)
|
|
|
|
{
|
|
|
|
if (entState.identity)
|
|
|
|
{
|
|
|
|
var classes = entState.identity.classes;
|
|
|
|
if (classes && classes.length)
|
|
|
|
for (var i = 0; i < classes.length; i++)
|
|
|
|
if (classes[i] == "Structure")
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2010-08-12 17:44:03 +02:00
|
|
|
function isDefensive(entState)
|
|
|
|
{
|
|
|
|
if (entState.identity)
|
|
|
|
{
|
|
|
|
var classes = entState.identity.classes;
|
|
|
|
if (classes && classes.length)
|
|
|
|
for (var i = 0; i < classes.length; i++)
|
|
|
|
if (classes[i] == "Defensive")
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
function damageTypesToTextStacked(dmg)
|
|
|
|
{
|
|
|
|
if (!dmg)
|
|
|
|
return "(None)";
|
|
|
|
return dmg.hack + " Hack\n" + dmg.pierce + " Pierce\n" + dmg.crush + " Crush";
|
|
|
|
}
|
|
|
|
|
|
|
|
function damageTypesToText(dmg)
|
|
|
|
{
|
|
|
|
if (!dmg)
|
|
|
|
return "[font=\"serif-12\"](None)[/font]";
|
|
|
|
|
|
|
|
var hackLabel = "[font=\"serif-12\"] Hack[/font]";
|
|
|
|
var pierceLabel = "[font=\"serif-12\"] Pierce[/font]";
|
|
|
|
var crushLabel = "[font=\"serif-12\"] Crush[/font]";
|
|
|
|
var hackDamage = dmg.hack;
|
|
|
|
var pierceDamage = dmg.pierce;
|
|
|
|
var crushDamage = dmg.crush;
|
|
|
|
|
|
|
|
var dmgArray = [];
|
|
|
|
if (hackDamage) dmgArray.push(hackDamage + hackLabel);
|
|
|
|
if (pierceDamage) dmgArray.push(pierceDamage + pierceLabel);
|
|
|
|
if (crushDamage) dmgArray.push(crushDamage + crushLabel);
|
|
|
|
|
2010-09-28 16:19:13 +02:00
|
|
|
return dmgArray.join("[font=\"serif-12\"], [/font]");
|
|
|
|
}
|
|
|
|
|
|
|
|
function getFormationCellId(formationName)
|
|
|
|
{
|
|
|
|
switch (formationName)
|
|
|
|
{
|
2010-09-28 19:40:41 +02:00
|
|
|
case "Formation0":
|
2010-09-28 16:19:13 +02:00
|
|
|
return 0;
|
2010-09-28 19:40:41 +02:00
|
|
|
case "Formation1":
|
2010-09-28 16:19:13 +02:00
|
|
|
return 1;
|
2010-09-28 19:40:41 +02:00
|
|
|
case "Formation2":
|
2010-09-28 16:19:13 +02:00
|
|
|
return 2;
|
2010-09-28 19:40:41 +02:00
|
|
|
case "Formation3":
|
2010-09-28 16:19:13 +02:00
|
|
|
return 3;
|
2010-09-28 19:40:41 +02:00
|
|
|
case "Formation4":
|
2010-09-28 16:19:13 +02:00
|
|
|
return 4;
|
2010-09-28 19:40:41 +02:00
|
|
|
case "Formation5":
|
2010-09-28 16:19:13 +02:00
|
|
|
return 5;
|
2010-09-28 19:40:41 +02:00
|
|
|
case "Formation6":
|
2010-09-28 16:19:13 +02:00
|
|
|
return 6;
|
2010-09-28 19:40:41 +02:00
|
|
|
case "Formation7":
|
2010-09-28 16:19:13 +02:00
|
|
|
return 7;
|
2010-09-28 19:40:41 +02:00
|
|
|
case "Formation8":
|
2010-09-28 16:19:13 +02:00
|
|
|
return 8;
|
2010-09-28 19:40:41 +02:00
|
|
|
case "Formation9":
|
2010-09-28 16:19:13 +02:00
|
|
|
return 9;
|
2010-09-28 19:40:41 +02:00
|
|
|
case "Formation10":
|
2010-09-28 16:19:13 +02:00
|
|
|
return 10;
|
2010-09-28 19:40:41 +02:00
|
|
|
case "Formation11":
|
2010-09-28 16:19:13 +02:00
|
|
|
return 11;
|
2010-09-28 19:40:41 +02:00
|
|
|
case "Formation12":
|
2010-09-28 16:19:13 +02:00
|
|
|
return 12;
|
|
|
|
default:
|
|
|
|
return -1;
|
|
|
|
}
|
2010-08-12 17:44:03 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function getCommandCellId(commandName)
|
|
|
|
{
|
|
|
|
switch (commandName)
|
|
|
|
{
|
|
|
|
case "delete":
|
2010-10-02 00:18:03 +02:00
|
|
|
return 1;
|
2010-10-24 00:43:15 +02:00
|
|
|
case "unload-all":
|
|
|
|
return 2;
|
2010-08-12 17:44:03 +02:00
|
|
|
default:
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2010-09-28 16:19:13 +02:00
|
|
|
function getEntityFormationsList(entState)
|
|
|
|
{
|
|
|
|
var formations = [];
|
|
|
|
|
2010-09-28 19:40:41 +02:00
|
|
|
formations.push("Formation0");
|
|
|
|
formations.push("Formation1");
|
|
|
|
formations.push("Formation2");
|
|
|
|
formations.push("Formation3");
|
|
|
|
formations.push("Formation4");
|
|
|
|
formations.push("Formation5");
|
|
|
|
formations.push("Formation6");
|
|
|
|
formations.push("Formation7");
|
|
|
|
formations.push("Formation8");
|
|
|
|
formations.push("Formation9");
|
|
|
|
formations.push("Formation10");
|
|
|
|
formations.push("Formation11");
|
|
|
|
formations.push("Formation12");
|
2010-09-28 16:19:13 +02:00
|
|
|
return formations;
|
|
|
|
}
|
|
|
|
|
2010-08-12 17:44:03 +02:00
|
|
|
function getEntityCommandsList(entState)
|
|
|
|
{
|
|
|
|
var commands = [];
|
2010-10-24 00:43:15 +02:00
|
|
|
if (entState.garrisonHolder)
|
|
|
|
commands.push("unload-all");
|
2010-10-03 01:24:13 +02:00
|
|
|
commands.push("delete");
|
2010-08-12 17:44:03 +02:00
|
|
|
return commands;
|
|
|
|
}
|
|
|
|
|
|
|
|
function getEntityCost(template)
|
|
|
|
{
|
|
|
|
if (template.cost)
|
|
|
|
{
|
|
|
|
var costs = [];
|
|
|
|
if (template.cost.food) costs.push("[font=\"serif-bold-13\"]Food:[/font] " + template.cost.food);
|
|
|
|
if (template.cost.wood) costs.push("[font=\"serif-bold-13\"]Wood:[/font] " + template.cost.wood);
|
|
|
|
if (template.cost.metal) costs.push("[font=\"serif-bold-13\"]Metal:[/font] " + template.cost.metal);
|
|
|
|
if (template.cost.stone) costs.push("[font=\"serif-bold-13\"]Stone:[/font] " + template.cost.stone);
|
|
|
|
if (costs.length)
|
|
|
|
return costs.join(", ");
|
|
|
|
}
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
|
|
|
|
function getEntityName(template)
|
|
|
|
{
|
2010-10-13 22:16:03 +02:00
|
|
|
return template.name.specific || template.name.generic || "???";
|
2010-08-12 17:44:03 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function getEntityNameWithGenericType(template)
|
|
|
|
{
|
|
|
|
var name;
|
|
|
|
if ((template.name.specific && template.name.generic) && (template.name.specific != template.name.generic))
|
|
|
|
name = template.name.specific + " (" + template.name.generic + ")";
|
|
|
|
else
|
|
|
|
name = template.name.specific || template.name.generic || "???";
|
|
|
|
|
|
|
|
return "[font=\"serif-bold-16\"]" + name + "[/font]";
|
|
|
|
}
|
|
|
|
|
2010-09-25 17:22:41 +02:00
|
|
|
function getEntityRankedName(entState)
|
|
|
|
{
|
|
|
|
var template = GetTemplateData(entState.template)
|
|
|
|
var rank = entState.identity.rank;
|
|
|
|
if (rank)
|
|
|
|
return rank + " " + template.name.specific;
|
|
|
|
else
|
|
|
|
return template.name.specific;
|
|
|
|
}
|
|
|
|
|
|
|
|
function getRankIconCellId(entState)
|
|
|
|
{
|
|
|
|
var template = GetTemplateData(entState.template)
|
|
|
|
var rank = entState.identity.rank;
|
|
|
|
if (rank)
|
|
|
|
{
|
|
|
|
if (rank == "Elite")
|
|
|
|
return 0;
|
|
|
|
else if (rank == "Advanced")
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
2010-08-12 17:44:03 +02:00
|
|
|
function getFormalCivName(civ)
|
|
|
|
{
|
|
|
|
switch (civ)
|
|
|
|
{
|
|
|
|
case CART:
|
|
|
|
return "Carthaginians";
|
|
|
|
case CELT:
|
|
|
|
return "Celts";
|
|
|
|
case HELE:
|
|
|
|
return "Hellenes";
|
|
|
|
case IBER:
|
|
|
|
return "Iberians";
|
|
|
|
case PERS:
|
|
|
|
return "Persians";
|
|
|
|
case ROME:
|
|
|
|
return "Romans";
|
|
|
|
default:
|
|
|
|
return "Gaia";
|
|
|
|
}
|
|
|
|
}
|