Example #1
0
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);
}
Example #2
0
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;
}