Example #1
0
typeRound(int nbr, int type)
{
    if (type == 0)
        return toNext20(nbr-10);
    else
        return toNext16Compatible(nbr);
}
Example #2
0
void ObjectsEditonMode::mouseDrag(int x, int y, Qt::KeyboardModifiers modifieres)
{
    if (creatNewObject)
    {
        lx = x;
        ly = y;

        int xpos = typeRound(dx, newObject->getType());
        int ypos = typeRound(dy, newObject->getType());

        int mX = typeRound(qMax(0, lx), newObject->getType());
        int mY = typeRound(qMax(0, ly), newObject->getType());

        int w = qAbs(mX-xpos);
        int h = qAbs(mY-ypos);

        if (newObject->getType() == 0)
        {
            if (mX < 0) mX = 0;
            else w += 20;
            if (mY < 0) mY = 0;
            else h += 20;
        }

        newObject->setPosition(qMin(xpos, mX), qMin(ypos, mY));
        newObject->resize(w, h);

        return;
    }

    if (selectionMode)
    {
        lx = x;
        ly = y;
        selectedObjects.clear();
        selectedObjects = getObjectsAtPos(lx, ly, dx, dy, false);
    }
    else
    {
        updateSelectionBounds();

        // Drag
        if (mouseAct.hor == ResizeNone && mouseAct.vert == ResizeNone)
        {
            int xDelta = x-lx;
            int yDelta = y-ly;

            // Quick and dirty fix to prevent the dragging objects from wiggling sometimes
            if (xDelta == -xDeltaL) xDelta = 0;
            else xDeltaL = xDelta;
            if (yDelta == -yDeltaL) yDelta = 0;
            else yDeltaL = yDelta;

            if (xDelta < -minBoundX) xDelta = -minBoundX;
            if (yDelta < -minBoundY) yDelta = -minBoundY;
            if (xDelta == 0 && yDelta == 0) return;

            if (selectionHasBGDats)
            {
                xDelta = toNext20(xDelta);
                yDelta = toNext20(yDelta);
            }
            else if (modifieres == Qt::AltModifier)
            {
                xDelta = toNext16Compatible(xDelta);
                xDelta = toNext16Compatible(xDelta);
            }
            else
            {
                xDelta = toNext10(xDelta);
                yDelta = toNext10(yDelta);
            }

            foreach (Object* obj, selectedObjects)
            {
                obj->increasePosition(xDelta, yDelta);
            }

            minBoundX += xDelta;
            minBoundY += yDelta;
            lx += xDelta;
            ly += yDelta;
        }
Example #3
0
void ObjectsEditonMode::mouseDown(int x, int y, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers)
{
    dx = x;
    dy = y;
    lx = x;
    ly = y;

    if (buttons == Qt::RightButton)
    {
        selectedObjects.clear();

        if (drawType == 0)
        {
            int id = selTileset << 12;
            id = (id & 0xF000) | selObject;
            BgdatObject* bgdatobj = new BgdatObject(toNext20(x-10), toNext20(y-10), 20, 20, id, selLayer);
            level->objects[selLayer].append(bgdatobj);
            newObject = bgdatobj;
            creatNewObject = true;
            selectedObjects.append(bgdatobj);
        }
        else if (drawType == 1)
        {
            Sprite* spr = new Sprite(0, 0, selSprite);
            spr->setRect();
            int xpos = toNext10(dx-spr->getwidth()/2-spr->getOffsetX());
            int ypos = toNext10(dy-spr->getheight()/2-spr->getOffsetY());
            if (xpos < 0) xpos = 0;
            if (ypos < 0) ypos = 0;
            spr->setPosition(xpos, ypos);
            level->sprites.append(spr);
            selectedObjects.append(spr);
        }
        else if (drawType == 4)
        {
            Location* loc = new Location(toNext16Compatible(x), toNext16Compatible(y), 4, 4, 0);
            level->locations.append(loc);
            newObject = loc;
            creatNewObject = true;
        }
    }

    if (buttons == Qt::LeftButton)
    {
        mouseAct = getActionAtPos(x, y);

        if (!mouseAct.drag || (mouseAct.hor == ResizeNone && mouseAct.vert == ResizeNone))
        {
            QList<Object*> tempSelObjects = selectedObjects;
            bool shift = false;

            if (modifiers != Qt::ShiftModifier)
                selectedObjects = getObjectsAtPos(dx, dy, dx, dy, true);
            else
            {
                shift = true;
                QList<Object*> newObjList = getObjectsAtPos(dx, dy, dx, dy, true);
                if (newObjList.size() == 1)
                {
                    if(!selectedObjects.contains(newObjList[0]))
                        selectedObjects.append(newObjList[0]);
                    else
                        selectedObjects.removeOne(newObjList[0]);
                }
            }

            if (!shift && selectedObjects.size() != 0 && tempSelObjects.contains(selectedObjects[0]))
            {
                selectedObjects = tempSelObjects;
            }

            if (selectedObjects.size() == 0)
                selectionMode = true;
        }

        mouseAct = getActionAtPos(x, y);
        actualCursor = getCursorAtPos(x, y);
        updateSelectionBounds();
    }
}