MinerAI
From Elite Wiki
One of the more complex state machines.
Looks for rocks, mines them, collects the ore, once hold is full it will return to dock. Miners are generally defenceless with only a mininglaser on the frontal mount, thus it runs when threatened.
Defined AIstates:
- GLOBAL: ->LOOK_FOR_SPLINTERS
- LOOK_FOR_SPLINTERS: ->COLLECT_STUFF, ->LOOK_FOR_ROCKS, ->DOCK_WITH_STATION, ->FLEE
- COLLECT_STUFF: ->LOOK_FOR_SPLINTERS, ->FLEE
- LOOK_FOR_ROCKS: ->BREAK_ROCKS, ->DOCK_WITH_STATION, ->FLEE
- BREAK_ROCKS: ->LOOK_FOR_SPLINTERS, ->FLEE
- DOCK_WITH_STATION: ->FLEE, ->ATTACK_SHIP
- FLEE: ->FLEE, ->LOOK_FOR_SPLINTERS
- ATTACK_SHIP: undefined
Referred to AI's: dockingAI.plist
{
"LOOK_FOR_ROCKS" = {
ENTER = (performIdle);
UPDATE = (scanForRocks, "pauseAI: 10.0");
"TARGET_FOUND" = (setTargetToFoundTarget, "setStateTo: BREAK_ROCKS");
"NOTHING_FOUND" = ("setStateTo: DOCK_WITH_STATION");
EXIT = ();
ATTACKED = (setTargetToPrimaryAggressor, broadcastDistressMessage, "setStateTo: FLEE");
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE"); };
"BREAK_ROCKS" = {
ENTER = (performMining);
UPDATE = ();
"TARGET_DESTROYED" = ("setStateTo: LOOK_FOR_SPLINTERS");
"TARGET_LOST" = ("setStateTo: LOOK_FOR_SPLINTERS");
EXIT = ();
ATTACKED = (setTargetToPrimaryAggressor, broadcastDistressMessage, "setStateTo: FLEE");
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE"); };
"LOOK_FOR_SPLINTERS" = {
ENTER = (performIdle);
UPDATE = (scanForRandomLoot, "pauseAI: 10.0");
"TARGET_FOUND" = (setTargetToFoundTarget, "setStateTo: COLLECT_STUFF");
"NOTHING_FOUND" = ("setStateTo: LOOK_FOR_ROCKS");
"HOLD_FULL" = ("setStateTo: DOCK_WITH_STATION");
EXIT = ();
ATTACKED = (setTargetToPrimaryAggressor, broadcastDistressMessage, "setStateTo: FLEE");
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE"); };
"COLLECT_STUFF" = {
ENTER = (performCollect);
UPDATE = ();
FRUSTRATED = ("setStateTo: LOOK_FOR_SPLINTERS");
"CARGO_SCOOPED" = (checkForFullHold, "setStateTo: LOOK_FOR_SPLINTERS");
"TARGET_LOST" = ("setStateTo: LOOK_FOR_SPLINTERS");
"COLLISION" = ("setStateTo: LOOK_FOR_SPLINTERS");
EXIT = ();
ATTACKED = (setTargetToPrimaryAggressor, broadcastDistressMessage, "setStateTo: FLEE");
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE"); };
"DOCK_WITH_STATION" = {
ENTER = (setTargetToStation, "setDesiredRangeTo: 5000.0", performIntercept);
UPDATE = ();
"DESIRED_RANGE_ACHIEVED" = ("setAITo: dockingAI.plist");
EXIT = ();
ATTACKED = (setTargetToPrimaryAggressor, broadcastDistressMessage, "setStateTo: ATTACK_SHIP");
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE"); };
FLEE = {
ENTER = ("setDesiredRangeTo: 25600", performFlee);
EXIT = ();
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
"REACHED_SAFETY" = ("setSpeedTo: 0.0", performIdle);
"ENERGY_FULL" = (performIdle, "setStateTo: LOOK_FOR_SPLINTERS");
"TARGET_LOST" = (performIdle, "setStateTo: LOOK_FOR_SPLINTERS");
UPDATE = (); };
GLOBAL = {
ENTER = ("setSpeedFactorTo: 0.1", "setStateTo: LOOK_FOR_SPLINTERS");
EXIT = ();
UPDATE = (); };
}