TObject *AIGetObjectRunningInto(TActor *a, int cmd) { // Check the position just in front of the character; // check if there's a (non-dangerous) object in front of it Vec2i frontPos = Vec2iFull2Real(a->Pos); TTileItem *item; if (cmd & CMD_LEFT) { frontPos.x--; } else if (cmd & CMD_RIGHT) { frontPos.x++; } if (cmd & CMD_UP) { frontPos.y--; } else if (cmd & CMD_DOWN) { frontPos.y++; } item = GetItemOnTileInCollision( &a->tileItem, frontPos, TILEITEM_IMPASSABLE, CalcCollisionTeam(1, a), gCampaign.Entry.Mode == CAMPAIGN_MODE_DOGFIGHT); if (!item || item->kind != KIND_OBJECT) { return NULL; } return CArrayGet(&gObjs, item->id); }
static bool IsPosOK(TActor *actor, Vec2i pos) { Vec2i realPos = Vec2iFull2Real(pos); Vec2i size = Vec2iNew(actor->tileItem.w, actor->tileItem.h); if (IsCollisionWallOrEdge(&gMap, realPos, size)) { return 0; } if (GetItemOnTileInCollision( &actor->tileItem, realPos, TILEITEM_IMPASSABLE, CalcCollisionTeam(1, actor), gCampaign.Entry.Mode == CAMPAIGN_MODE_DOGFIGHT)) { return 0; } return 1; }