Skip to content

Commit

Permalink
allow fetching hit feature-ID on trace-ray [AI]
Browse files Browse the repository at this point in the history
  • Loading branch information
hoijui committed Sep 8, 2010
1 parent 32c0407 commit 60e3fc3
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 11 deletions.
4 changes: 3 additions & 1 deletion AI/Wrappers/LegacyCpp/AIAICallback.cpp
Expand Up @@ -1675,13 +1675,15 @@ int CAIAICallback::HandleCommand(int commandId, void* data) {
cppCmdData->rayLen,
cppCmdData->srcUID,
cppCmdData->hitUID,
cppCmdData->flags
cppCmdData->flags,
cppCmdData->hitFID
};

ret = sAICallback->Clb_Engine_handleCommand(teamId, COMMAND_TO_ID_ENGINE, -1, COMMAND_TRACE_RAY, &cCmdData);

cppCmdData->rayLen = cCmdData.rayLen;
cppCmdData->hitUID = cCmdData.hitUID;
cppCmdData->hitFID = cCmdData.hitFID;
break;
}

Expand Down
27 changes: 19 additions & 8 deletions rts/ExternalAI/AICallback.cpp
Expand Up @@ -1452,20 +1452,31 @@ int CAICallback::HandleCommand(int commandId, void* data)

if (CHECK_UNITID(cmdData->srcUID)) {
const CUnit* srcUnit = uh->units[cmdData->srcUID];
const CUnit* hitUnit = NULL;
bool haveHit = false;
bool visible = true;

if (srcUnit != NULL) {
const float realLen = helper->TraceRay(cmdData->rayPos, cmdData->rayDir, cmdData->rayLen, 0.0f, srcUnit, hitUnit, cmdData->flags);
const CUnit* hitUnit = NULL;
const CFeature* hitFeature = NULL;
const float realLen = helper->TraceRay(cmdData->rayPos, cmdData->rayDir, cmdData->rayLen, 0.0f, srcUnit, hitUnit, cmdData->flags, &hitFeature);

bool visible = false;

if (hitUnit != NULL) {
haveHit = true;
visible = (hitUnit->losStatus[teamHandler->AllyTeam(team)] & LOS_INLOS);
bool isUnitVisible = (hitUnit->losStatus[teamHandler->AllyTeam(team)] & LOS_INLOS);
if (isUnitVisible) {
visible = true;
cmdData->hitUID = hitUnit->id;
}
}

if (hitFeature != NULL) {
bool isFeatureVisible = hitFeature->IsInLosForAllyTeam(teamHandler->AllyTeam(team));
if (isFeatureVisible) {
visible = true;
cmdData->hitFID = hitFeature->id;
}
}

cmdData->rayLen = ( visible)? realLen: cmdData->rayLen;
cmdData->hitUID = (haveHit && visible)? hitUnit->id: cmdData->hitUID;
cmdData->rayLen = visible? realLen: cmdData->rayLen;
}
}

Expand Down
5 changes: 4 additions & 1 deletion rts/ExternalAI/AICheats.cpp
Expand Up @@ -10,6 +10,7 @@
#include "Sim/Misc/QuadField.h"
#include "Sim/Units/UnitHandler.h"
#include "Sim/Units/UnitLoader.h"
#include "Sim/Features/Feature.h"
#include "Sim/Misc/GlobalSynced.h"
#include "Sim/Misc/TeamHandler.h"
#include "Game/GameServer.h"
Expand Down Expand Up @@ -395,10 +396,12 @@ int CAICheats::HandleCommand(int commandId, void *data)
if (CHECK_UNITID(cmdData->srcUID)) {
const CUnit* srcUnit = uh->units[cmdData->srcUID];
const CUnit* hitUnit = NULL;
const CFeature* hitFeature = NULL;

if (srcUnit != NULL) {
cmdData->rayLen = helper->TraceRay(cmdData->rayPos, cmdData->rayDir, cmdData->rayLen, 0.0f, srcUnit, hitUnit, cmdData->flags);
cmdData->rayLen = helper->TraceRay(cmdData->rayPos, cmdData->rayDir, cmdData->rayLen, 0.0f, srcUnit, hitUnit, cmdData->flags, &hitFeature);
cmdData->hitUID = (hitUnit != NULL)? hitUnit->id: -1;
cmdData->hitFID = (hitFeature != NULL)? hitFeature->id: -1;
}
}

Expand Down
1 change: 1 addition & 0 deletions rts/ExternalAI/AILegacySupport.h
Expand Up @@ -123,6 +123,7 @@ struct AIHCTraceRay
int srcUID;
int hitUID;
int flags;
int hitFID;
};

struct AIHCPause
Expand Down
1 change: 1 addition & 0 deletions rts/ExternalAI/Interface/AISCommands.h
Expand Up @@ -1114,6 +1114,7 @@ struct STraceRayCommand {
int srcUID;
int hitUID;
int flags;
int hitFID;
}; // COMMAND_TRACE_RAY

/**
Expand Down
4 changes: 3 additions & 1 deletion rts/ExternalAI/SSkirmishAICallbackImpl.cpp
Expand Up @@ -561,13 +561,15 @@ EXPORT(int) skirmishAiCallback_Engine_handleCommand(int teamId, int toId, int co
cCmdData->rayLen,
cCmdData->srcUID,
cCmdData->hitUID,
cCmdData->flags
cCmdData->flags,
cCmdData->hitFID,
};

wrapper_HandleCommand(clb, clbCheat, AIHCTraceRayId, &cppCmdData);

cCmdData->rayLen = cppCmdData.rayLen;
cCmdData->hitUID = cppCmdData.hitUID;
cCmdData->hitFID = cppCmdData.hitFID;
} break;

case COMMAND_PAUSE: {
Expand Down

0 comments on commit 60e3fc3

Please sign in to comment.