Difference between revisions of "MinerAI"
From Elite Wiki
m |
|||
Line 83: | Line 83: | ||
[[AI|BACK]] |
[[AI|BACK]] |
||
+ | |||
+ | |||
+ | [[Category:Oolite]] |
Revision as of 14:13, 12 July 2006
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 = (); }; }