forked from 0ad/0ad
put the unit commands in a JS object
This was SVN commit r15340.
This commit is contained in:
parent
2b408e766b
commit
2b8758745f
@ -1505,82 +1505,16 @@ function changePrimarySelectionGroup(templateName, deselectGroup)
|
|||||||
// Performs the specified command (delete, town bell, repair, etc.)
|
// Performs the specified command (delete, town bell, repair, etc.)
|
||||||
function performCommand(entity, commandName)
|
function performCommand(entity, commandName)
|
||||||
{
|
{
|
||||||
if (entity)
|
if (!entity)
|
||||||
{
|
return;
|
||||||
var entState = GetExtendedEntityState(entity);
|
var entState = GetExtendedEntityState(entity);
|
||||||
var playerID = Engine.GetPlayerID();
|
var playerID = Engine.GetPlayerID();
|
||||||
|
|
||||||
if (entState.player == playerID || g_DevSettings.controlAll)
|
if (!entState.player == playerID && !g_DevSettings.controlAll)
|
||||||
{
|
return;
|
||||||
switch (commandName)
|
|
||||||
{
|
|
||||||
case "delete":
|
|
||||||
var selection = g_Selection.toList();
|
|
||||||
if (selection.length > 0)
|
|
||||||
if (!entState.resourceSupply || !entState.resourceSupply.killBeforeGather)
|
|
||||||
openDeleteDialog(selection);
|
|
||||||
break;
|
|
||||||
case "stop":
|
|
||||||
var selection = g_Selection.toList();
|
|
||||||
if (selection.length > 0)
|
|
||||||
stopUnits(selection);
|
|
||||||
break;
|
|
||||||
case "garrison":
|
|
||||||
inputState = INPUT_PRESELECTEDACTION;
|
|
||||||
preSelectedAction = ACTION_GARRISON;
|
|
||||||
break;
|
|
||||||
case "repair":
|
|
||||||
inputState = INPUT_PRESELECTEDACTION;
|
|
||||||
preSelectedAction = ACTION_REPAIR;
|
|
||||||
break;
|
|
||||||
case "add-guard":
|
|
||||||
inputState = INPUT_PRESELECTEDACTION;
|
|
||||||
preSelectedAction = ACTION_GUARD;
|
|
||||||
break;
|
|
||||||
case "remove-guard":
|
|
||||||
removeGuard();
|
|
||||||
break;
|
|
||||||
case "unload":
|
|
||||||
unloadSelection();
|
|
||||||
break;
|
|
||||||
case "unload-all":
|
|
||||||
unloadAll();
|
|
||||||
break;
|
|
||||||
case "focus-rally":
|
|
||||||
// if the selected building has a rally point set, move the camera to it; otherwise, move to the building itself
|
|
||||||
// (since that's where units will spawn without a rally point)
|
|
||||||
var focusTarget = null;
|
|
||||||
if (entState.rallyPoint && entState.rallyPoint.position)
|
|
||||||
{
|
|
||||||
focusTarget = entState.rallyPoint.position;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (entState.position)
|
|
||||||
focusTarget = entState.position;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (focusTarget !== null)
|
if (entityCommands[commandName])
|
||||||
Engine.CameraMoveTo(focusTarget.x, focusTarget.z);
|
entityCommands[commandName].execute(entState);
|
||||||
|
|
||||||
break;
|
|
||||||
case "back-to-work":
|
|
||||||
backToWork();
|
|
||||||
break;
|
|
||||||
case "increase-alert-level":
|
|
||||||
increaseAlertLevel();
|
|
||||||
break;
|
|
||||||
case "alert-end":
|
|
||||||
endOfAlert();
|
|
||||||
break;
|
|
||||||
case "select-trading-goods":
|
|
||||||
toggleTrade();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Performs the specified formation
|
// Performs the specified formation
|
||||||
|
@ -621,6 +621,245 @@ var unitActions =
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Info and actions for the entity commands
|
||||||
|
* Currently displayed in the bottom of the central pane
|
||||||
|
*/
|
||||||
|
var entityCommands =
|
||||||
|
{
|
||||||
|
// Unload
|
||||||
|
"unload-all": {
|
||||||
|
"getInfo": function(entState)
|
||||||
|
{
|
||||||
|
if (!entState.garrisonHolder)
|
||||||
|
return false;
|
||||||
|
return {
|
||||||
|
"tooltip": translate("Unload All"),
|
||||||
|
"icon": "garrison-out.png"
|
||||||
|
};
|
||||||
|
},
|
||||||
|
"execute": function(entState)
|
||||||
|
{
|
||||||
|
unloadAdd();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// Delete
|
||||||
|
"delete": {
|
||||||
|
"getInfo": function(entState)
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
"tooltip": translate("Delete"),
|
||||||
|
"icon": "kill_small.png"
|
||||||
|
};
|
||||||
|
},
|
||||||
|
"execute": function(entState)
|
||||||
|
{
|
||||||
|
var selection = g_Selection.toList();
|
||||||
|
if (selection.length < 1)
|
||||||
|
return;
|
||||||
|
if (!entState.resourceSupply || !entState.resourceSupply.killBeforeGather)
|
||||||
|
openDeleteDialog(selection);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// Stop
|
||||||
|
"stop": {
|
||||||
|
"getInfo": function(entState)
|
||||||
|
{
|
||||||
|
if (!entState.unitAI)
|
||||||
|
return false;
|
||||||
|
return {
|
||||||
|
"tooltip": translate("Stop"),
|
||||||
|
"icon": "stop.png"
|
||||||
|
};
|
||||||
|
},
|
||||||
|
"execute": function(entState)
|
||||||
|
{
|
||||||
|
var selection = g_Selection.toList();
|
||||||
|
if (selection.length > 0)
|
||||||
|
stopUnits(selection);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// Garrison
|
||||||
|
"garrison": {
|
||||||
|
"getInfo": function(entState)
|
||||||
|
{
|
||||||
|
if (!entState.unitAI || entState.turretParent)
|
||||||
|
return false;
|
||||||
|
return {
|
||||||
|
"tooltip": translate("Garrison"),
|
||||||
|
"icon": "garrison.png"
|
||||||
|
};
|
||||||
|
},
|
||||||
|
"execute": function(entState)
|
||||||
|
{
|
||||||
|
inputState = INPUT_PRESELECTEDACTION;
|
||||||
|
preSelectedAction = ACTION_GARRISON;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// Ungarrison
|
||||||
|
"unload": {
|
||||||
|
"getInfo": function(entState)
|
||||||
|
{
|
||||||
|
if (!entState.unitAI || !entState.turretParent)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
var p = GetEntityState(entState.turretParent);
|
||||||
|
if (p.garrisonHolder || p.garrisonHolder.entities.indexOf(entState.id) == -1)
|
||||||
|
return false;
|
||||||
|
return {
|
||||||
|
"tooltip": translate("Unload"),
|
||||||
|
"icon": "garrison-out.png"
|
||||||
|
};
|
||||||
|
},
|
||||||
|
"execute": function(entState)
|
||||||
|
{
|
||||||
|
unloadSelection();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// Repair
|
||||||
|
"repair": {
|
||||||
|
"getInfo": function(entState)
|
||||||
|
{
|
||||||
|
if (!entState.buildEntities)
|
||||||
|
return false;
|
||||||
|
return {
|
||||||
|
"tooltip": translate("Repair"),
|
||||||
|
"icon": "repair.png"
|
||||||
|
};
|
||||||
|
},
|
||||||
|
"execute": function(entState)
|
||||||
|
{
|
||||||
|
inputState = INPUT_PRESELECTEDACTION;
|
||||||
|
preSelectedAction = ACTION_REPAIR;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// Focus on rally point
|
||||||
|
"focus-rally": {
|
||||||
|
"getInfo": function(entState)
|
||||||
|
{
|
||||||
|
if (!entState.rallyPoint)
|
||||||
|
return false;
|
||||||
|
return {
|
||||||
|
"tooltip": translate("Focus on Rally Point"),
|
||||||
|
"icon": "focus-rally.png"
|
||||||
|
};
|
||||||
|
},
|
||||||
|
"execute": function(entState)
|
||||||
|
{
|
||||||
|
var focusTarget = null;
|
||||||
|
if (entState.rallyPoint && entState.rallyPoint.position)
|
||||||
|
focusTarget = entState.rallyPoint.position;
|
||||||
|
else if (entState.position)
|
||||||
|
focusTarget = entState.position;
|
||||||
|
|
||||||
|
if (focusTarget)
|
||||||
|
Engine.CameraMoveTo(focusTarget.x, focusTarget.z);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// Back to work
|
||||||
|
"back-to-work": {
|
||||||
|
"getInfo": function(entState)
|
||||||
|
{
|
||||||
|
if (!entState.unitAI || !entState.unitAI.hasWorkOrders)
|
||||||
|
return false;
|
||||||
|
return {
|
||||||
|
"tooltip": translate("Back to Work"),
|
||||||
|
"icon": "production.png"
|
||||||
|
};
|
||||||
|
},
|
||||||
|
"execute": function(entState)
|
||||||
|
{
|
||||||
|
backToWork();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// Guard
|
||||||
|
"add-guard": {
|
||||||
|
"getInfo": function(entState)
|
||||||
|
{
|
||||||
|
if (!entState.unitAI || !entState.unitAI.canGuard || entState.unitAI.isGuarding)
|
||||||
|
return false;
|
||||||
|
return {
|
||||||
|
"tooltip": translate("Guard"),
|
||||||
|
"icon": "add-guard.png"
|
||||||
|
};
|
||||||
|
},
|
||||||
|
"execute": function(entState)
|
||||||
|
{
|
||||||
|
inputState = INPUT_PRESELECTEDACTION;
|
||||||
|
preSelectedAction = ACTION_GUARD;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// Remove guard
|
||||||
|
"remove-guard": {
|
||||||
|
"getInfo": function(entState)
|
||||||
|
{
|
||||||
|
if (!entState.unitAI || !entState.unitAI.isGuarding)
|
||||||
|
return false;
|
||||||
|
return {
|
||||||
|
"tooltip": translate("Remove guard"),
|
||||||
|
"icon": "remove-guard.png"
|
||||||
|
};
|
||||||
|
},
|
||||||
|
"execute": function(entState)
|
||||||
|
{
|
||||||
|
removeGuard();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// Trading
|
||||||
|
"select-trading-goods": {
|
||||||
|
"getInfo": function(entState)
|
||||||
|
{
|
||||||
|
if (!hasClass(entState, "Market"))
|
||||||
|
return false;
|
||||||
|
return {
|
||||||
|
"tooltip": translate("Select trading goods"),
|
||||||
|
"icon": "economics.png"
|
||||||
|
};
|
||||||
|
},
|
||||||
|
"execute": function(entState)
|
||||||
|
{
|
||||||
|
toggleTrade();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// Raise alert
|
||||||
|
"increase-alert-level": {
|
||||||
|
"getInfo": function(entState)
|
||||||
|
{
|
||||||
|
if(!entState.alertRaiser || !entState.alertRaiser.canIncreaseLevel)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(entState.alertRaiser.hasRaisedAlert)
|
||||||
|
var tooltip = translate("Increase the alert level to protect more units");
|
||||||
|
else
|
||||||
|
var tooltip = translate("Raise an alert!");
|
||||||
|
return {
|
||||||
|
"tooltip": tooltip,
|
||||||
|
"icon": "bell_level1.png"
|
||||||
|
};
|
||||||
|
},
|
||||||
|
"execute": function(entState)
|
||||||
|
{
|
||||||
|
increaseAlertLevel();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// End alert
|
||||||
|
"alert-end": {
|
||||||
|
"getInfo": function(entState)
|
||||||
|
{
|
||||||
|
if(!entState.alertRaiser || !entState.alertRaiser.hasRaisedAlert)
|
||||||
|
return false
|
||||||
|
return {
|
||||||
|
"tooltip": translate("End of alert."),
|
||||||
|
"icon": "bell_level0.png"
|
||||||
|
};
|
||||||
|
},
|
||||||
|
"execute": function(entState)
|
||||||
|
{
|
||||||
|
endOfAlert();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
function playerCheck(entState, targetState, validPlayers)
|
function playerCheck(entState, targetState, validPlayers)
|
||||||
{
|
{
|
||||||
var playerState = GetSimState().players[entState.player];
|
var playerState = GetSimState().players[entState.player];
|
||||||
@ -634,4 +873,4 @@ function playerCheck(entState, targetState, validPlayers)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
};
|
||||||
|
@ -282,130 +282,14 @@ function armorTypesToText(dmg)
|
|||||||
function getEntityCommandsList(entState)
|
function getEntityCommandsList(entState)
|
||||||
{
|
{
|
||||||
var commands = [];
|
var commands = [];
|
||||||
if (entState.garrisonHolder)
|
for (var c in entityCommands)
|
||||||
{
|
{
|
||||||
commands.push({
|
var info = entityCommands[c].getInfo(entState);
|
||||||
"name": "unload-all",
|
if (!info)
|
||||||
"tooltip": translate("Unload All"),
|
continue;
|
||||||
"icon": "garrison-out.png"
|
info.name = c;
|
||||||
});
|
commands.push(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
commands.push({
|
|
||||||
"name": "delete",
|
|
||||||
"tooltip": translate("Delete"),
|
|
||||||
"icon": "kill_small.png"
|
|
||||||
});
|
|
||||||
|
|
||||||
if (hasClass(entState, "Unit"))
|
|
||||||
{
|
|
||||||
commands.push({
|
|
||||||
"name": "stop",
|
|
||||||
"tooltip": translate("Stop"),
|
|
||||||
"icon": "stop.png"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (entState.unitAI)
|
|
||||||
{
|
|
||||||
if (entState.turretParent)
|
|
||||||
{
|
|
||||||
var parent = GetEntityState(entState.turretParent);
|
|
||||||
if (
|
|
||||||
parent.garrisonHolder &&
|
|
||||||
parent.garrisonHolder.entities.indexOf(entState.id) != -1
|
|
||||||
)
|
|
||||||
commands.push({
|
|
||||||
"name": "unload",
|
|
||||||
"tooltip": translate("Unload"),
|
|
||||||
"icon": "garrison-out.png"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else
|
|
||||||
commands.push({
|
|
||||||
"name": "garrison",
|
|
||||||
"tooltip": translate("Garrison"),
|
|
||||||
"icon": "garrison.png"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (entState.buildEntities)
|
|
||||||
{
|
|
||||||
commands.push({
|
|
||||||
"name": "repair",
|
|
||||||
"tooltip": translate("Repair"),
|
|
||||||
"icon": "repair.png"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (entState.rallyPoint)
|
|
||||||
{
|
|
||||||
commands.push({
|
|
||||||
"name": "focus-rally",
|
|
||||||
"tooltip": translate("Focus on Rally Point"),
|
|
||||||
"icon": "focus-rally.png"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (entState.unitAI && entState.unitAI.hasWorkOrders)
|
|
||||||
{
|
|
||||||
commands.push({
|
|
||||||
"name": "back-to-work",
|
|
||||||
"tooltip": translate("Back to Work"),
|
|
||||||
"icon": "production.png"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (entState.unitAI && entState.unitAI.canGuard && !entState.unitAI.isGuarding)
|
|
||||||
{
|
|
||||||
commands.push({
|
|
||||||
"name": "add-guard",
|
|
||||||
"tooltip": translate("Guard"),
|
|
||||||
"icon": "add-guard.png"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (entState.unitAI && entState.unitAI.isGuarding)
|
|
||||||
{
|
|
||||||
commands.push({
|
|
||||||
"name": "remove-guard",
|
|
||||||
"tooltip": translate("Remove guard"),
|
|
||||||
"icon": "remove-guard.png"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasClass(entState, "Market"))
|
|
||||||
{
|
|
||||||
commands.push({
|
|
||||||
"name": "select-trading-goods",
|
|
||||||
"tooltip": translate("Select trading goods"),
|
|
||||||
"icon": "economics.png"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if(entState.alertRaiser)
|
|
||||||
{
|
|
||||||
if(entState.alertRaiser.canIncreaseLevel)
|
|
||||||
{
|
|
||||||
if(entState.alertRaiser.hasRaisedAlert)
|
|
||||||
var tooltip = translate("Increase the alert level to protect more units");
|
|
||||||
else
|
|
||||||
var tooltip = translate("Raise an alert!");
|
|
||||||
commands.push({
|
|
||||||
"name": "increase-alert-level",
|
|
||||||
"tooltip": tooltip,
|
|
||||||
"icon": "bell_level1.png"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if(entState.alertRaiser.hasRaisedAlert)
|
|
||||||
commands.push({
|
|
||||||
"name": "alert-end",
|
|
||||||
"tooltip": translate("End of alert."),
|
|
||||||
"icon": "bell_level0.png"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return commands;
|
return commands;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user