Minor optimization and cleanup of AI dispatch.

git-svn-id: http://svn.berlios.de/svnroot/repos/oolite-linux/trunk@5175 127b21dd-08f5-0310-b4b7-95ae10353056
This commit is contained in:
Jens Ayton 2012-08-11 11:55:33 +00:00
parent e33280df7e
commit c283c03ce4
3 changed files with 31 additions and 22 deletions

View File

@ -77,7 +77,6 @@
"debugMessage:",
"playSound:",
"setGuiToMissionScreen",
// "setBackgroundFromDescriptionsKey:", // Is this ever used from a script? It seems a bad match for future plans of mine. -- Ahruman
"setGalacticHyperspaceBehaviourTo:",
"setGalacticHyperspaceFixedCoordsTo:",
);
@ -197,13 +196,14 @@
"dropMessages:",
"exitAIWithMessage:",
"ai_throwSparks", // Don't use, use throwSparks instead
"explodeSelf", // Don't use, use becomeExplosion instead
"explodeSelf", // Don't use, use becomeExplosion instead
"checkAegis",
"checkEnergy",
"checkHeatInsulation",
"setThrustFactorTo:",
"setStateTo:",
"debugMessage:",
"ai_debugMessage:", // Don't use, use debugMessage: instead
"disengageAutopilot", // Only useful for player root AI
"thargonCheckMother",
"addPrimaryAggressorAsDefenseTarget",
@ -458,5 +458,6 @@
"setUpEscorts" = "doNothing";
"becomeExplosion" = "explodeSelf";
"clearDefenseTargets" = "removeAllDefenseTargets";
"debugMessage:" = "ai_debugMessage:";
};
}

View File

@ -507,11 +507,7 @@ static AIStackElement *sStack = NULL;
- (void) takeAction:(NSString *) action
{
NSArray *tokens = ScanTokensFromString(action);
NSString *dataString = nil;
NSString *selectorStr;
SEL selector;
ShipEntity *owner = [self owner];
ShipEntity *owner = [self owner];
#ifndef NDEBUG
BOOL report = [owner reportAIMessages];
@ -522,33 +518,35 @@ static AIStackElement *sStack = NULL;
}
#endif
if ([tokens count] != 0)
NSArray *tokens = ScanTokensFromString(action);
OOUInteger tokenCount = [tokens count];
if (tokenCount != 0)
{
selectorStr = [tokens objectAtIndex:0];
NSString *selectorStr = [tokens objectAtIndex:0];
if (owner != nil)
{
if ([tokens count] > 1)
NSString *dataString = nil;
if (tokenCount == 2)
{
dataString = [[tokens subarrayWithRange:NSMakeRange(1, [tokens count] - 1)] componentsJoinedByString:@" "];
dataString = [tokens objectAtIndex:1];
}
else if ([tokens count] > 1)
{
dataString = [[tokens subarrayWithRange:NSMakeRange(1, tokenCount - 1)] componentsJoinedByString:@" "];
}
selector = NSSelectorFromString(selectorStr);
SEL selector = NSSelectorFromString(selectorStr);
if ([owner respondsToSelector:selector])
{
if (dataString) [owner performSelector:selector withObject:dataString];
if (dataString != nil) [owner performSelector:selector withObject:dataString];
else [owner performSelector:selector];
}
else
{
if ([selectorStr isEqual:@"debugMessage:"])
{
OOLog(@"ai.takeAction.debugMessage", @"DEBUG: AI MESSAGE from %@: %@", ownerDesc, dataString);
}
else
{
OOLogERR(@"ai.takeAction.badSelector", @"in AI %@ in state %@: %@ does not respond to %@", stateMachineName, currentState, ownerDesc, selectorStr);
}
OOLogERR(@"ai.takeAction.badSelector", @"in AI %@ in state %@: %@ does not respond to %@", stateMachineName, currentState, ownerDesc, selectorStr);
}
}
else

View File

@ -254,9 +254,11 @@
- (void) sendScriptMessage:(NSString *)message;
- (void) ai_throwSparks;
- (void) explodeSelf;
- (void) ai_throwSparks;
- (void) ai_debugMessage:(NSString *)message;
// racing code.
- (void) targetFirstBeaconWithCode:(NSString *) code;
@ -2564,12 +2566,20 @@
[self setThrowSparks:YES];
}
- (void) explodeSelf
{
[self getDestroyedBy:nil damageType:kOODamageTypeEnergy];
}
- (void) ai_debugMessage:(NSString *)message
{
NSString *desc = [NSString stringWithFormat:@"%@ %d", [self name], [self universalID]];
if ([self isPlayer]) desc = @"player autopilot";
OOLog(@"ai.takeAction.debugMessage", @"DEBUG: AI MESSAGE from %@: %@", desc, message);
}
// racing code TODO