Jump to content

dxMoveElement(Custom function)


kevenvz

Recommended Posts

Hello, I am bussy with an dx library(for my own creations) and I made this dxMoveElement. The problem is it won't remove the eventHandler.

function dxMoveElement(dxElement,endX,endY,speed) 
  local xx,yy = dxGetPosition(dxElement) 
  moveDxElement = function() 
    local x,y = dxGetPosition(dxElement) 
    local movex,movey = false,false 
    if (x ~= endX) then 
      if (x > endX) then 
        x = x - speed 
      elseif(x < endX) then 
        x = x + speed 
      end 
    else 
      movex = true 
    end 
     
    if (y ~= endY) then 
      if (y > endY) then 
        y = y - speed 
      elseif(y < endY) then 
        y = y + speed 
      end 
    else 
      movey = true 
    end 
     
    dxSetPosition(dxElement,x,y) 
    if movex and movey then 
      removeEventHandler("onClientRender",root,moveDxElement) 
      outputDebugString("Done!") 
    end 
  end 
  addEventHandler("onClientRender",root,moveDxElement) 
end 

It works for single Elements but when I do this:

  dxMoveElement(topBar, 0, 0, 1) 
  dxMoveElement(topBarTextRight, 800, 5, 1) 
  dxMoveElement(topBarTextLeft, 10, 5, 1) 
  dxMoveElement(botBar, 0, 750, 5) 
  dxMoveElement(statsButton, 10, 760, 5) 

It will bugg!

Thanks!

Link to comment

Thanks! It works, but now I got this strange little bug when I start a resource(like runcode) it deletes all the elements.

Code:

For loop(Inside an onClientRender event) 
for num,dxElement in pairs(dxMoveTable) do 
      if (dxElement.x > dxElement.endX) then 
        dxElement.x = dxElement.x - dxElement.speed 
      elseif (dxElement.x < dxElement.endX) then 
        dxElement.x = dxElement.x + dxElement.speed 
      end 
      if (dxElement.y > dxElement.endY) then 
        dxElement.y = dxElement.y - dxElement.speed 
      elseif (dxElement.y < dxElement.endY) then 
        dxElement.y = dxElement.y + dxElement.speed 
      end 
      if (dxElement.y == dxElement.endY) and (dxElement.x == dxElement.endX) then 
        outputDebugString("Element moved!") 
        table.remove(dxMoveTable,num) 
      end 
      dxSetPosition(dxElement.dxElement,dxElement.x,dxElement.y) 
    end 
  
function dxMoveElement(dxElement,endX,endY,speed) 
  local x,y = dxGetPosition(dxElement) 
  table.insert(dxMoveTable,{ 
    dxElement = dxElement, 
    x = x, 
    y = y, 
    endX = endX, 
    endY = endY, 
    speed = speed}) 
end 

Link to comment

No I am using onClientRender cause it is for all my ccreate dxElements

Full onClientRender:

addEventHandler("onClientRender",root, 
  function() 
    for _,dxElement in pairs(getElementsByType("dxRectangle")) do 
      dxDrawRectangle(AbsoluteToRelativX(getElementData(dxElement,"x")),AbsoluteToRelativY(getElementData(dxElement,"y")),AbsoluteToRelativX(getElementData(dxElement,"width")),AbsoluteToRelativY(getElementData(dxElement,"height")),getElementData(dxElement,"color"),getElementData(dxElement,"postGUI")) 
    end 
    for _,dxElement in pairs(getElementsByType("dxImage")) do 
      dxDrawImage(AbsoluteToRelativX(getElementData(dxElement,"x")),AbsoluteToRelativY(getElementData(dxElement,"y")),AbsoluteToRelativX(getElementData(dxElement,"width")),AbsoluteToRelativY(getElementData(dxElement,"height")),getElementData(dxElement,"image"),getElementData(dxElement,"rotation"),getElementData(dxElement,"rotationCenterOffsetX"),getElementData(dxElement,"rotationCenterOffsetY"),getElementData(dxElement,"color"),getElementData(dxElement,"postGUI")) 
    end 
    for _,dxElement in pairs(getElementsByType("dxButton")) do 
      dxDrawImage(AbsoluteToRelativX(getElementData(dxElement,"x")),AbsoluteToRelativY(getElementData(dxElement,"y")),AbsoluteToRelativX(getElementData(dxElement,"width")),AbsoluteToRelativY(getElementData(dxElement,"height")),getElementData(dxElement,"image"),0,0,0,getElementData(dxElement,"color"),getElementData(dxElement,"postGUI")) 
      dxDrawText(getElementData(dxElement,"text"),AbsoluteToRelativX(getElementData(dxElement,"x")),AbsoluteToRelativY(getElementData(dxElement,"y")),AbsoluteToRelativX(getElementData(dxElement,"x") + getElementData(dxElement,"width")),AbsoluteToRelativY(getElementData(dxElement,"y") + getElementData(dxElement,"height")),getElementData(dxElement,"color"),getElementData(dxElement,"scale"),getElementData(dxElement,"font"),getElementData(dxElement,"alignX"),getElementData(dxElement,"alignY"),false,false,getElementData(dxElement,"postGUI"),getElementData(dxElement,"colorCoded"),false) 
    end 
    for _,dxElement in pairs(getElementsByType("dxText")) do 
      dxDrawText(getElementData(dxElement,"text"),AbsoluteToRelativX(getElementData(dxElement,"x")),AbsoluteToRelativY(getElementData(dxElement,"y")),AbsoluteToRelativX(getElementData(dxElement,"width")),AbsoluteToRelativY(getElementData(dxElement,"height")),getElementData(dxElement,"color"),getElementData(dxElement,"scale"),getElementData(dxElement,"font"),getElementData(dxElement,"alignX"),getElementData(dxElement,"alignY"),getElementData(dxElement,"clip"),getElementData(dxElement,"wordBreak"),getElementData(dxElement,"postGUI"),getElementData(dxElement,"colorCoded"),getElementData(dxElement,"subPixelPositioning")) 
    end 
    for num,dxElement in pairs(dxMoveTable) do 
      if (dxElement.x > dxElement.endX) then 
        dxElement.x = dxElement.x - dxElement.speed 
      elseif (dxElement.x < dxElement.endX) then 
        dxElement.x = dxElement.x + dxElement.speed 
      end 
      if (dxElement.y > dxElement.endY) then 
        dxElement.y = dxElement.y - dxElement.speed 
      elseif (dxElement.y < dxElement.endY) then 
        dxElement.y = dxElement.y + dxElement.speed 
      end 
      if (dxElement.y == dxElement.endY) and (dxElement.x == dxElement.endX) then 
        table.remove(dxMoveTable,num) 
      end 
      dxSetPosition(dxElement.dxElement,dxElement.x,dxElement.y) 
    end 
  end) 

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...