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)
{
    const Vec2i realPos = Vec2iFull2Real(pos);
    if (IsCollisionDiamond(&gMap, realPos, actor->tileItem.size))
    {
        return false;
    }
    if (CollideGetFirstItem(
                &actor->tileItem, realPos, TILEITEM_IMPASSABLE,
                CalcCollisionTeam(1, actor),
                IsPVP(gCampaign.Entry.Mode)))
    {
        return false;
    }
    return true;
}
Example #3
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;
}
Example #4
0
static int IsOnSameTeam(TTileItem *i, CollisionTeam team)
{
	if (gConfig.Game.AllyCollision != ALLYCOLLISION_NORMAL)
	{
		CollisionTeam itemTeam = COLLISIONTEAM_NONE;
		if (i->kind == KIND_CHARACTER)
		{
			TActor *a = i->actor;
			itemTeam = CalcCollisionTeam(1, a);
		}
		return
			team != COLLISIONTEAM_NONE &&
			itemTeam != COLLISIONTEAM_NONE &&
			team == itemTeam;
	}
	return 0;
}
Example #5
0
bool CollisionIsOnSameTeam(
	const TTileItem *i, const CollisionTeam team, const bool isPVP)
{
	if (gConfig.Game.AllyCollision != ALLYCOLLISION_NORMAL)
	{
		CollisionTeam itemTeam = COLLISIONTEAM_NONE;
		if (i->kind == KIND_CHARACTER)
		{
			TActor *a = CArrayGet(&gActors, i->id);
			itemTeam = CalcCollisionTeam(1, a);
		}
		return
			team != COLLISIONTEAM_NONE &&
			itemTeam != COLLISIONTEAM_NONE &&
			team == itemTeam &&
			!isPVP;
	}
	return 0;
}