518 lines
13 KiB
Plaintext
518 lines
13 KiB
Plaintext
//--- OBJECT WRITE BEGIN ---
|
|
new GuiControl(AIEButtonBarDlg) {
|
|
profile = "GuiModelessDialogProfile";
|
|
horizSizing = "right";
|
|
vertSizing = "bottom";
|
|
position = "0 0";
|
|
extent = "640 480";
|
|
minExtent = "8 8";
|
|
visible = "1";
|
|
helpTag = "0";
|
|
|
|
new GuiChunkedBitmapCtrl() {
|
|
profile = "GuiContentProfile";
|
|
horizSizing = "right";
|
|
vertSizing = "height";
|
|
position = "0 30";
|
|
extent = "120 420";
|
|
minExtent = "8 8";
|
|
visible = "1";
|
|
helpTag = "0";
|
|
|
|
new GuiCheckBoxCtrl(ExteriorCheckBox) {
|
|
profile = "GuiButtonProfile";
|
|
horizSizing = "right";
|
|
vertSizing = "bottom";
|
|
position = "11 23";
|
|
extent = "100 22";
|
|
minExtent = "8 8";
|
|
visible = "1";
|
|
command = "ExteriorCheckBox.updateCheckBox();";
|
|
helpTag = "0";
|
|
text = "Draw Ext";
|
|
};
|
|
new GuiCheckBoxCtrl(InteriorCheckBox) {
|
|
profile = "GuiButtonProfile";
|
|
horizSizing = "right";
|
|
vertSizing = "bottom";
|
|
position = "11 47";
|
|
extent = "100 22";
|
|
minExtent = "8 8";
|
|
visible = "1";
|
|
command = "InteriorCheckBox.updateCheckBox();";
|
|
helpTag = "0";
|
|
text = "Draw Int";
|
|
};
|
|
new GuiTextCtrl() {
|
|
profile = "GuiTextProfile";
|
|
horizSizing = "right";
|
|
vertSizing = "bottom";
|
|
position = "11 6";
|
|
extent = "73 18";
|
|
minExtent = "8 8";
|
|
visible = "1";
|
|
helpTag = "0";
|
|
text = "Visual Options:";
|
|
};
|
|
new GuiCheckBoxCtrl(JetConnectionsCheckBox) {
|
|
profile = "GuiButtonProfile";
|
|
horizSizing = "right";
|
|
vertSizing = "bottom";
|
|
position = "11 73";
|
|
extent = "100 22";
|
|
minExtent = "8 8";
|
|
visible = "1";
|
|
command = "JetConnectionsCheckBox.updateCheckBox();";
|
|
helpTag = "0";
|
|
text = "Draw Jet";
|
|
};
|
|
new GuiButtonCtrl() {
|
|
profile = "GuiButtonProfile";
|
|
horizSizing = "right";
|
|
vertSizing = "bottom";
|
|
position = "10 201";
|
|
extent = "100 29";
|
|
minExtent = "8 8";
|
|
visible = "1";
|
|
command = "makeJettableGraph(Nav);";
|
|
helpTag = "0";
|
|
text = "Bot Graph";
|
|
};
|
|
new GuiButtonCtrl() {
|
|
profile = "GuiButtonProfile";
|
|
horizSizing = "right";
|
|
vertSizing = "bottom";
|
|
position = "10 169";
|
|
extent = "100 29";
|
|
minExtent = "8 8";
|
|
visible = "1";
|
|
command = "makeJettableGraph(Spawn);";
|
|
helpTag = "0";
|
|
text = "Spawn Graph";
|
|
};
|
|
new GuiButtonCtrl() {
|
|
profile = "GuiButtonProfile";
|
|
horizSizing = "right";
|
|
vertSizing = "bottom";
|
|
position = "10 233";
|
|
extent = "100 29";
|
|
minExtent = "8 8";
|
|
visible = "1";
|
|
command = "AIEButtonBarDlg.createLOSXref();";
|
|
helpTag = "0";
|
|
text = "Build LOS";
|
|
};
|
|
new GuiButtonCtrl() {
|
|
profile = "GuiButtonProfile";
|
|
horizSizing = "right";
|
|
vertSizing = "bottom";
|
|
position = "10 265";
|
|
extent = "100 29";
|
|
minExtent = "8 8";
|
|
visible = "1";
|
|
command = "navGraph.saveGraph();";
|
|
helpTag = "0";
|
|
text = "Save";
|
|
};
|
|
new GuiTextCtrl() {
|
|
profile = "GuiTextProfile";
|
|
horizSizing = "right";
|
|
vertSizing = "bottom";
|
|
position = "11 151";
|
|
extent = "56 18";
|
|
minExtent = "8 8";
|
|
visible = "1";
|
|
helpTag = "0";
|
|
text = "Graph Build";
|
|
};
|
|
new GuiTextCtrl() {
|
|
profile = "GuiTextProfile";
|
|
horizSizing = "right";
|
|
vertSizing = "bottom";
|
|
position = "11 315";
|
|
extent = "64 18";
|
|
minExtent = "8 8";
|
|
visible = "1";
|
|
helpTag = "0";
|
|
text = "AI Objectives";
|
|
};
|
|
new GuiButtonCtrl() {
|
|
profile = "GuiButtonProfile";
|
|
horizSizing = "right";
|
|
vertSizing = "bottom";
|
|
position = "10 331";
|
|
extent = "100 29";
|
|
minExtent = "8 8";
|
|
visible = "1";
|
|
command = "AICreateObjectives();";
|
|
helpTag = "0";
|
|
text = "Build Objectives";
|
|
};
|
|
new GuiPopUpMenuCtrl(ObjectiveList) {
|
|
profile = "GuiPopUpProfile";
|
|
horizSizing = "right";
|
|
vertSizing = "bottom";
|
|
position = "10 368";
|
|
extent = "101 20";
|
|
minExtent = "8 8";
|
|
visible = "1";
|
|
helpTag = "0";
|
|
text = "New Objective";
|
|
maxPopupHeight = "200";
|
|
};
|
|
new GuiButtonCtrl() {
|
|
profile = "GuiButtonProfile";
|
|
horizSizing = "right";
|
|
vertSizing = "bottom";
|
|
position = "10 395";
|
|
extent = "100 29";
|
|
minExtent = "8 8";
|
|
visible = "1";
|
|
command = "AISaveMissionObjectives();";
|
|
helpTag = "0";
|
|
text = "Save";
|
|
};
|
|
new GuiTextCtrl() {
|
|
profile = "GuiTextProfile";
|
|
horizSizing = "right";
|
|
vertSizing = "bottom";
|
|
position = "10 102";
|
|
extent = "73 18";
|
|
minExtent = "8 8";
|
|
visible = "1";
|
|
helpTag = "0";
|
|
text = "Camera speed:";
|
|
};
|
|
new GuiSliderCtrl() {
|
|
profile = "GuiDefaultProfile";
|
|
horizSizing = "right";
|
|
vertSizing = "bottom";
|
|
position = "6 121";
|
|
extent = "80 20";
|
|
minExtent = "80 20";
|
|
visible = "1";
|
|
variable = "value";
|
|
command = "$Camera::movementSpeed = $ThisControl.getValue();";
|
|
helpTag = "0";
|
|
range = "0.000000 200.000000";
|
|
ticks = "10";
|
|
value = "20";
|
|
};
|
|
};
|
|
};
|
|
//--- OBJECT WRITE END ---
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Functions
|
|
//------------------------------------------------------------------------------
|
|
|
|
function makeUnbridgedGraph()
|
|
{
|
|
GraphCurrentOperation.setValue("Generating interior nodes...");
|
|
Canvas.repaint();
|
|
navGraph::generateInterior();
|
|
dataProgress();
|
|
|
|
GraphCurrentOperation.setValue("Remaking graph...");
|
|
Canvas.repaint();
|
|
remakeTheGraph();
|
|
dataProgress();
|
|
}
|
|
|
|
function makeJettableGraph(%NAVorSPAWN)
|
|
{
|
|
AIworking(true);
|
|
|
|
$NavGraph::operations = 7;
|
|
$NavGraph::operationsDone = 0;
|
|
|
|
navGraph.setGenMode(%NAVorSPAWN);
|
|
navGraph::exteriorInspect();
|
|
dataProgress();
|
|
makeUnbridgedGraph();
|
|
|
|
GraphCurrentOperation.setValue("Beginning slow bridge finding pass");
|
|
Canvas.repaint();
|
|
|
|
navGraph.assemble();
|
|
|
|
navGraph.cullIslands();
|
|
remakeTheGraph();
|
|
navGraph.pushBridges();
|
|
navGraph.makeTables();
|
|
dataProgress();
|
|
|
|
AIworking(false);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
function AIEButtonBarDlg::getPrefs(%this)
|
|
{
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
function AIEbuttonBarDlg::setPrefs(%this)
|
|
{
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
function AIEButtonBarDlg::init(%this)
|
|
{
|
|
InteriorCheckBox.setValue($pref::NavGraph::drawIndoor);
|
|
ExteriorCheckBox.setValue($pref::NavGraph::drawOutdoor);
|
|
|
|
if(!$pref::NavGraph::drawIndoor)
|
|
JetConnectionsCheckBox.visible = false;
|
|
|
|
JetConnectionsCheckBox.setValue($pref::NavGraph::drawJetEdges);
|
|
|
|
ObjectiveList.clear();
|
|
ObjectiveList.setText("New Objective");
|
|
ObjectiveList.add("Deploy Outdoor Turret", 1);
|
|
ObjectiveList.add("Deploy Indoor Turret", 2);
|
|
ObjectiveList.add("Deploy Inventory", 3);
|
|
ObjectiveList.add("Touch FlipFlop", 4);
|
|
ObjectiveList.add("Mortar Target", 5);
|
|
ObjectiveList.add("Repair Equipment", 6);
|
|
ObjectiveList.add("Attack Target", 7);
|
|
ObjectiveList.add("Defend Location", 8);
|
|
objectiveList.add("New Group", 9);
|
|
|
|
//ObjectivesList.sort();
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
function AIEButtonBarDlg::onSleep(%this)
|
|
{
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
function AIEButtonBarDlg::onWake(%this)
|
|
{
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
function dataProgress()
|
|
{
|
|
$NavGraph::operationsDone++;
|
|
%percent = $NavGraph::operationsDone / $NavGraph::operations;
|
|
GraphBuildProgress.setValue(%percent);
|
|
Canvas.repaint();
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
function remakeTheGraph()
|
|
{
|
|
GraphCurrentOperation.setValue("making graph...");
|
|
Canvas.repaint();
|
|
navGraph.makeGraph();
|
|
dataProgress();
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
function AIEButtonBarDlg::createLOSXref()
|
|
{
|
|
AIworking(true);
|
|
GraphCurrentOperation.setValue("Making LOS CrossRef Table...");
|
|
GraphBuildProgress.setValue(0);
|
|
|
|
if(2.player)
|
|
navGraph.prepLOS(2.player.getTransform());
|
|
else
|
|
navGraph.prepLOS("0 0 0");
|
|
|
|
while(navGraph.makeLOS())
|
|
{
|
|
GraphBuildProgress.setValue($graphProcessPercent);
|
|
Canvas.repaint();
|
|
}
|
|
GraphBuildProgress.setValue(100);
|
|
Canvas.repaint();
|
|
AIworking(false);
|
|
}
|
|
|
|
function ExteriorCheckBox::updateCheckBox()
|
|
{
|
|
$pref::NavGraph::drawOutdoor = !$pref::NavGraph::drawOutdoor;
|
|
}
|
|
|
|
function InteriorCheckBox::updateCheckBox()
|
|
{
|
|
$pref::NavGraph::drawIndoor = !$pref::NavGraph::drawIndoor;
|
|
|
|
if(!$pref::NavGraph::drawIndoor)
|
|
JetConnectionsCheckBox.visible = false;
|
|
else
|
|
jetConnectionsCheckBox.visible = true;
|
|
}
|
|
|
|
function JetConnectionsCheckBox::updateCheckBox()
|
|
{
|
|
$pref::NavGraph::drawJetEdges = !$pref::NavGraph::drawJetEdges;
|
|
}
|
|
|
|
function AISaveMissionObjectives()
|
|
{
|
|
// once we have created all objecitves, save out the mis file
|
|
if(!isObject(MissionGroup))
|
|
{
|
|
error("No mission exists!");
|
|
return;
|
|
}
|
|
|
|
// check for read-only
|
|
%file = "FixMe/missions/" @ $Client::MissionFile;
|
|
if(!isWriteableFileName(%file))
|
|
{
|
|
error("Mission file '" @ %file @ "' is not writeable.");
|
|
return;
|
|
}
|
|
|
|
// ok, were good to save.
|
|
missionGroup.save("missions/" @ $Client::MissionFile);
|
|
}
|
|
|
|
function AIObjectivesLock(%lock)
|
|
{
|
|
%numTeams = nameToId("MissionGroup/Teams").getCount();
|
|
|
|
for(%j = 0; %j < %numTeams; %j++)
|
|
{
|
|
%objGroup = nameToId("MissionGroup/Teams/team" @ %j @ "/AIObjectives");
|
|
if(%objGroup == -1)
|
|
continue;
|
|
|
|
%objCount = %objGroup.getCount();
|
|
|
|
for(%i = 0; %i < %objCount; %i++)
|
|
{
|
|
%obj = %objGroup.getObject(%i);
|
|
%obj.locked = %lock;
|
|
}
|
|
}
|
|
|
|
// save
|
|
AISaveMissionObjectives();
|
|
}
|
|
|
|
function addNewObjective(%type)
|
|
{
|
|
if($AIEditor::inspectTeam == 1)
|
|
%team = 1;
|
|
else if($AIEditor::inspectTeam == 2)
|
|
%team = 2;
|
|
else
|
|
%team = 1;
|
|
|
|
%tGroup = nameToId("MissionGroup/Teams/team" @ %team @ "/AIObjectives");
|
|
|
|
if(%tGroup < 1)
|
|
return;
|
|
|
|
if($InstantGroup $= "MissionGroup")
|
|
$InstantGroup = %tGroup;
|
|
|
|
switch$(%type)
|
|
{
|
|
case "Defend Location":
|
|
%objective = new AIObjective(AIODefendLocation)
|
|
{
|
|
dataBlock = "AIObjectiveMarker";
|
|
};
|
|
case "Repair Equipment":
|
|
%objective = new AIObjective(AIORepairObject)
|
|
{
|
|
dataBlock = "AIObjectiveMarker";
|
|
};
|
|
case "Deploy Outdoor Turret":
|
|
%Objective = new AIObjective(AIODeployEquipment)
|
|
{
|
|
dataBlock = "AIObjectiveMarker";
|
|
weightLevel1 = 4100;
|
|
weightLevel2 = 0;
|
|
description = "Deploy outdoor Turret";
|
|
offense = false;
|
|
defense = true;
|
|
targetObjectId = -1;
|
|
targetObject = -1;
|
|
targetClientId = -1;
|
|
equipment = "TurretOutdoorDeployable";
|
|
buyEquipmentSet = "MediumOutdoorTurretSet";
|
|
};
|
|
case "Deploy Indoor Turret":
|
|
%Objective = new AIObjective(AIODeployEquipment)
|
|
{
|
|
dataBlock = "AIObjectiveMarker";
|
|
weightLevel1 = 4100;
|
|
weightLevel2 = 0;
|
|
description = "Deploy indoor Turret";
|
|
offense = false;
|
|
defense = true;
|
|
targetObjectId = -1;
|
|
targetObject = -1;
|
|
targetClientId = -1;
|
|
equipment = "TurretIndoorDeployable";
|
|
buyEquipmentSet = "MediumIndoorTurretSet";
|
|
};
|
|
case "Attack Target":
|
|
%objective = new AIObjective(AIOAttackObject)
|
|
{
|
|
dataBlock = "AIObjectiveMarker";
|
|
};
|
|
case "Touch FlipFlop":
|
|
%objective = new AIObjective(AIOTouchObject)
|
|
{
|
|
dataBlock = "AIObjectiveMarker";
|
|
};
|
|
case "Mortar Target":
|
|
%objective = new AIObjective(AIOMortarObject)
|
|
{
|
|
dataBlock = "AIObjectiveMarker";
|
|
};
|
|
case "Deploy Inventory":
|
|
%Objective = new AIObjective(AIODeployEquipment)
|
|
{
|
|
dataBlock = "AIObjectiveMarker";
|
|
weightLevel1 = 4100;
|
|
weightLevel2 = 0;
|
|
description = "Deploy Inventory Station";
|
|
offense = false;
|
|
defense = true;
|
|
targetObjectId = -1;
|
|
targetObject = -1;
|
|
targetClientId = -1;
|
|
equipment = "InventoryDeployable";
|
|
buyEquipmentSet = "MediumInventorySet";
|
|
};
|
|
case "New Group":
|
|
%set = new SimGroup("ObjectiveSet");
|
|
%tGroup.add(%set);
|
|
return;
|
|
default:
|
|
error("no defined type.");
|
|
return;
|
|
}
|
|
|
|
$InstantGroup.add(%objective);
|
|
aiEdit.clearSelection();
|
|
aiEdit.selectObject(%objective);
|
|
aiEdit.dropSelection();
|
|
%objective.location = %objective.getWorldBoxCenter();
|
|
Inspector.inspect(%objective);
|
|
InspectorNameEdit.setValue(%objective.getName());
|
|
}
|
|
|
|
function ObjectiveList::onSelect(%this, %id, %text)
|
|
{
|
|
addNewObjective(%text);
|
|
ObjectiveList.setText("New Objective");
|
|
}
|